# A 'Linter' for R Code

## Documentation for package ‘lintr’ version 3.4.0

- DESCRIPTION file
- User guides, package vignettes and other documentation
- Package NEWS
- Package README

## Help Pages

A B C D E F G I K L M N O P Q R S T U V W X Y misc

## -- A --

absolute_path_linter | Absolute path linter
all_equal_linter | Warn about invalid usage of 'all.equal()'
all_linters | Create a linter configuration based on all available linters
all_undesirable_functions | Default undesirable functions and operators
all_undesirable_operators | Default undesirable functions and operators
any_duplicated_linter | Require usage of 'anyDuplicated(x) > 0' over 'any(duplicated(x))'
any_is_na_linter | Require usage of 'anyNA(x)' over 'any(is.na(x))'
assignment_linter | Assignment linter
available_linters | Get Linter metadata from a package
available_tags | Get Linter metadata from a package

## -- B --

backport_linter | Backport linter
best_practices_linters | Best practices linters
boolean_arithmetic_linter | Require usage of boolean operators over equivalent arithmetic
brace_linter | Brace linter

## -- C --

checkstyle_output | Checkstyle Report for lint results
class_equals_linter | Block comparison of class with '=='
clear_cache | Clear the lintr cache
coalesce_linter | Encourage usage of the null coalescing operator %||%
commas_linter | Commas linter
commented_code_linter | Commented code linter
common_mistakes_linters | Common mistake linters
comparison_negation_linter | Block usages like !(x == y) where a direct relational operator is appropriate
condition_call_linter | Recommend usage of 'call. = FALSE' in conditions
condition_message_linter | Block usage of 'paste()' and 'paste0()' with messaging functions using '...'
config | Default lintr settings
configurable_linters | Configurable linters
conjunct_test_linter | Force '&&' conditions to be written separately where appropriate
consecutive_assertion_linter | Force consecutive calls to assertions into just one when possible
consecutive_mutate_linter | Require consecutive calls to mutate() to be combined when possible
consistency_linters | Consistency linters
correctness_linters | Correctness linters
cyclocomp_linter | Cyclomatic complexity linter

## -- D --

default_linters | Default linters
default_settings | Default lintr settings
default_undesirable_functions | Default undesirable functions and operators
default_undesirable_operators | Default undesirable functions and operators
deprecated_linters | Deprecated linters
download_file_linter | Recommend usage of a portable 'mode' value for downloading files
duplicate_argument_linter | Duplicate argument linter

## -- E --

efficiency_linters | Efficiency linters
empty_assignment_linter | Block assignment of '{}'
equals_na_linter | Equality check with NA linter
executing_linters | Code executing linters
expect_comparison_linter | Require usage of 'expect_gt(x, y)' over 'expect_true(x > y)' (and similar)
expect_identical_linter | Require usage of 'expect_identical(x, y)' where appropriate
expect_length_linter | Require usage of 'expect_length(x, n)' over 'expect_equal(length(x), n)'
expect_lint | Lint expectation
expect_lint_free | Test that the package is lint free
expect_named_linter | Require usage of 'expect_named(x, n)' over 'expect_equal(names(x), n)'
expect_not_linter | Require usage of 'expect_false(x)' over 'expect_true(!x)'
expect_no_lint | Lint expectation
expect_null_linter | Require usage of 'expect_null' for checking 'NULL'
expect_s3_class_linter | Require usage of 'expect_s3_class()'
expect_s4_class_linter | Require usage of 'expect_s4_class(x, k)' over 'expect_true(is(x, k))'
expect_true_false_linter | Require usage of 'expect_true(x)' over 'expect_equal(x, TRUE)'
expect_type_linter | Require usage of 'expect_type(x, type)' over 'expect_equal(typeof(x), type)'

## -- F --

fixed_regex_linter | Require usage of 'fixed=TRUE' in regular expressions where appropriate
for_loop_index_linter | Block usage of for loops directly overwriting the indexing variable
function_argument_linter | Function argument linter
function_left_parentheses_linter | Function left parentheses linter
function_return_linter | Lint common mistakes/style issues cropping up from return statements

## -- G --

get_r_string | Extract text from 'STR_CONST' nodes
get_source_expressions | Parsed sourced file from a filename
gitlab_output | GitLab Report for lint results

## -- I --

ids_with_token | Get parsed IDs by token
ifelse_censor_linter | Block usage of 'ifelse()' where 'pmin()' or 'pmax()' is more appropriate
if_not_else_linter | Block statements like if (!A) x else y
if_switch_linter | Require usage of switch() over repeated if/else blocks
implicit_assignment_linter | Avoid implicit assignment in function calls
implicit_integer_linter | Implicit integer linter
indentation_linter | Check that indentation is consistent
infix_spaces_linter | Infix spaces linter
inner_combine_linter | Require 'c()' to be applied before relatively expensive vectorized functions
is_lint_level | Is this an expression- or a file-level source object?
is_numeric_linter | Redirect 'is.numeric(x) || is.integer(x)' to just use 'is.numeric(x)'

## -- K --

keyword_quote_linter | Block unnecessary quoting in calls

## -- L --

lengths_linter | Require usage of 'lengths()' where possible
length_levels_linter | Require usage of nlevels over length(levels(.))
length_test_linter | Check for a common mistake where a size check like 'length' is applied in the wrong place
library_call_linter | Library call linter
line_length_linter | Line length linter
Lint | Create a 'lint' object
lint | Lint a file, directory, or package
lint-s3 | Create a 'lint' object
Linter | Create a 'linter' closure
linters | Available linters
linters_with_defaults | Create a linter configuration based on defaults
linters_with_tags | Create a tag-based linter configuration
lintr-config | Default lintr settings
lintr-settings | Default lintr settings
lint_dir | Lint a file, directory, or package
lint_package | Lint a file, directory, or package
list2df_linter | Recommend direct usage of 'data.frame()' to create a data.frame from a list
list_comparison_linter | Block usage of comparison operators with known-list() functions like lapply
literal_coercion_linter | Require usage of correctly-typed literals over literal coercions

## -- M --

make_linter_from_function_xpath | Create a linter from an XPath
make_linter_from_xpath | Create a linter from an XPath
matrix_apply_linter | Require usage of 'colSums(x)' or 'rowSums(x)' over 'apply(x, ., sum)'
missing_argument_linter | Missing argument linter
missing_package_linter | Missing package linter
modify_defaults | Modify lintr defaults

## -- N --

namespace_linter | Namespace linter
nested_ifelse_linter | Block usage of nested 'ifelse()' calls
nested_pipe_linter | Block usage of pipes nested inside other calls
nonportable_path_linter | Non-portable path linter
nrow_subset_linter | Block usage of 'nrow(subset(x, .))'
numeric_leading_zero_linter | Require usage of a leading zero in all fractional numerics
nzchar_linter | Require usage of nzchar where appropriate

## -- O --

object_length_linter | Object length linter
object_name_linter | Object name linter
object_overwrite_linter | Block assigning any variables whose name clashes with a 'base' R function
object_usage_linter | Object usage linter
one_call_pipe_linter | Block single-call magrittr pipes
outer_negation_linter | Require usage of '!any(x)' over 'all(!x)', '!all(x)' over 'any(!x)'

## -- P --

package_development_linters | Package development linters
package_hooks_linter | Package hooks linter
paren_body_linter | Parenthesis before body linter
paste_linter | Raise lints for several common poor usages of 'paste()'
pipe_call_linter | Pipe call linter
pipe_consistency_linter | Pipe consistency linter
pipe_continuation_linter | Pipe continuation linter
pipe_return_linter | Block usage of return() in magrittr pipelines
pkg_testthat_linters | Testthat linters
print_linter | Block usage of print() for logging

## -- Q --

quotes_linter | Character string quote linter

## -- R --

readability_linters | Readability linters
read_settings | Read lintr settings
redundant_equals_linter | Block usage of '==', '!=' on logical vectors
redundant_ifelse_linter | Prevent 'ifelse()' from being used to produce 'TRUE'/'FALSE' or '1'/'0'
regex_linters | Regular expression linters
regex_subset_linter | Require usage of direct methods for subsetting strings via regex
repeat_linter | Repeat linter
rep_len_linter | Require usage of rep_len(x, n) over rep(x, length.out = n)
return_linter | Return linter
robustness_linters | Robustness linters
routine_registration_linter | Identify unregistered native routines

## -- S --

sample_int_linter | Require usage of sample.int(n, m, ...) over sample(1:n, m, ...)
sarif_output | SARIF Report for lint results
scalar_in_linter | Block usage like x %in% "a"
semicolon_linter | Semicolon linter
seq_linter | Sequence linter
settings | Default lintr settings
sort_linter | Check for common mistakes around sorting vectors
spaces_inside_linter | Spaces inside linter
spaces_left_parentheses_linter | Spaces before parentheses linter
sprintf_linter | Require correct 'sprintf()' calls
stopifnot_all_linter | Block usage of all() within stopifnot()
strings_as_factors_linter | Identify cases where 'stringsAsFactors' should be supplied explicitly
string_boundary_linter | Require usage of 'startsWith()' and 'endsWith()' over 'grepl()'/'substr()' versions
style_linters | Style linters
system_file_linter | Block usage of 'file.path()' with 'system.file()'

## -- T --

terminal_close_linter | Prohibit close() from terminating a function definition
tidy_design_linters | Tidyverse design linters
todo_comment_linter | TODO comment linter
trailing_blank_lines_linter | Trailing blank lines linter
trailing_whitespace_linter | Trailing whitespace linter
T_and_F_symbol_linter | 'T' and 'F' symbol linter

## -- U --

undesirable_function_linter | Undesirable function linter
undesirable_operator_linter | Undesirable operator linter
unnecessary_concatenation_linter | Unneeded concatenation linter
unnecessary_lambda_linter | Block usage of anonymous functions in iteration functions when unnecessary
unnecessary_nesting_linter | Block instances of unnecessary nesting
unnecessary_placeholder_linter | Block usage of pipeline placeholders if unnecessary
unreachable_code_linter | Block unreachable code and comments following return statements
unused_import_linter | Check that imported packages are actually used
use_lintr | Use lintr in your project

## -- V --

vector_logic_linter | Enforce usage of scalar logical operators in conditional statements

## -- W --

which_grepl_linter | Require usage of grep over which(grepl(.))
whitespace_linter | Whitespace linter
with_id | Get parsed IDs by token

## -- X --

xml_nodes_to_lints | Convert an XML node or nodeset into a Lint
xp_call_name | Get the name of the function matched by an XPath

## -- Y --

yoda_test_linter | Block obvious "yoda tests"

## -- misc --

.lintr | Default lintr settings