Skip to contents

Report the use of undesirable operators, e.g. ::: or <<- and suggest an alternative.

Usage

undesirable_operator_linter(op = default_undesirable_operators)

Arguments

op

Named character vector. names(op) correspond to undesirable operators, while the values give a description of why the operator is undesirable. If NA, no additional information is given in the lint message. Defaults to default_undesirable_operators. To make small customizations to this list, use modify_defaults().

See also

linters for a complete list of linters available in lintr.

Examples

# defaults for which functions are considered undesirable
names(default_undesirable_operators)
#> [1] "->>" ":::" "<<-"

# will produce lints
lint(
  text = "a <<- log(10)",
  linters = undesirable_operator_linter()
)
#> <text>:1:3: warning: [undesirable_operator_linter] Avoid undesirable operator `<<-`. It assigns outside the current environment in a way that can be hard to reason about. Prefer fully-encapsulated functions wherever possible, or, if necessary, assign to a specific environment with assign(). Recall that you can create an environment at the desired scope with new.env().
#> a <<- log(10)
#>   ^~~

lint(
  text = "mtcars$wt",
  linters = undesirable_operator_linter(op = c("$" = "As an alternative, use the `[[` accessor."))
)
#> <text>:1:7: warning: [undesirable_operator_linter] Avoid undesirable operator `$`. As an alternative, use the `[[` accessor.
#> mtcars$wt
#>       ^

# okay
lint(
  text = "a <- log(10)",
  linters = undesirable_operator_linter()
)
#>  No lints found.
lint(
  text = 'mtcars[["wt"]]',
  linters = undesirable_operator_linter(op = c("$" = NA))
)
#>  No lints found.

lint(
  text = 'mtcars[["wt"]]',
  linters = undesirable_operator_linter(op = c("$" = "As an alternative, use the `[[` accessor."))
)
#>  No lints found.