Skip to content

Commit 49d342b

Browse files
committed
preserve original src when available
1 parent fae2452 commit 49d342b

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

R/qenv-eval_code.R

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,12 @@ setMethod("eval_code", signature = c("qenv", "language"), function(object, code)
9696
})
9797

9898
setMethod("eval_code", signature = c("qenv", "expression"), function(object, code) {
99-
# todo: if has srcfile then get original text!
100-
eval_code(object, code = paste(lang2calls(code), collapse = "\n"))
99+
srcref <- attr(code, "wholeSrcref")
100+
if (length(srcref)) {
101+
eval_code(object, code = paste(attr(code, "wholeSrcref"), collapse = "\n"))
102+
} else {
103+
eval_code(object, code = paste(lang2calls(code), collapse = "\n"))
104+
}
101105
})
102106

103107
setMethod("eval_code", signature = c("qenv.error", "ANY"), function(object, code) {

tests/testthat/test-qenv_eval_code.R

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,3 +280,22 @@ testthat::test_that("comments passed alone to eval_code that contain @linksto ta
280280
"x"
281281
)
282282
})
283+
284+
testthat::test_that("original formatting and comments are preserved when expression has a srcref", {
285+
code <- "# comment
286+
a <- 1\n
287+
288+
# comment
289+
\n
290+
"
291+
expr <- parse(text = code, keep.source = TRUE)
292+
testthat::expect_identical(get_code(eval_code(qenv(), expr)), code)
293+
})
294+
295+
testthat::test_that("eval_code accepts calls containing only comments and empty spaces", {
296+
code <- "# comment
297+
\n\n# comment
298+
\n
299+
"
300+
testthat::expect_identical(get_code(eval_code(qenv(), code)), code)
301+
})

0 commit comments

Comments
 (0)