rust-lang / rust-lang/rust-analyzer
Enforce Syntax Trees Invariantrs
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 16.9k
- Forks
- 2.2k
- Avg merge
- 1d 12h
- Merged PRs (30d)
- 72
Description
We have couple of weak invariants about our syntax trees, which are not really enforced and sometimes are broken in practice. We should
- document invariants
assertthem- make sure that they are obeyed in practice
Here's the tentative list of invariants:
- The only node that is allowed to be empty is
SourceFile - The only token kind that is allowed to be empty are fake dollar parens from macro expansion
- Braces should play well with incremental reparsing (see https://github.com/rust-analyzer/rust-analyzer/pull/4680#issuecomment-641346748)
Notably, the following is not an invariant, but we rely on it in some ast extensions:
- Parent nodes are not guaranteed to exist.
For example, ast::EnumVariant should return Option
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the listed syntax-tree invariants and the linked incremental-reparsing discussion, then inspect the syntax-tree implementation and ast::EnumVariant behavior. Done means the invariants are documented, asserted, and upheld in practice, including the stated exception for parent nodes.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- compilers, tooling
- Issue type
- Refactor
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 28/100