test_that("skips allowed usages", { linter <- length_test_linter() expect_lint("length(x) > 0", NULL, linter) expect_lint("length(DF[key == val, cols])", NULL, linter) }) test_that("blocks simple disallowed usages", { linter <- length_test_linter() lint_msg_stub <- rex::rex("Checking the length of a logical vector is likely a mistake. Did you mean ") expect_lint("length(x == 0)", rex::rex(lint_msg_stub, "`length(x) == 0`?"), linter) expect_lint("length(x == y)", rex::rex(lint_msg_stub, "`length(x) == y`?"), linter) expect_lint("length(x + y == 2)", rex::rex(lint_msg_stub, "`length(x+y) == 2`?"), linter) }) local({ ops <- c(lt = "<", lte = "<=", gt = ">", gte = ">=", eq = "==", neq = "!=") linter <- length_test_linter() lint_msg_stub <- rex::rex("Checking the length of a logical vector is likely a mistake. Did you mean ") patrick::with_parameters_test_that( "all logical operators detected", expect_lint( paste("length(x", op, "y)"), rex::rex("`length(x) ", op, " y`?"), linter ), op = ops, .test_name = names(ops) ) })