Skip to content

Commit 0dea330

Browse files
authored
improve grammar coverage (#47)
* fix function parameters with double colon
1 parent 999c4b4 commit 0dea330

File tree

5 files changed

+166
-654
lines changed

5 files changed

+166
-654
lines changed

community-rust-frontend/src/main/java/org/sonar/rust/RustGrammar.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -641,7 +641,7 @@ private static void functionsItem(LexerlessGrammarBuilder b) {
641641

642642

643643
b.rule(FUNCTION_PARAM).is(
644-
b.zeroOrMore(OUTER_ATTRIBUTE), SPC,
644+
b.zeroOrMore(OUTER_ATTRIBUTE,SPC), SPC,
645645
b.firstOf(FUNCTION_PARAM_PATTERN, RustPunctuator.DOTDOTDOT, TYPE));
646646

647647
b.rule(FUNCTION_PARAM_PATTERN).is(PATTERN_NO_TOP_ALT, SPC, RustPunctuator.COLON,
@@ -1131,7 +1131,7 @@ private static void functionpointer(LexerlessGrammarBuilder b) {
11311131
b.rule(MAYBE_NAMED_PARAM).is(
11321132
b.zeroOrMore(OUTER_ATTRIBUTE, SPC),
11331133
b.optional(b.sequence(
1134-
b.firstOf(IDENTIFIER, RustPunctuator.UNDERSCORE), SPC, RustPunctuator.COLON
1134+
b.firstOf(IDENTIFIER, RustPunctuator.UNDERSCORE), SPC, RustPunctuator.COLON, b.nextNot(RustPunctuator.COLON)
11351135
)), SPC, TYPE
11361136
);
11371137
b.rule(MAYBE_NAMED_FUNCTION_PARAMETERS_VARIADIC).is(
@@ -1732,7 +1732,7 @@ private static void operator(LexerlessGrammarBuilder b) {
17321732
}
17331733

17341734
private static void block(LexerlessGrammarBuilder b) {
1735-
b.rule(BLOCK_EXPRESSION).is("{", SPC, b.zeroOrMore(INNER_ATTRIBUTE),
1735+
b.rule(BLOCK_EXPRESSION).is("{", SPC, b.zeroOrMore(INNER_ATTRIBUTE,SPC),
17361736
SPC, b.optional(STATEMENTS), SPC, "}"
17371737
);
17381738

community-rust-frontend/src/test/java/org/sonar/rust/RustLexerTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ public void testTokens() {
6868

6969
@Test
7070
public void testParsing() {
71-
String sexpr = "crate_root.call(me);";
71+
String sexpr = "static INIT_ARRAY: unsafe extern \"C\" fn(c::c_int, *mut *mut u8, *mut *mut u8) = {\n" +
72+
" unsafe extern \"C\" fn function(_argc: c::c_int, _argv: *mut *mut u8, envp: *mut *mut u8) {\n" +
73+
" }\n" +
74+
" function\n" +
75+
"};";
7276

7377
//Print out Ast node content for debugging purpose
7478

community-rust-frontend/src/test/java/org/sonar/rust/parser/items/FunctionTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,8 @@ public void testFunctionParameters() {
8888
.matches("x : i32")
8989
.matches("x : i32, y:i64")
9090
.matches("&self, n:u32")
91+
.matches("*mut *mut u8, *mut *mut u8")
92+
.matches("c::c_int, *mut *mut u8, *mut *mut u8")
9193

9294
;
9395

community-rust-frontend/src/test/java/org/sonar/rust/parser/items/StaticTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,12 @@ public void testStatic() {
3131
assertThat(RustGrammar.create().build().rule(RustGrammar.STATIC_ITEM))
3232
.matches("static mut LEVELS: u32 = 0;")
3333
.matches("static mut LEVELS: u32;")
34+
.matches("static INIT_ARRAY: unsafe extern \"C\" fn(c::c_int, *mut *mut u8, *mut *mut u8) = {\n" +
35+
" unsafe extern \"C\" fn function(_argc: c::c_int, _argv: *mut *mut u8, envp: *mut *mut u8) {\n" +
36+
" init_from_envp(envp);\n" +
37+
" }\n" +
38+
" function\n" +
39+
"};")
3440

3541

3642
;

0 commit comments

Comments
 (0)