diff --git a/compiler/ballerina-parser/src/main/java/io/ballerina/compiler/internal/parser/RegExpParser.java b/compiler/ballerina-parser/src/main/java/io/ballerina/compiler/internal/parser/RegExpParser.java index ef48f6693fee..690f3dacde19 100644 --- a/compiler/ballerina-parser/src/main/java/io/ballerina/compiler/internal/parser/RegExpParser.java +++ b/compiler/ballerina-parser/src/main/java/io/ballerina/compiler/internal/parser/RegExpParser.java @@ -507,8 +507,8 @@ private STNode parseBaseQuantifier() { openBrace = invalidateNonDigitNodesAndAddToTrailingMinutiae(openBrace, true); } STNode leastDigits = parseDigits(true); - STNode comma = null; - STNode mostDigits = null; + STNode comma = STNodeFactory.createEmptyNode();; + STNode mostDigits = STNodeFactory.createEmptyNodeList(); nextToken = peek(); if (nextToken.kind == SyntaxKind.COMMA_TOKEN) { comma = consume(); diff --git a/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_03.json b/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_03.json index 5e2cbb958c84..fb86568adbe7 100644 --- a/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_03.json +++ b/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_03.json @@ -462,6 +462,10 @@ } ] }, + { + "kind": "LIST", + "children": [] + }, { "kind": "CLOSE_BRACE_TOKEN" } diff --git a/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_04.json b/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_04.json index ed89c9beb0a0..4b501bb75962 100644 --- a/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_04.json +++ b/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_04.json @@ -471,6 +471,10 @@ } ] }, + { + "kind": "LIST", + "children": [] + }, { "kind": "CLOSE_BRACE_TOKEN" } diff --git a/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_19.json b/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_19.json index e2a7c1b5f068..0243e0f6f835 100644 --- a/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_19.json +++ b/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_19.json @@ -693,6 +693,10 @@ } ] }, + { + "kind": "LIST", + "children": [] + }, { "kind": "CLOSE_BRACE_TOKEN" } diff --git a/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_36.json b/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_36.json index d820105ec1fe..de9d2c85af26 100644 --- a/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_36.json +++ b/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_36.json @@ -145,6 +145,10 @@ } ] }, + { + "kind": "LIST", + "children": [] + }, { "kind": "CLOSE_BRACE_TOKEN" } diff --git a/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_37.json b/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_37.json index 1eaadb05ca27..7abdeb21484a 100644 --- a/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_37.json +++ b/compiler/ballerina-parser/src/test/resources/expressions/regexp-constructor-expr/regexp_constructor_assert_37.json @@ -145,6 +145,10 @@ } ] }, + { + "kind": "LIST", + "children": [] + }, { "kind": "CLOSE_BRACE_TOKEN" } diff --git a/misc/formatter/modules/formatter-core/src/test/resources/expressions/raw-template/assert/regex_expressions.bal b/misc/formatter/modules/formatter-core/src/test/resources/expressions/raw-template/assert/regex_expressions.bal new file mode 100644 index 000000000000..fcba34d7bdf4 --- /dev/null +++ b/misc/formatter/modules/formatter-core/src/test/resources/expressions/raw-template/assert/regex_expressions.bal @@ -0,0 +1,38 @@ +type AnnotRec record {| + string:RegExp value; +|}; + +annotation AnnotRec annot on type; + +@annot { + value: re `abc{1}` +} +type Foo record { + string name; +}; + +@annot { + value: re `abc{1,}` +} +type Foo2 record { + string name; +}; + +@annot { + value: re `abc{1,2}` +} +type Foo3 record { + string name; +}; + +public function test1() { + Foo _ = {name: "abc"}; + Foo2 _ = {name: "abc"}; + Foo3 _ = {name: "abc"}; +} + +public function test2() { + string:RegExp _ = re `[A-Z]{1}`; + string:RegExp _ = re `[A-Z]{1,2}`; + string:RegExp _ = re `[A-Z]{1,}`; +} diff --git a/misc/formatter/modules/formatter-core/src/test/resources/expressions/raw-template/source/regex_expressions.bal b/misc/formatter/modules/formatter-core/src/test/resources/expressions/raw-template/source/regex_expressions.bal new file mode 100644 index 000000000000..b1282481d7c1 --- /dev/null +++ b/misc/formatter/modules/formatter-core/src/test/resources/expressions/raw-template/source/regex_expressions.bal @@ -0,0 +1,38 @@ +type AnnotRec record {| + string:RegExp value; +|}; + +annotation AnnotRec annot on type; + +@annot { + value: re `abc{1}` +} +type Foo record { + string name; +}; + +@annot { + value: re `abc{1,}` +} +type Foo2 record { + string name; +}; + +@annot { + value: re `abc{1,2}` +} +type Foo3 record { + string name; +}; + +public function test1() { + Foo _={name: "abc"}; + Foo2 _={name: "abc"}; + Foo3 _={name: "abc"}; +} + +public function test2() { + string:RegExp _=re `[A-Z]{1}`; + string:RegExp _=re `[A-Z]{1,2}`; + string:RegExp _=re `[A-Z]{1,}`; +}