From 91fc30dfc002d8905cd329cf63b0d11c223ed6b8 Mon Sep 17 00:00:00 2001 From: Philipp Ossler Date: Tue, 27 Aug 2024 14:30:03 +0200 Subject: [PATCH 1/2] test: Verify variable name with "in" Add a test case to verify that a variable name can start with "in" followed by a number. --- .../feel/impl/interpreter/InterpreterExpressionTest.scala | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/scala/org/camunda/feel/impl/interpreter/InterpreterExpressionTest.scala b/src/test/scala/org/camunda/feel/impl/interpreter/InterpreterExpressionTest.scala index 5eab431b1..383753854 100644 --- a/src/test/scala/org/camunda/feel/impl/interpreter/InterpreterExpressionTest.scala +++ b/src/test/scala/org/camunda/feel/impl/interpreter/InterpreterExpressionTest.scala @@ -317,7 +317,9 @@ class InterpreterExpressionTest "inside", "durationX", "dateX", - "timeX" + "timeX", + "inX", + "in1" ).foreach { variableName => it should s"contain a key-word ($variableName)" in { From 61cd326dc604a5208df22ce6f2b63a9474926bfc Mon Sep 17 00:00:00 2001 From: Philipp Ossler Date: Tue, 27 Aug 2024 14:36:30 +0200 Subject: [PATCH 2/2] fix: Parse variable name starting with "in" Adjust the parsing of a variable name. If the name starts with a key word, like "in", it can continue with a number. Previously, the key word must be followed by a letter. --- .../org/camunda/feel/impl/parser/FeelParser.scala | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/scala/org/camunda/feel/impl/parser/FeelParser.scala b/src/main/scala/org/camunda/feel/impl/parser/FeelParser.scala index 65fdb1a49..22704fc8d 100644 --- a/src/main/scala/org/camunda/feel/impl/parser/FeelParser.scala +++ b/src/main/scala/org/camunda/feel/impl/parser/FeelParser.scala @@ -157,12 +157,17 @@ object FeelParser { // an identifier which is not a reserved word. but, it can contain a reserved word. private def identifier[_: P]: P[String] = P( - reservedWord.? ~~ javaLikeIdentifier + (reservedWord ~~ namePart) | (reservedWord.? ~~ nameStart ~~ namePart.?) ).! - private def javaLikeIdentifier[_: P]: P[String] = + private def nameStart[_: P]: P[String] = P( - CharPred(Character.isJavaIdentifierStart) ~~ CharsWhile(Character.isJavaIdentifierPart, 0) + CharPred(Character.isJavaIdentifierStart) + ).! + + private def namePart[_: P]: P[String] = + P( + CharsWhile(Character.isJavaIdentifierPart, 1) ).! // an identifier wrapped in backticks. it can contain any char (e.g. `a b`, `a+b`).