Replace DocumentParser impl with a real parser #162
Closed
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.
Depends on #160 and #161 , leaving this in draft until those are merged.
This commit is the first of a few that refactor the 'frontend' of the
server, i.e. the completions, definition, hover, etc. It replaces the
implementation of DocumentParser, which was used to compute specific
syntactic information about a Smithy file, with an actual parser that
will be used in future commits to overhaul language features like
completions.
For now, this is mostly a 1:1 swap - DocumentParser now
does no parsing, but instead uses the results of the actual parser to
compute the same info it used to. The only other real change to
functionality is that DocumentParser no longer depends on the result of
loading the model, and SmithyFiles are re-parsed synchronously on
changes.
The javadoc for the new
Syntax
class contains more detailedinformation on how the parser works, and why it works that way, but some
of it may not make complete sense with the current code in the language
server. The parser was built in tandem with the upgrades to completions,
and was specifically designed to enhance such features. Those upgrades
deserve their own commit, so I didn't include them here.
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.