Skip to content

Commit 7cbc93d

Browse files
committed
optimise get_messages/get_warnings
fix pkgdown fix NEWS
1 parent 7f80156 commit 7cbc93d

File tree

8 files changed

+57
-51
lines changed

8 files changed

+57
-51
lines changed

NEWS.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@
22

33
### Enhancements
44

5+
* Introduced `[.qenv` function to subset `qenv` object (code and environment) to specified object names. #211
56
* `get_code()` was extended with `names` parameter and allows the code extraction to be limited to objects stored in
6-
`qenv` but limited to `names`.
7-
* `eval_code(qenv, code)` analyzes code by single calls and returns `@id`, `@code`, `@messages`, `@warnings` fields of
8-
the length of calls included in `code`.
7+
`qenv` but limited to `names`. #210
8+
* Introduced `get_messages()` to get messages produced during code evaluation. #217
9+
* `get_code()` returns original code formatting (white spaces and comments) passed to `eval_code()`. #212
910

1011
# teal.code 0.5.0
1112

R/qenv-get_messages.r

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,7 @@ setGeneric("get_messages", function(object) {
2828
})
2929

3030
setMethod("get_messages", signature = "qenv", function(object) {
31-
messages <- lapply(object@code, "attr", "message")
32-
idx_warn <- which(sapply(messages, function(x) !is.null(x) && !identical(x, "")))
33-
if (!any(idx_warn)) {
34-
return(NULL)
35-
}
36-
messages <- messages[idx_warn]
37-
code <- object@code[idx_warn]
38-
39-
lines <- mapply(
40-
function(warn, expr) {
41-
sprintf("%swhen running code:\n%s", warn, expr)
42-
},
43-
warn = messages,
44-
expr = code
45-
)
46-
47-
sprintf(
48-
"~~~ messages ~~~\n\n%s\n\n~~~ Trace ~~~\n\n%s",
49-
paste(lines, collapse = "\n\n"),
50-
paste(get_code(object), collapse = "\n")
51-
)
31+
get_warn_message_util(object, "message")
5232
})
5333

5434
setMethod("get_messages", signature = "qenv.error", function(object) {

R/qenv-get_warnings.R

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -28,27 +28,7 @@ setGeneric("get_warnings", function(object) {
2828
})
2929

3030
setMethod("get_warnings", signature = "qenv", function(object) {
31-
warnings <- lapply(object@code, "attr", "warning")
32-
idx_warn <- which(sapply(warnings, function(x) !is.null(x) && !identical(x, "")))
33-
if (!any(idx_warn)) {
34-
return(NULL)
35-
}
36-
warnings <- warnings[idx_warn]
37-
code <- object@code[idx_warn]
38-
39-
lines <- mapply(
40-
function(warn, expr) {
41-
sprintf("%swhen running code:\n%s", warn, expr)
42-
},
43-
warn = warnings,
44-
expr = code
45-
)
46-
47-
sprintf(
48-
"~~~ Warnings ~~~\n\n%s\n\n~~~ Trace ~~~\n\n%s",
49-
paste(lines, collapse = "\n\n"),
50-
paste(get_code(object), collapse = "\n")
51-
)
31+
get_warn_message_util(object, "warning")
5232
})
5333

5434
setMethod("get_warnings", signature = "qenv.error", function(object) {

R/utils.R

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,33 @@ lang2calls <- function(x) {
5353
unlist(lapply(x, lang2calls), recursive = FALSE)
5454
}
5555
}
56+
57+
#' Obtain warnings or messages from code slot
58+
#'
59+
#' @param object (`qenv`)
60+
#' @param what (``
61+
get_warn_message_util <- function(object, what) {
62+
checkmate::matchArg(what, choices = c("warning", "message"))
63+
messages <- lapply(object@code, "attr", what)
64+
idx_warn <- which(sapply(messages, function(x) !is.null(x) && !identical(x, "")))
65+
if (!any(idx_warn)) {
66+
return(NULL)
67+
}
68+
messages <- messages[idx_warn]
69+
code <- object@code[idx_warn]
70+
71+
lines <- mapply(
72+
warn = messages,
73+
expr = code,
74+
function(warn, expr) {
75+
sprintf("%swhen running code:\n%s", warn, expr)
76+
}
77+
)
78+
79+
sprintf(
80+
"~~~ %ss ~~~\n\n%s\n\n~~~ Trace ~~~\n\n%s",
81+
tools::toTitleCase(what),
82+
paste(lines, collapse = "\n\n"),
83+
paste(get_code(object), collapse = "\n")
84+
)
85+
}

_pkgdown.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ reference:
3232
- get_code
3333
- get_env
3434
- get_var
35+
- get_messages
3536
- get_warnings
3637
- join
3738
- qenv

man/get_warn_message_util.Rd

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/testthat/test-qenv_eval_code.R

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,6 @@ testthat::test_that(
171171
}
172172
)
173173

174-
175-
176174
# comments --------------------------------------------------------------------------------------------------------
177175

178176
testthat::test_that("comments fall into proper calls", {

tests/testthat/test-qenv_get_messages.R

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ testthat::test_that("get_messages accepts a qenv object and returns character",
33
testthat::expect_identical(
44
get_messages(q),
55
paste0(
6-
"~~~ messages ~~~\n\n> This is a message!\nwhen running code:\nmessage(\"This is a message!\")\n\n",
6+
"~~~ Messages ~~~\n\n> This is a message!\nwhen running code:\nmessage(\"This is a message!\")\n\n",
77
"~~~ Trace ~~~\n\nmessage(\"This is a message!\")"
88
)
99
)
@@ -30,7 +30,7 @@ testthat::test_that("get_messages accepts a qenv object with 2 messages", {
3030
testthat::expect_identical(
3131
get_messages(q),
3232
paste0(
33-
"~~~ messages ~~~\n\n> This is a message 1!\nwhen running code:\nmessage(\"This is a message 1!\")",
33+
"~~~ Messages ~~~\n\n> This is a message 1!\nwhen running code:\nmessage(\"This is a message 1!\")",
3434
"\n\n> This is a message 2!\nwhen running code:\nmessage(\"This is a message 2!\")\n\n",
3535
"~~~ Trace ~~~\n\nmessage(\"This is a message 1!\")\nmessage(\"This is a message 2!\")"
3636
)
@@ -46,7 +46,7 @@ testthat::test_that("get_messages accepts a qenv object with a single eval_code
4646
get_messages(q),
4747
paste(
4848
c(
49-
"~~~ messages ~~~\n",
49+
"~~~ Messages ~~~\n",
5050
"> This is a message 1!",
5151
"when running code:",
5252
"message(\"This is a message 1!\")\n\n",
@@ -69,7 +69,7 @@ testthat::test_that("get_messages accepts a qenv object with 1 message eval_code
6969
testthat::expect_identical(
7070
get_messages(q),
7171
paste0(
72-
"~~~ messages ~~~\n\n> This is a message 2!\nwhen running code:\nmessage(\"This is a message 2!\")\n\n",
72+
"~~~ Messages ~~~\n\n> This is a message 2!\nwhen running code:\nmessage(\"This is a message 2!\")\n\n",
7373
"~~~ Trace ~~~\n\nx <- 1\nmessage(\"This is a message 2!\")"
7474
)
7575
)

0 commit comments

Comments
 (0)