Open
Description
Follow-up to #957 (comment)
There are a few places that would benefit from some shared logic about what constitutes a "literal expression" along the lines of these:
const_exprs <- c(
'"a"',
'1',
'1+1i',
'c("a")',
'c("a", 1)',
'c("a", 1+1i)',
'rep("a", 2)',
'rep("a", n)',
'rep(c("a", "b"), 5)',
'c(rep("a", 10), rep("b", 10))'
)
but excluding non-constant expressions like:
non_constant_exprs <- c(
'a',
'a + 1',
'foo(1)',
'foo(c(1, 2))'
)
I think c()
and rep()
are the most common ways to build constant expressions, so we can limit it to combinations of those. Note that I consider rep(1:3, n)
as being "constant" here, as the variable part is "constant enough" for the places where we'd use this:
strings_as_factors_linter
which looks fordata.frame
s declared with known-character columnsexpect_{type,length,named,s3_class}_linter
which look for literal exprs in the 1st argumentyoda_test_linter
which does the same