Skip to content

Commit 1ca187d

Browse files
authored
Merge pull request #2198 from guwirth/error-recovery-msg
C++ Parser can't read code. Declaration is skipped.
2 parents ac8f4d0 + b42c161 commit 1ca187d

File tree

3 files changed

+37
-7
lines changed

3 files changed

+37
-7
lines changed

cxx-checks/src/main/java/org/sonar/cxx/checks/error/ParsingErrorRecoveryCheck.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@
2424
import org.sonar.check.Priority;
2525
import org.sonar.check.Rule;
2626
import org.sonar.cxx.parser.CxxGrammarImpl;
27-
import org.sonar.cxx.tag.Tag;
2827
import org.sonar.cxx.squidbridge.annotations.ActivatedByDefault;
2928
import org.sonar.cxx.squidbridge.annotations.NoSqale;
3029
import org.sonar.cxx.squidbridge.checks.SquidCheck;
30+
import org.sonar.cxx.tag.Tag;
3131

3232
@Rule(
3333
key = "ParsingErrorRecovery",
@@ -45,8 +45,16 @@ public void init() {
4545

4646
@Override
4747
public void visitNode(AstNode node) {
48-
getContext().createLineViolation(this, "C++ Parser can't read code. Declaration is skipped.",
49-
node.getToken().getLine());
48+
var msg = "C++ Parser can't read code. Declaration is skipped";
49+
var lastToken = node.getLastToken();
50+
if (lastToken != null) {
51+
msg += String.format(" (last token='%s', line=%d, column=%d)",
52+
lastToken.getValue(),
53+
lastToken.getLine(),
54+
lastToken.getColumn());
55+
}
56+
msg += ".";
57+
getContext().createLineViolation(this, msg, node.getToken().getLine());
5058
}
5159

5260
}

cxx-checks/src/test/java/org/sonar/cxx/checks/error/ParsingErrorRecoveryCheckTest.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,14 @@ public void test_syntax_error_recovery() throws UnsupportedEncodingException, IO
4242
new ParsingErrorRecoveryCheck());
4343

4444
CheckMessagesVerifier.verify(file.getCheckMessages())
45-
.next().atLine(2).withMessage("C++ Parser can't read code. Declaration is skipped.")
45+
.next().atLine(6)
46+
.withMessage("C++ Parser can't read code. Declaration is skipped (last token='}', line=9, column=0).")
47+
.next().atLine(16)
48+
.withMessage("C++ Parser can't read code. Declaration is skipped (last token='{', line=17, column=0).")
49+
.next().atLine(19)
50+
.withMessage("C++ Parser can't read code. Declaration is skipped (last token='++', line=20, column=6).")
51+
.next().atLine(21)
52+
.withMessage("C++ Parser can't read code. Declaration is skipped (last token='}', line=21, column=0).")
4653
.noMore();
4754
}
4855

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,21 @@
1-
void f1(){int i1;}
2-
void f2(){int i2 }
3-
void f3(){int i3;}
1+
void f1()
2+
{
3+
int i1;
4+
}
45

6+
void f2()
7+
{
8+
int i2
9+
}
510

11+
void f3()
12+
{
13+
int i3;
14+
}
615

16+
void f4()
17+
{
18+
int i4;
19+
if( i4
20+
i4++;
21+
}

0 commit comments

Comments
 (0)