Skip to content

Commit 0de838e

Browse files
committed
fix: improve early stop
1 parent 780188d commit 0de838e

File tree

3 files changed

+14
-41
lines changed

3 files changed

+14
-41
lines changed

NEWS.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# teal.code 0.6.1.9000
22

3+
### Bug fixes
4+
5+
* Fix a problem detecting co-occurences when expression has multiple lines.
6+
37
# teal.code 0.6.1
48

59
### Bug fixes

R/utils-get_code_dependency.R

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -344,11 +344,13 @@ extract_dependency <- function(parsed_code) {
344344
reordered_full_pd <- extract_calls(full_pd)
345345

346346
# Early return on empty code
347-
if (length(parsed_code) == 0L) {
348-
return(character(0L))
347+
if (length(reordered_full_pd) == 0L) {
348+
return(NULL)
349349
}
350350

351-
# Check for expressions and process those separetly
351+
if (length(parsed_code) == 0L) {
352+
return(extract_side_effects(reordered_full_pd[[1]]))
353+
}
352354
expr_ix <- lapply(parsed_code[[1]], class) == "{"
353355

354356
# Build queue of expressions to parse individually
@@ -381,7 +383,8 @@ extract_dependency <- function(parsed_code) {
381383
# extract_calls is needed to reorder the pd so that assignment operator comes before symbol names
382384
# extract_calls is needed also to substitute assignment operators into specific format with fix_arrows
383385
# extract_calls is needed to omit empty calls that contain only one token `"';'"`
384-
# This cleaning is needed as extract_occurrence assumes arrows are fixed, and order is different than in original pd
386+
# This cleaning is needed as extract_occurrence assumes arrows are fixed, and order is different
387+
# than in original pd
385388
extract_occurrence(reordered_pd[[1]])
386389
}
387390
}

tests/testthat/test-utils-get_code_dependency.R

Lines changed: 3 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,3 @@
1-
testthat::describe("detects multiple assignments in single line", {
2-
testthat::it("<-", {
3-
# testthat::skip("Not implemented")
4-
code <- "var1 <- var2 <- 1"
5-
td <- eval_code(qenv(), code)
6-
7-
testthat::expect_identical(get_code(td, names = "var1"), code)
8-
testthat::expect_identical(get_code(td, names = "var2"), code)
9-
})
10-
11-
testthat::it("->", {
12-
# testthat::skip("Not implemented")
13-
code <- "1 -> var1 -> var2"
14-
td <- eval_code(qenv(), code)
15-
16-
testthat::expect_identical(
17-
get_code(td, names = "var1"),
18-
as.character(parse(text = code, keep.source = TRUE))
19-
)
20-
21-
testthat::expect_identical(get_code(td, names = "var1"), code)
22-
testthat::expect_identical(get_code(td, names = "var2"), code)
23-
})
24-
25-
testthat::it("<- and ->", {
26-
# testthat::skip("Not implemented")
27-
code <- "var1 <- 1 -> var2"
28-
td <- eval_code(qenv(), code)
29-
30-
testthat::expect_identical(get_code(td, names = "var1"), code)
31-
testthat::expect_identical(get_code(td, names = "var2"), code)
32-
})
33-
})
34-
351
testthat::describe("get_code with single assignments inside an expression", {
362
testthat::it("detects assign() function", {
373
td <- qenv() |>
@@ -63,7 +29,7 @@ testthat::describe("get_code with single assignments inside an expression", {
6329
td <- qenv() |>
6430
within({
6531
for (i in 1:10) {
66-
iris -> var1
32+
iris -> var1 # nolint: assignment.
6733
}
6834
})
6935

@@ -109,8 +75,8 @@ testthat::describe("get_code with multiple assignments inside an expression", {
10975
td <- qenv() |>
11076
within({
11177
for (i in 1:10) {
112-
iris -> var1
113-
mtcars -> var2
78+
iris -> var1 # nolint: assignment.
79+
mtcars -> var2 # nolint: assignment.
11480
}
11581
})
11682

0 commit comments

Comments
 (0)