View source: R/string_boundary_linter.R
string_boundary_linter | R Documentation |
startsWith()
and endsWith()
over grepl()
/substr()
versionsstartsWith()
is used to detect fixed initial substrings; it is more
readable and more efficient than equivalents using grepl()
or substr()
.
c.f. startsWith(x, "abc")
, grepl("^abc", x)
,
substr(x, 1L, 3L) == "abc"
.
string_boundary_linter(allow_grepl = FALSE)
allow_grepl |
Logical, default |
Ditto for using endsWith()
to detect fixed terminal substrings.
Note that there is a difference in behavior between how grepl()
and startsWith()
(and endsWith()
) handle missing values. In particular, for grepl()
, NA
inputs
are considered FALSE
, while for startsWith()
, NA
inputs have NA
outputs.
That means the strict equivalent of grepl("^abc", x)
is
!is.na(x) & startsWith(x, "abc")
.
We lint grepl()
usages by default because the !is.na()
version is more explicit
with respect to NA
handling – though documented, the way grepl()
handles
missing inputs may be surprising to some users.
configurable, efficiency, readability, regex
linters for a complete list of linters available in lintr.
# will produce lints
lint(
text = 'grepl("^a", x)',
linters = string_boundary_linter()
)
lint(
text = 'grepl("z$", x)',
linters = string_boundary_linter()
)
# okay
lint(
text = 'startsWith(x, "a")',
linters = string_boundary_linter()
)
lint(
text = 'endsWith(x, "z")',
linters = string_boundary_linter()
)
# If missing values are present, the suggested alternative wouldn't be strictly
# equivalent, so this linter can also be turned off in such cases.
lint(
text = 'grepl("z$", x)',
linters = string_boundary_linter(allow_grepl = TRUE)
)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.