att_from_examples() (and therefore att_amend_desc()) no longer chokes
on inline R inside roxygen2 markdown tags such as
@param x \r helper("x")`whenhelper()is a package-local function. Previously,att_from_examples()delegated toroxygen2::parse_file(), which evaluated inline R against baseenv()(roxygen2's fallback when no package env is registered) — base R is reachable, but package-local helpers are not, so each affected tag emittedcould not find function "helper"`.
Example detection now uses a focused regex over the source instead of
the full roxygen2 tokenizer (#135).att_from_rscript() now walks the R syntax tree instead of matching the
source text with regexes. Dependency detection no longer produces false
positives on :: inside string literals or comments (e.g. xpath
following-sibling::td, CSS label::after, sprintf('%s::plot()', ...))
(#120, #132).x[, 1], x[1, ],
empty switch alternatives, missing else branches). Earlier development
drafts of the walker crashed with argument "el" is missing, with no default on any script containing these patterns, which would have
silently degraded every real-world script to the legacy regex fallback.att_from_rscript() also recognises use("pkg", ...) (R >= 4.4) (#128),
getFromNamespace("fn", "pkg"), loadNamespace(), and named-argument
forms such as library(package = "pkg") or
requireNamespace("pkg", lib.loc = "...").base::library(pkg),
base::requireNamespace("pkg"), and methods::getFromNamespace(fn, "pkg")
are now honoured; the inner package is added to the dependency list.packageVersion(), getNamespace(),
asNamespace(), attachNamespace()) are intentionally not treated as
dependency introducers to avoid silently widening Imports on code that
only uses them for feature detection.att_from_rscript() gains an encoding argument (default
getOption("encoding")) so scripts saved in Latin-1 / Windows-1252 are
read with the system locale instead of being forced to UTF-8.att_from_rscript() now warns when a file fails to parse as valid R code
and the legacy regex-based detector is used as a fallback, so broken
scripts are no longer silently degraded.my_pkg::fn). Previously an underscore truncated the
detected name to the portion after the underscore, so a single syntax
error upstream could corrupt detection across the whole file.att_from_rmds() infers the vignette engine from the files actually
present: quarto is added when .qmd files are found, rmarkdown when
.Rmd files are found, both when the directory mixes the two.
Previously rmarkdown was forced in for .qmd-only projects (#131).att_from_rmd() / att_from_rmds(): inside_rmd now defaults to NULL
and is auto-detected via knitr::opts_knit$get("out.format"), so users
no longer have to think about it (#106).{fusen} development workflow; R/amend_with_config.R,
R/create_dependencies_file.R, R/dependencies_file_text.R and their
tests are now hand-maintained.create_renv_for_dev() by removing 'renv' from
folder_to_include.dev/manual_detection_edge_cases.R covering ~170 scripted cases (true
positives, false positives, known limitations) to make future
regressions of the detector obvious.att_from_examples() Removed escape characters (\) from Roxygen examples.att_from_examples() Fixed the selection of .R files in the source directory. (#124)att_from_examples() to get all packages called in examples from R filesatt_from_data() to look for functions called in data loading codeatt_amend_desc amend package DESCRIPTION file (Suggests) with the list of dependencies extracted from examples in R files.set_remotes_to_desc() takes into account the branchatt_from_rmds() and att_from_rscript doesn't search in 'renv' folder anymorecreate_renv_for_dev can work even outside of an R packagesatt_amend_desc and att_from_namespace return messages instead of warnings. (@MurielleDelmotte)When using att_amend_desc() without the default parameters, like pkg_ignore = "x" will now require att_amend_desc(pkg_ignore = "x", update.config = TRUE), otherwise, it will fail. This allows for the use of parameters stored in the config file when running att_amend_desc() directly in the console.
Recommendation: Run att_amend_desc(pkg_ignore = "x", update.config = TRUE) if you have to update your config, run att_amend_desc() daily as you'll want to use what is stored in the config file.
create_dependencies_file() gets parameter install_only_if_missing = FALSE by default to complete the installation instructions packages only if missing. (@MurielleDelmotte)
att_amend_desc() can run with the last set of parameters stored in a configuration file, without having to call them all each time. See vignettes and documentation of parameters update.config = FALSE, use.config = FALSE and path.c = "dev/config_attachment.yaml". (@dagousket)create_dependencies_file() now takes other sources into account (git, gitlab, github, bioc, local). (@MurielleDelmotte)create_dependencies_file(to = NULL) to only get the output as character and do not create a fileatt_amend_desc() does not modify user options("warn") level anymore (#94)att_amend_desc() allows "Remotes" field to contain @ref (#67)find_remotes() now informs when using "r-universe" repositories.check_if_suggests_is_installed in att_amend_desc() allow not to check if suggested package is installed. (thanks to @yogat3ch)create_renv_for_prod() don't look anymore for suggested packagesfind_remotes() and set_remotes_to_desc() now detects github, gitlab, git, bitbucket, local installations to add to the "Remotes:" part of the DESCRIPTION file (@MurielleDelmotte)att_from_qmds() as an alias of att_from_rmds().att_amend_desc() #52create_renv_for_dev() and create_renv_for_prod() function to create renv.lock file based on development project (@VincentGuyader and @statnmap).att_from_rmds().att_amend_desc() now saves file before processing\n will not interfere with package discoveryatt_to_desc_from_is() can now run with must.exist = FALSE to be used to fill
DESCRIPTION file during bookdown CI process. CI YAML files must be updated with this parameter.set_remotes_to_desc(clean = TRUE)set_remotes_to_desc()att_from_rscripts()att_amend_desc(document = TRUE)att_amend_desc()att_from_namespace()att_from_rmd()Breaking changes
att_to_description() deprecated in favor of att_amend_desc() to be first in autocompletion list, as this is the most used function of this package.att_from_rmd() gets parameter inline = TRUE by default to explore calls for packages in inline R code.att_from_rmd() and att_from_rmds() are not anymore executed in separate R session by default. You must set inside_rmd = TRUE to do so.Minor
find_remotes() to help fill Remotes field in DESCRIPTIONatt_to_desc_from_is() add parameter normalize to avoid problem with {desc}. (See https://github.com/r-lib/desc/issues/80)att_amend_desc() is an alias for att_to_description()att_desc_from_is() amends DESCRIPTION file from imports/suggests vector of packagesatt_to_desc_from_pkg() is an alias for att_to_description()att_to_description() shows packages added/removed from DESCRIPTIONatt_to_description() deals with dependencies in tests/ directoryatt_from_rmds() allows user defined regex to detect Rmd filesatt_from_rmd adds a temporary encoding parameter as knitr::purl will only deal with UTF-8 in the future. Parameter not added in att_from_rmds.att_to_description if {covr} is needed, should be added in parameter extra.suggestsatt_to_description has a parameter 'dir.t' to extract suggests dependencies from test directory Available by defaultatt_to_description allows for 'LinkingTo' field in DESCRIPTION with a messageatt_from_rmd now reads yaml headeratt_from_rmd use purl to extract R code in an other R session using system("Rscript -e ''")att_from_rmd: add warn option to allow hide messages from purl()att_to_description accept parameter path for package not being the current projectatt_to_description no error if NAMESPACE is emptycreate_dependencies_file filters base packages that cannot be installedatt_to_description deals with Remote dependenciesatt_to_description deals with Depends dependenciesatt_to_description keeps versions of packages previously addedatt_to_description removes option for automatic pkg versioncreate_dependencies_file deals with github Remotesatt_from_rmds now accept a vector of Rmd filenamesatt_to_description(add_version = TRUE) adds version of package in DESCRIPTIONatt_to_description(pkg_ignore) adds possibility to ignore some packagesinstall_from_description to install all missing packages listed in the description fileatt_to_descriptioncreate_dependencies_file to create a file listing all packages dependencies to dinstall before your packagepkg::fun calls in R scripts with att_from_functionsdevtools::document() before att_from_descriptionNEWS.md file to track changes to the package.