[Rd] Depends: R (>= 4.1) for packages that use |> and \(...)
Ian Farm
|@n@|@rm @end|ng |rom m@|ne@edu
Wed Jan 22 21:34:41 CET 2025
Hello all,
Would packages using the underscore placeholder with the native pipe need
to also depend on R >= 4.2.0?
There appear to be a number, modifying Ivan's GitHub search:
https://github.com/search?q=org%3Acran+path%3A%2F%5B.%5D%5BRr%5Dd%3F%24%2F+%2F%5Cs%5C%7C%3E%5Cs.*%3D%5Cs%3F_%2F&type=code
Regards,
Ian
____
Ian Farm
Laboratory Manager, The Agroecology Lab
University of Maine School of Food and Agriculture
5762 Roger Clapp Greenhouses, Orono, Maine 04469
On Wed, Jan 22, 2025 at 1:47 AM Kurt Hornik <Kurt.Hornik using wu.ac.at> wrote:
> >>>>> 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
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
[[alternative HTML version deleted]]
More information about the R-devel
mailing list