Report the use of undesirable functions 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()
)
#> <text>:1:1: style: [undesirable_function_linter] Avoid undesirable function "sapply". As an alternative, use vapply() with an appropriate `FUN.VALUE=` argument to obtain type-stable simplification.
#> sapply(x, mean)
#> ^~~~~~
lint(
text = "log10(x)",
linters = undesirable_function_linter(fun = c("log10" = NA))
)
#> <text>:1:1: style: [undesirable_function_linter] Avoid undesirable function "log10".
#> log10(x)
#> ^~~~~
lint(
text = "log10(x)",
linters = undesirable_function_linter(fun = c("log10" = "use log()"))
)
#> <text>:1:1: style: [undesirable_function_linter] Avoid undesirable function "log10". As an alternative, use log().
#> log10(x)
#> ^~~~~
lint(
text = 'dir <- "path/to/a/directory"',
linters = undesirable_function_linter(fun = c("dir" = NA))
)
#> <text>:1:1: style: [undesirable_function_linter] Avoid undesirable function "dir".
#> dir <- "path/to/a/directory"
#> ^~~
# okay
lint(
text = "vapply(x, mean, FUN.VALUE = numeric(1))",
linters = undesirable_function_linter()
)
#> ℹ No lints found.
lint(
text = "log(x, base = 10)",
linters = undesirable_function_linter(fun = c("log10" = "use log()"))
)
#> ℹ No lints found.
lint(
text = 'dir <- "path/to/a/directory"',
linters = undesirable_function_linter(fun = c("dir" = NA), symbol_is_undesirable = FALSE)
)
#> ℹ No lints found.