[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