cue/parser: restrict else to single clause only
Restrict else/fallback clause usage to avoid ambiguous
semantics:
- else: only with single if or single try clause
- fallback: requires at least one for clause
With multiple clauses (e.g., two ifs, chained try, if+let),
it becomes unclear which clause the else applies to.
Parser validation:
- Checks len(clauses) > 1 to reject chaining with else
- Checks for 'for' clause to require fallback vs else
- Added comprehensive test coverage
Compiler validation:
- Enforces same restrictions for programmatically created ASTs
- Simple error message for invalid clause combinations
Updated:
- doc/ref/spec.md: Single clause requirement
- doc/specs/comprehension-else/spec.md: Updated scenarios
- Tests: Parser tests and compile error tests
Fixes ambiguity in expressions like:
if cond1 if cond2 { x } else { y } // Which if does else apply to?
Signed-off-by: Marcel van Lohuizen <mpvl@gmail.com>
Change-Id: Iffee98196363af59f2418c80077acad349e93db4
Reviewed-on: https://cue.gerrithub.io/c/cue-lang/cue/+/1231972
Reviewed-by: Daniel Martí <mvdan@mvdan.cc>
Unity-Result: CUE porcuepine <cue.porcuepine@gmail.com>
TryBot-Result: CUEcueckoo <cueckoo@cuelang.org>