Skip to content

Write an XPath for extended known-literal expressions #963

Open
@MichaelChirico

Description

@MichaelChirico

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 for data.frames declared with known-character columns
  • expect_{type,length,named,s3_class}_linter which look for literal exprs in the 1st argument
  • yoda_test_linter which does the same

Metadata

Metadata

Assignees

No one assigned

    Labels

    featurea feature request or enhancement

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions