Report the use of undesirable functions (e.g. base::return()
, base::options()
, or
base::sapply()
) and suggest an alternative.
Usage
undesirable_function_linter(
fun = default_undesirable_functions,
symbol_is_undesirable = TRUE
)
Arguments
- fun
Named character vector.
names(fun)
correspond to undesirable functions, while the values give a description of why the function is undesirable. IfNA
, no additional information is given in the lint message. Defaults to default_undesirable_functions. To make small customizations to this list, usemodify_defaults()
.- symbol_is_undesirable
Whether to consider the use of an undesirable function name as a symbol undesirable or not.
See also
linters for a complete list of linters available in lintr.
Examples
# defaults for which functions are considered undesirable
names(default_undesirable_functions)
#> [1] ".libPaths" "attach" "browser" "debug"
#> [5] "debugcall" "debugonce" "detach" "library"
#> [9] "mapply" "options" "par" "require"
#> [13] "sapply" "setwd" "sink" "source"
#> [17] "structure" "Sys.setenv" "Sys.setlocale" "trace"
#> [21] "undebug" "untrace"
# will produce lints
lint(
text = "sapply(x, mean)",
linters = undesirable_function_linter()
)
#> ::warning file=<text>,line=1,col=1::file=<text>,line=1,col=1,[undesirable_function_linter] Function "sapply" is undesirable. As an alternative, use vapply() with an appropriate `FUN.VALUE=` argument to obtain type-stable simplification.
lint(
text = "log10(x)",
linters = undesirable_function_linter(fun = c("log10" = NA))
)
#> ::warning file=<text>,line=1,col=1::file=<text>,line=1,col=1,[undesirable_function_linter] Function "log10" is undesirable.
lint(
text = "log10(x)",
linters = undesirable_function_linter(fun = c("log10" = "use log()"))
)
#> ::warning file=<text>,line=1,col=1::file=<text>,line=1,col=1,[undesirable_function_linter] Function "log10" is undesirable. As an alternative, use log().
lint(
text = 'dir <- "path/to/a/directory"',
linters = undesirable_function_linter(fun = c("dir" = NA))
)
#> ::warning file=<text>,line=1,col=1::file=<text>,line=1,col=1,[undesirable_function_linter] Function "dir" is undesirable.
# okay
lint(
text = "vapply(x, mean, FUN.VALUE = numeric(1))",
linters = undesirable_function_linter()
)
lint(
text = "log(x, base = 10)",
linters = undesirable_function_linter(fun = c("log10" = "use log()"))
)
lint(
text = 'dir <- "path/to/a/directory"',
linters = undesirable_function_linter(fun = c("dir" = NA), symbol_is_undesirable = FALSE)
)