diff --git a/R/not_loadalled.R b/R/not_loadalled.R new file mode 100644 index 0000000..e4093c1 --- /dev/null +++ b/R/not_loadalled.R @@ -0,0 +1,12 @@ +#' Skip if any of the packages come from `pkgload::load_all()` +#' +#' Loops over all packages in an object, +#' and skips if any of them are currently `pkgload::load_all()`d. +#' @inheritParams globals::globalsOf +#' @inheritDotParams globals::globalsOf +#' @keywords dependencies helper +#' @export +skip_if_any_pkgs_via_loadall <- function(expr, ...) { + pkgs_used <- globals::packagesOf(globals::globalsOf(expr = expr, ...)) + purrr::walk(pkgs_used, elf::skip_if_pkg_installed_but_not_via_loadall) +} diff --git a/tests/testthat/test-not_loadalled.R b/tests/testthat/test-not_loadalled.R new file mode 100644 index 0000000..3133159 --- /dev/null +++ b/tests/testthat/test-not_loadalled.R @@ -0,0 +1,16 @@ +describe("skip_if_any_pkgs_via_loadall", { + it( + "skips expressions with non-existent packages", + expect_error( + skip_if_any_pkgs_via_loadall( + + globals::packagesOf( + globals::globalsOf( + # str(rlang::parse_expr("base::abs(purrr::walk())")) + base::abs(purrr::walk(1, print)) + ) + ) + ) + ) + ) +})