[Rd] Depends: R (>= 4.1) for packages that use |> and \(...)
Kurt Hornik
Kurt@Horn|k @end|ng |rom wu@@c@@t
Wed Jan 22 07:46:56 CET 2025
>>>>> Kurt Hornik writes:
I just committed c8761[2-4] to the trunk which adds an internal utility
for finding package code using the pipe or function shorthand, teaches R
CMD build to add a dependency on R >= 4.1.0 as necessary, and teaches R
CMD check to NOTE a missing dependency on R >= 4.1.0, based on Ivan's
code.
Currently, we seem to have about 1149 packages on CRAN with package code
using the pipe or function shorthand, with only 415 depending on R >=
4.1.0, and 734 not. Argh.
Thanks again for spotting this.
Best
-k
>>>>> Kurt Hornik writes:
> Oh dear. Using a variant of Ivan's code, I seem to find 728 (!!!) CRAN
> packages which are missing their R >= 4.1 dependency.
> So clearly we need to do more about this than teach R CMD build to add
> the dependency ...
> Best
> -k
>>>>> Henrik Bengtsson writes:
>> Thanks. Will take a look ...
>> Best
>> -k
>>> 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
>>> ______________________________________________
>>> R-devel using r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> ______________________________________________
>> R-devel using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
More information about the R-devel
mailing list