Nothing
test_that("equals_na_linter skips allowed usages", {
linter <- equals_na_linter()
expect_lint("blah", NULL, linter)
expect_lint(" blah", NULL, linter)
expect_lint(" blah", NULL, linter)
expect_lint("x=NA", NULL, linter)
expect_lint("x = NaN", NULL, linter)
expect_lint("x = NA_real_", NULL, linter)
expect_lint("is.na(x)", NULL, linter)
expect_lint("is.nan(x)", NULL, linter)
expect_lint("x[!is.na(x)]", NULL, linter)
# equals_na_linter should ignore strings and comments
expect_lint("is.na(x) # do not flag x == NA if inside a comment", NULL, linter)
expect_lint("lint_msg <- 'do not flag x == NA if inside a string'", NULL, linter)
# nested NAs are okay
expect_lint("x==f(1, ignore = NA)", NULL, linter)
# this should be covered by any_is_na_linter()
expect_lint("NA %in% x", NULL, linter)
})
skip_if_not_installed("tibble")
patrick::with_parameters_test_that(
"equals_na_linter blocks disallowed usages for all combinations of operators and types of NAs",
expect_lint(
paste("x", operation, type_na),
rex::rex("Use is.na for comparisons to NA (not == or != or %in%)"),
equals_na_linter()
),
.cases = tibble::tribble(
~.test_name, ~operation, ~type_na,
"equality, logical NA", "==", "NA",
"equality, integer NA", "==", "NA_integer_",
"equality, real NA", "==", "NA_real_",
"equality, complex NA", "==", "NA_complex_",
"equality, character NA", "==", "NA_character_",
"containment, logical NA", "%in%", "NA",
"containment, integer NA", "%in%", "NA_integer_",
"containment, real NA", "%in%", "NA_real_",
"containment, complex NA", "%in%", "NA_complex_",
"containment, character NA", "%in%", "NA_character_",
"inequality, logical NA", "!=", "NA",
"inequality, integer NA", "!=", "NA_integer_",
"inequality, real NA", "!=", "NA_real_",
"inequality, complex NA", "!=", "NA_complex_",
"inequality, character NA", "!=", "NA_character_"
)
)
test_that("equals_na_linter blocks disallowed usages in edge cases", {
linter <- equals_na_linter()
lint_msg <- rex::rex("Use is.na for comparisons to NA (not == or != or %in%)")
# missing spaces around operators
expect_lint("x==NA", list(message = lint_msg, line_number = 1L, column_number = 1L), linter)
expect_lint("x!=NA", list(message = lint_msg, line_number = 1L, column_number = 1L), linter)
# order doesn't matter
expect_lint("NA == x", list(message = lint_msg, line_number = 1L, column_number = 1L), linter)
# correct line number for multiline code
expect_lint("x ==\nNA", list(line_number = 1L, column_number = 1L, ranges = list(c(1L, 4L))), linter)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.