feat(parser): Don't error on frontmatter #20854
Merged
+407
−9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The hope is this will improve the editor experience for cargo scripts even if there isn't full support yet. This is a first step towards #15318.
This copies over Cargo's frontmatter parser, rather than using rustc's because rustc's is embedded in the tokenizer and requires the lexer to be stateful. r-a intentionally prevents the tokenizer from being stateful.
Edits to Cargo's frontmatter parser were kept to a minimum with documentation linking it back to the source, for easier editing.
Cargo could expose this as a crate but not feeling up for taking on a new crate atm and we could get into a weird position with release cycles as most internal crates follow the release train, being published on stabilization.
Cargo's frontmatter parser counts the end of a shebang slightly differently than rustc_lexer, causing some other tests to be updated. Cargo's behavior more closely represents the Reference. While that is non-normative, I think this representation makes more logical sense.