View source: R/conjunct_test_linter.R
conjunct_test_linter | R Documentation |
&&
conditions to be written separately where appropriateFor readability of test outputs, testing only one thing per call to
testthat::expect_true()
is preferable, i.e.,
expect_true(A); expect_true(B)
is better than expect_true(A && B)
, and
expect_false(A); expect_false(B)
is better than expect_false(A || B)
.
conjunct_test_linter(
allow_named_stopifnot = TRUE,
allow_filter = c("never", "not_dplyr", "always")
)
allow_named_stopifnot |
Logical, |
allow_filter |
Character naming the method for linting calls to |
Similar reasoning applies to &&
usage inside stopifnot()
and assertthat::assert_that()
calls.
Relatedly, dplyr::filter(DF, A & B)
is the same as dplyr::filter(DF, A, B)
, but the latter will be more readable
/ easier to format for long conditions. Note that this linter assumes usages of filter()
are dplyr::filter()
;
if you're using another function named filter()
, e.g. stats::filter()
, please namespace-qualify it to avoid
false positives. You can omit linting filter()
expressions altogether via allow_filter = TRUE
.
best_practices, configurable, package_development, pkg_testthat, readability
linters for a complete list of linters available in lintr.
# will produce lints
lint(
text = "expect_true(x && y)",
linters = conjunct_test_linter()
)
lint(
text = "expect_false(x || (y && z))",
linters = conjunct_test_linter()
)
lint(
text = "stopifnot('x must be a logical scalar' = length(x) == 1 && is.logical(x) && !is.na(x))",
linters = conjunct_test_linter(allow_named_stopifnot = FALSE)
)
lint(
text = "dplyr::filter(mtcars, mpg > 20 & vs == 0)",
linters = conjunct_test_linter()
)
lint(
text = "filter(mtcars, mpg > 20 & vs == 0)",
linters = conjunct_test_linter()
)
# okay
lint(
text = "expect_true(x || (y && z))",
linters = conjunct_test_linter()
)
lint(
text = 'stopifnot("x must be a logical scalar" = length(x) == 1 && is.logical(x) && !is.na(x))',
linters = conjunct_test_linter(allow_named_stopifnot = TRUE)
)
lint(
text = "dplyr::filter(mtcars, mpg > 20 & vs == 0)",
linters = conjunct_test_linter(allow_filter = "always")
)
lint(
text = "filter(mtcars, mpg > 20 & vs == 0)",
linters = conjunct_test_linter(allow_filter = "not_dplyr")
)
lint(
text = "stats::filter(mtcars$cyl, mtcars$mpg > 20 & mtcars$vs == 0)",
linters = conjunct_test_linter()
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.