[Rd] Depends: R (>= 4.1) for packages that use |> and \(...)
Henrik Bengtsson
henr|k@bengt@@on @end|ng |rom gm@||@com
Thu Jan 16 16:22:03 CET 2025
Thanks for looking into this and the patch. FWIW, there's an open
PR18105 - "R CMD build: Add dependency on R >= 4.1.0 if code uses pipe
symbol |>" for this
(https://bugs.r-project.org/show_bug.cgi?id=18105).
/Henrik
On Thu, Jan 16, 2025 at 3:42 AM Ivan Krylov via R-devel
<r-devel using r-project.org> wrote:
>
> Hello R-devel,
>
> Approximately [*] the following CRAN packages make use of the pipe
> syntax in their source code or examples without depending on R >= 4.1:
>
> [1] "biplotEZ" "CaseBasedReasoning" "collinear"
> [4] "cubble" "disk.frame" "duckdbfs"
> [7] "eia" "feltr" "flattabler"
> [10] "geodimension" "hgnc" "himach"
> [13] "lay" "lidR" "locateip"
> [16] "particles" "photosynthesis" "pivotea"
> [19] "planr" "rtrek" "satres"
> [22] "sdtmval" "selenider" "sewage"
> [25] "stminsights" "tabr" "tidygraph"
> [28] "tidywikidatar" "USgas" "washi"
> [31] "zctaCrosswalk"
>
> Since we have checks in place to automatically set Depends: R (>=
> 2.10.0) for data files compressed with xz or bzip2 and >= 3.5.0 for
> data files serialized with format version 3, would it make sense to
> automatically add Depends: R (>= 4.1) for such packages?
>
> The patch at the end of this message adds the R version dependency
> during R CMD build:
>
> R-devel CMD build --no-build-vignettes .
> * checking for file ‘./DESCRIPTION’ ... OK
> * preparing ‘biplotEZ’:
> * checking DESCRIPTION meta-information ... OK
> * cleaning src
> * checking vignette meta-information ... OK
> * checking for LF line-endings in source and make files and shell
> scripts
> * checking for empty or unneeded directories
> NB: this package now depends on R (>= 4.1.0)
> WARNING: Added dependency on R >= 4.1.0 because some of the source
> files use the new syntax constructs.
> Files making use of R >= 4.1 pipe |> or function shorthand \(...):
> biplotEZ/R/biplot.R biplotEZ/R/translate_axes.R
> * building ‘biplotEZ_2.2.tar.gz’
>
> A more extensive test could also look at the tests, demos, and
> \examples{}, but that may take longer and open the door for false
> positives. A package that uses |> in one example would still be useful
> on R-4.0.0, while a package that uses |> in the source code would fail
> to parse and install.
>
> Index: src/library/tools/R/QC.R
> ===================================================================
> --- src/library/tools/R/QC.R (revision 87545)
> +++ src/library/tools/R/QC.R (working copy)
> @@ -10367,7 +10367,29 @@
> }
> }
>
> +.check_use_of_R41_syntax <-
> +function(files)
> +{
> + out <- vapply(files,
> + function(f) tryCatch(
> + any(getParseData(parse(f, keep.source = TRUE))$token %in% c("PIPE", "'\\\\'")),
> + error = function(e) FALSE
> + ),
> + FALSE)
> + out <- files[out]
> + class(out) <- "check_use_of_R41_syntax"
> + out
> +}
>
> +format.check_use_of_R41_syntax <-
> +function(x, ...)
> +{
> + if (length(x)) {
> + c("Files making use of R >= 4.1 pipe |> or function shorthand \\(...):",
> + .strwrap22(x, " "))
> + } else character()
> +}
> +
> ### Local variables: ***
> ### mode: outline-minor ***
> ### outline-regexp: "### [*]+" ***
> Index: src/library/tools/R/build.R
> ===================================================================
> --- src/library/tools/R/build.R (revision 87545)
> +++ src/library/tools/R/build.R (working copy)
> @@ -1165,9 +1165,11 @@
> desc <- .read_description(file.path(pkgname, "DESCRIPTION"))
> Rdeps <- .split_description(desc)$Rdepends2
> hasDep350 <- FALSE
> + hasDep410 <- FALSE
> for(dep in Rdeps) {
> if(dep$op != '>=') next
> if(dep$version >= "3.5.0") hasDep350 <- TRUE
> + if(dep$version >= "4.1.0") hasDep410 <- TRUE
> }
> if (!hasDep350) {
> ## re-read files after exclusions have been applied
> @@ -1189,6 +1191,23 @@
> "\n")
> }
> }
> + if (!hasDep410) {
> + uses410 <- .check_use_of_R41_syntax(dir(file.path(pkgname, "R"),
> + full.names = TRUE,
> + pattern = "[.]R$",
> + ignore.case = TRUE))
> + if (length(uses410)) {
> + fixup_R_dep(pkgname, "4.1.0")
> + msg <- paste("WARNING: Added dependency on R >= 4.1.0 because",
> + "some of the source files use the new syntax",
> + "constructs.")
> + printLog(Log,
> + paste(c(strwrap(msg, indent = 2L, exdent = 2L),
> + format(uses410)),
> + collapse = "\n"),
> + "\n")
> + }
> + }
>
> ## add NAMESPACE if the author didn't write one
> if(!file.exists(namespace <- file.path(pkgname, "NAMESPACE")) ) {
>
>
> --
> Best regards,
> Ivan
>
> [*] Based on the following GitHub search, which requires logging in:
> https://github.com/search?q=org%3Acran%20path%3A%2F%5B.%5D%5BRr%5Dd%3F%24%2F%20%2F%5Cs%5C%7C%3E%2F&type=code
> There's currently no REST API support for regexp search, so the list
> was obtained manually.
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list