From 0bf37735e98e2a7da6e2903925dadf172fb1dea1 Mon Sep 17 00:00:00 2001 From: Maciej Barelkowski <28307541+barmac@users.noreply.github.com> Date: Wed, 11 Feb 2026 10:47:12 +0100 Subject: [PATCH] feat: allow iteration context in quantified expression Related to https://github.com/camunda/camunda/issues/40304 --- src/feel.grammar | 2 +- test/expressions.txt | 29 ++++++++++++++++++++++++----- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/src/feel.grammar b/src/feel.grammar index 0883744..1988131 100644 --- a/src/feel.grammar +++ b/src/feel.grammar @@ -96,7 +96,7 @@ QuantifiedInExpressions[@name=InExpressions] { } QuantifiedInExpression[@name=InExpression] { - inExpression + inExpression } QuantifiedExpression { diff --git a/test/expressions.txt b/test/expressions.txt index 11124eb..f850605 100644 --- a/test/expressions.txt +++ b/test/expressions.txt @@ -1154,7 +1154,7 @@ satisfies Expression( QuantifiedExpression( every,InExpressions( - InExpression(Name(...),in,List("[","]")) + InExpression(Name(...),in,IterationContext(List("[","]"))) ), satisfies, PathExpression( VariableName(...), VariableName(...) @@ -1175,9 +1175,9 @@ satisfies Expression( QuantifiedExpression( every,InExpressions( - InExpression(Name(...),in,List("[", + InExpression(Name(...),in,IterationContext(List("[", Context("{",ContextEntry(Key(Name(...)),NumericLiteral),"}"), - "]")) + "]"))) ),satisfies, PathExpression( VariableName(...), @@ -1198,6 +1198,25 @@ Expression( ) +# QuantifiedExpression (iteration context) + +some i in 1..10 satisfies i > 5 + +==> + +Expression( + QuantifiedExpression( + some,InExpressions( + InExpression(Name(Identifier),in,IterationContext( + NumericLiteral, + NumericLiteral + )) + ),satisfies, + Comparison(...) + ) +) + + # FilterExpression { "top": "Expressions" } a[c]; @@ -2290,8 +2309,8 @@ every a a in b, dd in [] satisfies a a < dd - c Expression( QuantifiedExpression( every,InExpressions( - InExpression(Name(...),in,VariableName(...)), - InExpression(Name(...),in,List("[","]")) + InExpression(Name(...),in,IterationContext(VariableName(...))), + InExpression(Name(...),in,IterationContext(List("[","]"))) ),satisfies,Comparison( VariableName(...),CompareOp,ArithmeticExpression( VariableName(...),ArithOp,VariableName(...)