Skip to content

Commit 9c33c3a

Browse files
committed
feat: use inject_funs to update parent.env
1 parent fdec706 commit 9c33c3a

File tree

3 files changed

+15
-12
lines changed

3 files changed

+15
-12
lines changed

R/qenv-class.R

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,19 +31,12 @@ setMethod(
3131
"initialize",
3232
"qenv",
3333
function(.Object, .xData, code = list(), ...) { # nolint: object_name.
34-
mask_env <- new.env(parent = parent.env(.GlobalEnv))
35-
mask_env$library <- function(...) {
36-
x <- library(...)
37-
if (!identical(parent.env(mask_env), parent.env(.GlobalEnv))) {
38-
parent.env(mask_env) <- parent.env(.GlobalEnv)
39-
}
40-
invisible(x)
41-
}
34+
parent <- parent.env(.GlobalEnv)
4235
new_xdata <- if (rlang::is_missing(.xData)) {
43-
new.env(parent = mask_env)
36+
new.env(parent = parent)
4437
} else {
4538
checkmate::assert_environment(.xData)
46-
rlang::env_clone(.xData, parent = mask_env)
39+
rlang::env_clone(.xData, parent = parent)
4740
}
4841
lockEnvironment(new_xdata, bindings = TRUE)
4942

R/qenv-eval_code.R

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,12 +49,22 @@ setMethod("eval_code", signature = c(object = "qenv.error"), function(object, co
4949
object@.xData <- rlang::env_clone(object@.xData, parent = parent.env(object@.xData))
5050
parsed_code <- parse(text = code, keep.source = TRUE)
5151

52+
old <- evaluate::inject_funs(
53+
library = function(...) {
54+
x <- library(...)
55+
if (!identical(parent.env(object@.xData), parent.env(.GlobalEnv))) {
56+
parent.env(object@.xData) <- parent.env(.GlobalEnv)
57+
}
58+
invisible(x)
59+
}
60+
)
5261
out <- evaluate::evaluate(
5362
code,
5463
envir = object@.xData,
5564
stop_on_error = 1,
5665
output_handler = evaluate::new_output_handler(value = identity)
5766
)
67+
evaluate::inject_funs(old) # remove library() override
5868

5969
new_code <- list()
6070
for (this in out) {

tests/testthat/test-qenv_constructor.R

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,11 @@ testthat::test_that("constructor returns qenv", {
5757
testthat::describe("grand parent of qenv environment is the parent of .GlobalEnv", {
5858
testthat::it("via slot", {
5959
q <- qenv()
60-
testthat::expect_identical(parent.env(parent.env(q@.xData)), parent.env(.GlobalEnv))
60+
testthat::expect_identical(parent.env(q@.xData), parent.env(.GlobalEnv))
6161
})
6262

6363
testthat::it("via qenv directly", {
6464
q <- qenv()
65-
testthat::expect_identical(parent.env(parent.env(q)), parent.env(.GlobalEnv))
65+
testthat::expect_identical(parent.env(q), parent.env(.GlobalEnv))
6666
})
6767
})

0 commit comments

Comments
 (0)