|
1 | 1 | test_that("matrix_apply_linter skips allowed usages", { |
2 | 2 | linter <- matrix_apply_linter() |
3 | 3 |
|
4 | | - expect_lint("apply(x, 1, prod)", NULL, linter) |
| 4 | + expect_no_lint("apply(x, 1, prod)", linter) |
5 | 5 |
|
6 | | - expect_lint("apply(x, 1, function(i) sum(i[i > 0]))", NULL, linter) |
| 6 | + expect_no_lint("apply(x, 1, function(i) sum(i[i > 0]))", linter) |
7 | 7 |
|
8 | 8 | # sum as FUN argument |
9 | | - expect_lint("apply(x, 1, f, sum)", NULL, linter) |
| 9 | + expect_no_lint("apply(x, 1, f, sum)", linter) |
10 | 10 |
|
11 | 11 | # mean() with named arguments other than na.rm is skipped because they are not |
12 | 12 | # implemented in colMeans() or rowMeans() |
13 | | - expect_lint("apply(x, 1, mean, trim = 0.2)", NULL, linter) |
| 13 | + expect_no_lint("apply(x, 1, mean, trim = 0.2)", linter) |
14 | 14 | }) |
15 | 15 |
|
16 | 16 | test_that("matrix_apply_linter is not implemented for complex MARGIN values", { |
17 | 17 | linter <- matrix_apply_linter() |
18 | 18 |
|
19 | 19 | # Could be implemented at some point |
20 | | - expect_lint("apply(x, seq(2, 4), sum)", NULL, linter) |
| 20 | + expect_no_lint("apply(x, seq(2, 4), sum)", linter) |
21 | 21 |
|
22 | 22 | # No equivalent |
23 | | - expect_lint("apply(x, c(2, 4), sum)", NULL, linter) |
| 23 | + expect_no_lint("apply(x, c(2, 4), sum)", linter) |
24 | 24 |
|
25 | 25 | # Beyond the scope of static analysis |
26 | | - expect_lint("apply(x, m, sum)", NULL, linter) |
27 | | - |
28 | | - expect_lint("apply(x, 1 + 2:4, sum)", NULL, linter) |
| 26 | + expect_no_lint("apply(x, m, sum)", linter) |
29 | 27 |
|
| 28 | + expect_no_lint("apply(x, 1 + 2:4, sum)", linter) |
30 | 29 | }) |
31 | 30 |
|
32 | 31 |
|
33 | 32 | test_that("matrix_apply_linter simple disallowed usages", { |
34 | 33 | linter <- matrix_apply_linter() |
35 | | - lint_message <- rex::rex("rowSums(x)") |
36 | 34 |
|
| 35 | + lint_message <- rex::rex("rowSums(x)") |
37 | 36 | expect_lint("apply(x, 1, sum)", lint_message, linter) |
38 | | - |
39 | 37 | expect_lint("apply(x, MARGIN = 1, FUN = sum)", lint_message, linter) |
40 | | - |
41 | 38 | expect_lint("apply(x, 1L, sum)", lint_message, linter) |
42 | | - |
43 | 39 | expect_lint("apply(x, 1:4, sum)", rex::rex("rowSums(x, dims = 4)"), linter) |
44 | | - |
45 | 40 | expect_lint("apply(x, 2, sum)", rex::rex("rowSums(colSums(x))"), linter) |
46 | | - |
47 | 41 | expect_lint("apply(x, 2:4, sum)", rex::rex("rowSums(colSums(x), dims = 3)"), linter) |
48 | 42 |
|
49 | 43 | lint_message <- rex::rex("rowMeans") |
50 | | - |
51 | 44 | expect_lint("apply(x, 1, mean)", lint_message, linter) |
52 | | - |
53 | 45 | expect_lint("apply(x, MARGIN = 1, FUN = mean)", lint_message, linter) |
54 | 46 |
|
55 | 47 | # Works with extra args in mean() |
56 | 48 | expect_lint("apply(x, 1, mean, na.rm = TRUE)", lint_message, linter) |
57 | 49 |
|
58 | 50 | lint_message <- rex::rex("colMeans") |
59 | | - |
60 | 51 | expect_lint("apply(x, 2, mean)", lint_message, linter) |
61 | | - |
62 | 52 | expect_lint("apply(x, 2:4, mean)", lint_message, linter) |
63 | 53 |
|
| 54 | + # adversarial comments |
| 55 | + expect_lint( |
| 56 | + trim_some(" |
| 57 | + apply(x, 2, #comment |
| 58 | + mean) |
| 59 | + "), |
| 60 | + lint_message, |
| 61 | + linter |
| 62 | + ) |
64 | 63 | }) |
65 | 64 |
|
66 | 65 | test_that("matrix_apply_linter recommendation includes na.rm if present in original call", { |
67 | 66 | linter <- matrix_apply_linter() |
68 | | - lint_message <- rex::rex("na.rm = TRUE") |
69 | 67 |
|
| 68 | + lint_message <- rex::rex("na.rm = TRUE") |
70 | 69 | expect_lint("apply(x, 1, sum, na.rm = TRUE)", lint_message, linter) |
71 | | - |
72 | 70 | expect_lint("apply(x, 2, sum, na.rm = TRUE)", lint_message, linter) |
73 | | - |
74 | 71 | expect_lint("apply(x, 1, mean, na.rm = TRUE)", lint_message, linter) |
75 | | - |
76 | 72 | expect_lint("apply(x, 2, mean, na.rm = TRUE)", lint_message, linter) |
77 | 73 |
|
78 | 74 | lint_message <- rex::rex("rowSums(x)") |
79 | 75 | expect_lint("apply(x, 1, sum)", lint_message, linter) |
80 | 76 |
|
81 | 77 | lint_message <- rex::rex("na.rm = foo") |
82 | 78 | expect_lint("apply(x, 1, sum, na.rm = foo)", lint_message, linter) |
83 | | - |
84 | 79 | }) |
85 | 80 |
|
86 | 81 | test_that("matrix_apply_linter works with multiple lints in a single expression", { |
|
0 commit comments