From dc91f77950b2ca243c37ac9af0a58ce25ef0df54 Mon Sep 17 00:00:00 2001 From: RobertZK Date: Tue, 1 Nov 2016 13:20:10 -0500 Subject: [PATCH] Fix shadowing of rm in global context. --- CHANGELOG.md | 4 ++++ DESCRIPTION | 2 +- R/tracked_environment.R | 7 +++++-- tests/testthat/test-primitives.R | 6 ++++++ 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 74f796f..a090312 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# Version 0.2.3.9003 + +* Fix broken usage of `rm` in global context. + # Version 0.2.3.9002 * Implement an `exists` method for `tracked_environment` objects. diff --git a/DESCRIPTION b/DESCRIPTION index 14076f8..56eae51 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: objectdiff Type: Package Title: Objectdiff -Version: 0.2.3.9002 +Version: 0.2.3.9003 Description: Objectdiff is an R package for measuring differences between arbitrary R objects using patches, a la Git. For example, if you have slightly modified a data.frame, and you would like to diff --git a/R/tracked_environment.R b/R/tracked_environment.R index 5b32599..2c4f262 100644 --- a/R/tracked_environment.R +++ b/R/tracked_environment.R @@ -73,8 +73,11 @@ ls.default <- function(...) { #' @export rm <- function(..., envir = as.environment(-1)) { - base::rm(..., envir = - if (is.tracked_environment(envir)) environment(envir) else envir) + if (is.tracked_environment(envir)) { + eval.parent(substitute(base::rm(..., envir = base::get("env", envir)))) + } else { + eval.parent(substitute(base::rm(..., envir = envir))) + } } #' @export diff --git a/tests/testthat/test-primitives.R b/tests/testthat/test-primitives.R index 4e68cd8..f1b114c 100644 --- a/tests/testthat/test-primitives.R +++ b/tests/testthat/test-primitives.R @@ -23,6 +23,12 @@ test_that('it does not break the rm function', { expect_false('x' %in% ls()) }) +test_that('it does not break the rm function II', { + x <- 1 + rm('x') + expect_false('x' %in% ls()) +}) + test_that('it does not break parent.env', { x <- new.env() y <- new.env(parent = x)