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@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel