>>>>> Ivan Krylov via R-devel writes: Thanks. I am already looking handling the 4.2.0 placeholder syntax, but likely will need to refactor the code I added yesterday.
The "experimental" 4.3.0 extra placeholder feature looks like a lot of effort: ideally there would be a simpler way. I'll ask on R Core. My guess would be that the new syntax is particularly prominently used in examples: if so, it would be good to also have coverage for this. Best -k > Many thanks to Henrik for remembering the report in Bugzilla and to > Kurt for implementing the change and finding out the true number of > affected packages. > On Wed, 22 Jan 2025 15:34:41 -0500 > Ian Farm <ian.f...@maine.edu> wrote: >> Would packages using the underscore placeholder with the native pipe >> need to also depend on R >= 4.2.0? > That's a good find! For the R >= 4.2 syntax, we only need to check for > getParseData(...)$token %in% 'PLACEHOLDER'. The R >= 4.3 syntax feature > is harder to test for: >>> As an experimental feature the placeholder _ can now also be used in >>> the rhs of a forward pipe |> expression as the first argument in an >>> extraction call, such as _$coef. More generally, it can be used as >>> the head of a chain of extractions, such as _$coef[[2]]. > I think it might be possible to parse(text = paste('PLACEHOLDER |>', > grandparent_expression)) and then look at the top-level function in the > call, but that feels quite fragile: > x <- utils::getParseData(parse(f, keep.source = TRUE)) > i <- x$token %in% "PLACEHOLDER" > pi <- x[i, "parent"] > ppi <- x[x$id %in% pi, "parent"] > placeholder_expressions <- utils::getParseText(x, ppi) > extractor_used <- vapply(placeholder_expressions, function(src) { > toplevel <- parse(text = paste("PLACEHOLDER |> ", src))[[1]][[1]] > identical(toplevel, quote(`$`)) || > identical(toplevel, quote(`[`)) || > identical(toplevel, quote(`[[`)) > }, FALSE) > Alternatively, we may find the first child of the grandparent of the > placeholder. If it's the placeholder expression, then the pipe must be > of the form ...|> _..., which is the R >= 4.3 syntax: > x <- utils::getParseData(parse(f, keep.source = TRUE)) > i <- x$token %in% "PLACEHOLDER" > vapply(which(i), function(i) { > pi <- x[i, "parent"] > ppi <- x[x$id %in% pi, "parent"] > cppi <- x[x$parent %in% ppi, "id"] > min(cppi) == pi > }, FALSE) > -- > Best regards, > Ivan > ______________________________________________ > R-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-devel ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel