fix: Prevent if
and for
from parsing constructor expressions
#1916
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.
Description
Problem*
In the code:
The parser would parse an expression for the if condition and
x { y }
is a valid constructor expression using the shorthand field syntax. I've resolved this to more closely follow rust's official grammar (https://doc.rust-lang.org/reference/expressions/if-expr.html) in which constructor expressions are forbidden as part of an if condition:Note the "except struct expression" subscript.
Resolves #1915 and #152
Summary*
Unfortunately this PR is quite messy. I'm not sure of a good way to clean it up at the moment without duplicating the expression parser. Chumsky requiring us to pass each recursive parser as a parameter makes it quite a bit more verbose.
Documentation
This PR requires documentation updates when merged.
Additional Context
PR Checklist*
cargo fmt
on default settings.