Soft Parser: Initial implementation of SoftParser#328
Merged
simerplaha merged 11 commits intomasterfrom Nov 28, 2024
Merged
Conversation
Member
Sound's good to me |
Member
|
I translated |
Contributor
Author
|
Lexème sounds better in French 😆 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Overview
CodeProviderexecution (completion, goto definition etc) #104.SoftParser.Syntax error-insensitive
SoftParseralways generates an AST, even if the code contains syntax errors. This ensures that LSP APIs (jump-to-definition, code completion etc) are always available.Unresolvedin the Syntax Tree.Order-insensitive
The order of the code is not enforced. For example, the following code is parseable:
Releases & Incremental implementation
Being error-insensitive allows
SoftParserto be implemented and integrated incrementally. For example, the following is valid Ralph code, butlet bool = trueis parsed asUnresolvedbySoftParserbecause it does not recognise this syntax yet.ralph-lspwith the latestNodeversion.SoftParserto used by jump-definitions, code-completion etc, even though it is only partially implemented.Convert
SoftASTto CodeSoftASTcan always be converted back to the original string code using thetoCode()method call:toCode()can be also be invoked on any sub-tree, resulting in code just for that tree.See Demo.scala.
Formatting
SoftAST.Spaceinstances within anAST.SoftParserdoes not enforce strict ordering. For example,fn function()is parsable even when it is not embedded within aContractorTxScript. This allows the implementation of on type formatting.AST as
StringInvoke the following to generate a String tree representation of the AST.
See Demo.scala.
Next steps