[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