fix: Parse an if followed by a tuple as a block #1924
Merged
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*
Resolves #1310
Summary*
Previously an
if
followed by a tuple expression was parsed as a function call, with the return result of theif
being the function. This is ambiguous with the grammar of anif
expression sequenced with a tuple. Since the later parse is more desirable (and matches what rust does in this scenario) I've resolved the parse by arbitrarily always taking the later over the former.Since I've added a check when constructing an
Expression::call
this means unfortunately that anyif
expression surrounded by parenthesis is also affected. So(if c { f } else { g })(1, 2)
is also parsed as a sequence rather than a function call.Documentation
This PR requires documentation updates when merged.
Additional Context
PR Checklist*
cargo fmt
on default settings.