Tools to make an R developer's life easier
test()
now sets the collation order to C
before running, which matches
the behavior of tests when run with R CMD check
(#2121)
New options("devtools.ellipsis_action")
option added to control the action
of ellipsis in devtools. This should be one of
rlang::abort
- to emit an error if arguments are unusedrlang::warn
- to emit a warning if arguments are unusedrlang::inform
- to emit a message if arguments are unusedrlang::signal
- to emit a message if arguments are unused
Using rlang::signal
will produce no output unless the custom condition is
caught, so it is the best way to retain backwards compatibility with devtools
behavior prior to 2.2.0.
The default behavior was also changed to issue a
warning rather than an error if any arguments are unused, as there are some
cases where devtools does not need to install the package, so unused
arguments are false positives (#2109).install()
now throws an error when it fails, as intended (#2120)
install()
now again reloads and re-attaches packages if they were
previously loaded (#2111).
release()
no longer calls the deprecated dr_devtools()
(#2105)
test()
now explicitly passes stop_on_failure = FALSE
to
testthat::test_dir()
(@jameslamb, #2099)
create()
added back, the RStudio IDE uses create()
in the create packages
dialog, so removing it in version 2.1.0 broke old versions of the IDE.
New dev_sitrep()
function to return information about your development
environment and diagnose common problems. The former functions
dr_devtools()
and dr_github()
have been deprecated. (#1970)
All functions taking ...
now use the ellipsis package. This catches errors
when arguments are misspelled or incorrectly specified (#2016)
build_vignettes()
now correctly installs the vignette builder if it is not
already installed (#2089).
dev_sitrep()
now uses the same endpoint to detect the current RStudio
version as the IDE (#2050).
document()
gains a quiet
parameter, to silence output and check()
now
passes its quiet argument to it (#1986).
Add the DT package as a dependency, so that test_coverage()
and
test_coverage_file()
work without having to install additional packages
(#2085).
check_man()
now succeeds when tools::undoc()
returns empty results
(#1944).
check_win_*()
functions gain a email
argument, so temporarily change the
email the check results will be sent to (#1723).
install()
now explicitly unloads packages before trying to install a new
version (#2094).
All install_*()
functions now attach build tools to the PATH, which makes them work on
Windows when RTools is not on the default PATH (#2093).
test_coverage_file()
now works when there is not a 1 to 1 correspondence
between test and source files (#2011).
release()
now works again when pkg
is not the current working directory
(#1974).
release()
now works without error when options("repos")
is unnamed (#1956).
testthat
and roxygen2
are now added to Imports
rather than Suggests
,
so they are automatically installed when you install devtools.create()
, create_description()
, setup()
use_appveyor()
, use_build_ignore()
, use_code_of_conduct()
,
use_coverage()
, use_cran_badge()
, use_cran_comments()
, use_data()
,
use_data_raw()
, use_dev_version()
, use_git()
, use_git_hook()
,
use_github()
, use_github_links()
, use_gpl3_license()
,
use_mit_license()
, use_news_md()
, use_package()
, use_package_doc()
,
use_rcpp()
, use_readme_md()
, use_readme_rmd()
, use_revdep()
,
use_rstudio()
, use_test()
, use_testthat()
, use_travis()
,
use_vignette()
, have been removed after being deprecated in previous
releases. Use the versions in the usethis
package directly.
check_cran()
, revdep_check()
, revdep_check_print_problems()
,
revdep_check_reset()
, revdep_check_resume()
, revdep_check_save_summary()
,
revdep_email()
have been removed after being
deprecated in prevous releases. It is recommended to use the
revdepcheck package instead.
system_check()
, system_output()
have been removed after being deprecated
in previous releases. It is recommend to use the
processx package instead.
build_win()
has been removed, after being deprecated in previous releases.
yesno()
as used in release()
now has clearer synonyms for "yes" (@mattmalin, #1993)
check_rhub
gains a new argument build_args
for arguments passed to
R CMD build
. ...
is now passed to rhub::check_for_cran()
(@gaborcsardi, @maelle, #2041)
build_manual()
now fails if the manual fails to build. (#2056)
test_file()
and test_coverage_file()
now work with C
and C++ files in the src/ directory as well.
Devtools 2.0.0 is a major release that contains work from the past year and a half, since the major devtools release (1.13.0).
This release splits the functionality in devtools into a number of smaller packages which are simpler to develop and also easier for other packages to depend on. In particular the following packages have been spun off in what we are calling the 'conscious uncoupling' of devtools.
install_github()
).build()
).load_all()
).check()
).revdep_check()
).session_info()
).use_test()
).devtools will remain the main package developers will interact with when writing R packages; it will just rely on these other packages internally for most of the functionality.
There have been a number of breaking changes in this release, while this will cause some short term pain for users it will result in a easier to understand API in the future, so we feel the tradeoff is worthwhile.
devtools::install()
arguments have been changed as follows.
local
-> build
force_deps
-> force
upgrade_dependencies
-> upgrade
threads
-> Removed, but you can use Ncpus
, which is passed by ...
to install.packages()
metadata
-> Removedout_dir
-> Removedskip_if_log_exists
-> Removedcheck()
argument check_version
has been renamed to remote
to better
describe what tests are disabled (#1811)
get_path()
, set_path()
, add_path()
and on_path()
have been removed,
this functionality is available with withr::with_path()
(#1796).
The lang
argument to spell_check()
was removed, for compatibility with
spelling v1.1. (#1715)
The previously deprecated with_
functions have now been removed. The
functionality has been moved to the withr package.
RCMD()
, clean_source()
, eval_clean()
and evalq_clean()
have been
removed. These functions never worked terribly well, and have been replaced
by the much better functions in callr.
build_win()
has been renamed to check_win_release()
, check_win_devel()
,
and check_win_oldrelease()
(#1598).
Infrastructure functions (use_*
) now use the implementations in usethis
and the versions in devtools are deprecated. If you use these from a package
you should switch your package to depend on usethis directly instead.
The revdep_check_*
functions have been deprecated in favor of the
revdepcheck package.
system_check()
and system_output()
have been deprecated in factor of the
processx package.
All install_*()
functions are now re-exported from remotes rather than
being defined in devtools
devtools now depends on roxygen2 6.1.0: this considerably simplifies
devtools::document()
and makes it more consistent with
roxygen2::roxygenise()
.
test_file()
function added to test one or more files from a package
(#1755).
test_coverage()
function added to provide a helper to compute test coverage
using covr (#1628).
test_file()
and test_coverage_file()
now have RStudio addins (#1650)
test_file_coverage()
function added to show the test coverage of one or
more files from a package. (#1755).
session_info()
now uses the implementation in the sessioninfo package.
Packages using devtools::session_info()
are encouraged to switch to using
sessioninfo::session_info()
instead.
package_info()
function now re-exported from the sessioninfo package.
check()
now uses rcmdcheck to run and parse R CMD check output (#1153).
Code related to simulating package loading has been pulled out into a
separate package, pkgload. The following functions have been moved to
pkgload without a shim: clean_dll()
, compile_dll()
, dev_example()
,
dev_help()
, dev_meta()
, find_topic()
, imports_env()
, inst()
,
load_code()
, load_dll()
, ns_env()
, parse_ns_file()
, pkg_env()
.
These functions are primarily for internal use.
load_all()
and unload()
have been moved to pkgload, but devtools
provides shims since these are commonly used.
find_rtools()
, setup_rtools()
, has_devel()
, compiler_flags()
,
build()
and with_debug()
have moved to the new pkgbuild package.
build()
and with_debug()
are re-exported by devtools
The spell_check()
code has been moved into the new spelling package and
has thereby gained support for vignettes and package wordlists. The devtools
function now wraps spelling::spell_check_package()
.
check_win_*()
now build the package with manual = TRUE
by default (#1890).
check()
output now works more nicely with recent changes to rcmdcheck (#1874).
reload()
now reloads loaded but not attached packages as well as attached ones.
Executed styler::style_pkg()
to update code style (#1851, @amundsenjunior).
save_all()
helper function wraps rstudioapi::documentSaveAll()
calls (#1850, @amundsenjunior).
check()
now allows users to run without --timings
(#1655)
update_packages()
better documented to advertise it can be used to update
packages installed by any of the install_*
functions.
check()
gains a incoming
option to toggle the CRAN incoming checks.
build_vignette()
gains a keep_md
option to allow keeping the intermediate markdown output (#1726)
remote_sha.github()
now correctly looks up SHA in private repositories
(#1827, @renozao).
devtools use_*()
functions now temporarily set the active usethis project
if given a pkg argument that is not the current directory. This provides
backwards compatibility with previous behavior (#1823).
Vignettes are now built in a separate process, and the package is installed before building the vignettes (#1822)
build_readme()
added to build the README.md from a README.Rmd (#1762)
build_vignettes()
now has a clean
and upgrade
arguments, to control
cleaning of intermediate files and upgrading vignette dependencies
respectively. (#1770).
release()
gains an additional question ensuring you updated codemeta.json
if one exists (#1774, #1754)
test()
now sets useFancyQuotes = FALSE
to better mimic the environment tests
are run under with R CMD check
(#1735).
test()
no longer passes encoding argument to testthat::test_dir()
(#1776)
install_url()
can now install package binaries on windows (#1765)
Fix skipping when installing from a full SHA (#1624)
add pkgdown::build_site()
wrapper (@kiwiroy, #1777)
add pkgdown site (https://devtools.r-lib.org) (#1779, @jayhesselberth)
install_version()
can now install current version of CRAN package on Windows
and macOS (@jdblischak, #1730)
The CRAN-RELEASE file is now added to .Rbuildignore (#1711)
check()
and check_built()
now have an error_on
argument to specify if
they should throw an error on check failures. When run non-interactively this
is set to "warnings" unless specified.
check()
now sets _R_CHECK_CRAN_INCOMING_REMOTE_
instead of
_R_CHECK_CRAN_INCOMING_
on R versions which support the former option
(#1271, #1276, #1702).
Now use cli package to draw rules - they are more aesthetically pleasing and the correct width in the RStudio build pane (#1627).
release()
has been tweaked to reflect modern submission workflow and to
ask questions rather than running code for you (#1632).
document()
, load_all()
, check()
, build()
and test()
now
automatically save open files when they are run inside the RStudio IDE. (#1576)
New check_rhub()
function to check packages using https://builder.r-hub.io/.
run_examples
was mistakenly passing show
to
pkgload::run_example
, causing it to fail (@amcdavid, #1449)
New build_manual()
function that produces pdf manual for the package
(@twolodzko, #1238).
If you use git release()
now generates a file called CRAN-RELEASE
that reminds you to tag the commit that you submitted to CRAN (#1198).
release()
once again looks for additional release questions in the
correct environment (#1434).
submit_cran()
now checks that you're ready to submit, since this is a
potentially expensive operation (#1228)
check()
defaults to running document()
only if you have used
roxygen previously (#1437).
Signal an error if commas are missing in between remote entries (#1511, @ianmcook).
build_vignettes()
gains a quiet argument (#1543).
source_gist()
works once more when there is only a single file
in the gist (#1266).
In order to not run test helpers in document()
, the helpers
argument of
load_all()
is set to FALSE
(@nbenn, #1669)
The my_unzip()
function is now able to use the utils::unzip
fallback when
R is compiled from source with no unzip package present
(@theGreatWhiteShark, #1678)
If the foghorn package is installed, release()
displays the results
of the CRAN checks (#1672, @fmichonneau).
This is a minor release mainly fixing bugs which snuck through in the devtools 2.0.0 release.
install()
now correctly passes the upgrade
parameter to
remotes::install_deps()
(@Paxanator, #1898).
install_deps()
now again works from any directory within a package (#1905)
Add a RStudio addin for test_coverage()
.
All tests which use remote resources are now skipped on CRAN, to avoid spurious failures
Two tests are not skipped when run on CRAN, as they fail due to an outdated pandoc and restrictions on writing to the package library respectively.
load_all()
now accepts 'package' objects, regaining previous behavior in
devtools prior to 2.0.0 (#1923)
test()
, test_coverage()
and test_coverage_file()
now set the
TESTTHAT_PKG
environment variable, so it is more consistent with running
the tests during R CMD check
(testthat#787).
check()
now replaces existing environment variables rather than appending
them (#1914).
Rcpp::compileAttributes()
stores the symbol names that
broke devtools tests.