==
, !=
on logical vectorsTesting x == TRUE
is redundant if x
is a logical vector. Wherever this is
used to improve readability, the solution should instead be to improve the
naming of the object to better indicate that its contents are logical. This
can be done using prefixes (is, has, can, etc.). For example, is_child
,
has_parent_supervision
, can_watch_horror_movie
clarify their logical
nature, while child
, parent_supervision
, watch_horror_movie
don't.
redundant_equals_linter()
best_practices, common_mistakes, efficiency, readability
linters for a complete list of linters available in lintr.
outer_negation_linter()
# will produce lints
lint(
text = "if (any(x == TRUE)) 1",
linters = redundant_equals_linter()
)
lint(
text = "if (any(x != FALSE)) 0",
linters = redundant_equals_linter()
)
lint(
text = "dt[is_tall == FALSE, y]",
linters = redundant_equals_linter()
)
# okay
lint(
text = "if (any(x)) 1",
linters = redundant_equals_linter()
)
lint(
text = "if (!all(x)) 0",
linters = redundant_equals_linter()
)
# in `{data.table}` semantics, `dt[x]` is a join, `dt[(x)]` is a subset
lint(
text = "dt[(!is_tall), y]",
linters = redundant_equals_linter()
)
Run the code above in your browser using DataLab