[Rd] Depends: R (>= 4.1) for packages that use |> and \(...)
Kurt Hornik
Kurt@Horn|k @end|ng |rom wu@@c@@t
Thu Jan 23 11:16:48 CET 2025
>>>>> 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.farm using 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 using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list