From d2f86bf376d6ca01e4722682af9447889aa87bdd Mon Sep 17 00:00:00 2001 From: ryaneberly Date: Thu, 15 Oct 2015 16:56:39 -0400 Subject: [PATCH 1/6] #105 fixed --- src/main/java/com/cflint/plugins/Context.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/cflint/plugins/Context.java b/src/main/java/com/cflint/plugins/Context.java index 5381c1a82..53652a68b 100644 --- a/src/main/java/com/cflint/plugins/Context.java +++ b/src/main/java/com/cflint/plugins/Context.java @@ -144,7 +144,10 @@ public Context subContext(final Element elem){ } public int startLine() { - return element.getSource().getRow(element.getBegin()); + if(element != null && element.getSource() !=null) + return element.getSource().getRow(element.getBegin()); + else + return 0; } protected String componentFromFile(String filename) { From 73687796901735b3fdb8005e020bac1f858d3eb1 Mon Sep 17 00:00:00 2001 From: ryaneberly Date: Thu, 15 Oct 2015 22:10:59 -0400 Subject: [PATCH 2/6] #104 --- src/main/java/com/cflint/CFLint.java | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/cflint/CFLint.java b/src/main/java/com/cflint/CFLint.java index 63b58d6ed..43ea5e189 100644 --- a/src/main/java/com/cflint/CFLint.java +++ b/src/main/java/com/cflint/CFLint.java @@ -21,14 +21,13 @@ import org.antlr.runtime.RecognitionException; import org.antlr.v4.runtime.Parser; import org.antlr.v4.runtime.Recognizer; +import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.atn.ATNConfigSet; import org.antlr.v4.runtime.dfa.DFA; import cfml.CFSCRIPTLexer; import cfml.parsing.CFMLParser; import cfml.parsing.CFMLSource; -import cfml.parsing.cfml.ErrorEvent; -import cfml.parsing.cfml.IErrorObserver; import cfml.parsing.cfscript.CFAssignmentExpression; import cfml.parsing.cfscript.CFBinaryExpression; import cfml.parsing.cfscript.CFExpression; @@ -775,7 +774,13 @@ public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, org.antlr.v4.runtime.RecognitionException e) { final String file = currentFile == null ? "" : currentFile + "\r\n"; - //System.err.println(file + "----syntax error ---" + line + " : " + charPositionInLine); + String expression=null; + if(offendingSymbol instanceof Token){ + expression = ((Token) offendingSymbol).getText(); + if(expression.length() > 50){ + expression=expression.substring(1,40) + "..."; + } + } if(!currentElement.isEmpty()){ Element elem = currentElement.peek(); if(line == 1){ @@ -785,7 +790,17 @@ public void syntaxError(Recognizer recognizer, line = elem.getSource().getRow(elem.getBegin()) + line - 1; } } - fireCFLintException(e,PARSE_ERROR,currentFile,line,charPositionInLine,"",offendingSymbol==null?"":offendingSymbol.toString()); + if(recognizer instanceof Parser && ((Parser)recognizer).getExpectedTokens().contains(65)){ + bugs.add(new BugInfo.BugInfoBuilder().setMessageCode("PARSE_ERROR") + .setFilename(file).setMessage("End of statement(;) expected instead of " + expression).setSeverity("ERROR") + .setExpression(expression) + .setLine(line).setColumn(charPositionInLine) + .build()); + + }else{ + + fireCFLintException(e,PARSE_ERROR,file,line,charPositionInLine,"",msg); + } } public void reportAmbiguity(Parser recognizer, DFA dfa, int startIndex, int stopIndex, boolean exact, java.util.BitSet ambigAlts, From c5fa84087baca3d90c75df9957ac68a3022095e3 Mon Sep 17 00:00:00 2001 From: ryaneberly Date: Fri, 16 Oct 2015 21:25:50 -0400 Subject: [PATCH 3/6] add test --- .../java/com/cflint/TestParsingErrors.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/test/java/com/cflint/TestParsingErrors.java diff --git a/src/test/java/com/cflint/TestParsingErrors.java b/src/test/java/com/cflint/TestParsingErrors.java new file mode 100644 index 000000000..c8b94ef7b --- /dev/null +++ b/src/test/java/com/cflint/TestParsingErrors.java @@ -0,0 +1,57 @@ +package com.cflint; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; + +import cfml.parsing.reporting.ParseException; + +import com.cflint.config.ConfigRuntime; +import com.cflint.config.CFLintPluginInfo.PluginInfoRule; +import com.cflint.config.CFLintPluginInfo.PluginInfoRule.PluginMessage; +import com.cflint.plugins.core.VarScoper; + +public class TestParsingErrors { + + private CFLint cfBugs; + + @Before + public void setUp() { + ConfigRuntime conf = new ConfigRuntime(); + PluginInfoRule pluginRule = new PluginInfoRule(); + pluginRule.setName("VarScoper"); + conf.getRules().add(pluginRule); + PluginMessage pluginMessage = new PluginMessage("MISSING_VAR"); + pluginMessage.setSeverity("ERROR"); + pluginMessage + .setMessageText("Variable ${variable} is not declared with a var statement."); + pluginRule.getMessages().add(pluginMessage); + + cfBugs = new CFLint(conf, new VarScoper()); + } + + @Test + public void testMissingSemiColon() throws ParseException, IOException{ + final String cfcSrc = "\r\n" + + "\r\n" + + " \r\n" + + " var xx = 123\r\n" + + " yy = 123\r\n" + + " \r\n" + + "\r\n" + + ""; + cfBugs.process(cfcSrc,"test"); + assertEquals(1,cfBugs.getBugs().getFlatBugList().size()); + List result = cfBugs.getBugs().getFlatBugList(); + assertEquals(1,result.size()); + assertEquals("MISSING_VAR",result.get(0).getMessageCode()); + assertEquals("yy",result.get(0).getVariable()); + assertEquals(5,result.get(0).getLine()); + assertEquals("ERROR",result.get(0).getSeverity()); + assertEquals("Variable yy is not declared with a var statement.",result.get(0).getMessage()); + } +} From 8fada1ea3486ebe52a48955db06c8b37b0f0b40d Mon Sep 17 00:00:00 2001 From: ryaneberly Date: Mon, 19 Oct 2015 21:59:37 -0400 Subject: [PATCH 4/6] changed message code for missing semi-color to MISSING_SEMI --- src/main/java/com/cflint/CFLint.java | 3 ++- .../java/com/cflint/TestParsingErrors.java | 21 +++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/cflint/CFLint.java b/src/main/java/com/cflint/CFLint.java index 43ea5e189..01665db1e 100644 --- a/src/main/java/com/cflint/CFLint.java +++ b/src/main/java/com/cflint/CFLint.java @@ -156,6 +156,7 @@ public CFLint(ConfigRuntime configuration,final CFLintScanner... bugsScanners) { allowedExtensions.add(cfcExtension); allowedExtensions.add(cfmExtenstion); } + cfmlParser.setErrorReporter(this); } public void scan(final String folder) { @@ -791,7 +792,7 @@ public void syntaxError(Recognizer recognizer, } } if(recognizer instanceof Parser && ((Parser)recognizer).getExpectedTokens().contains(65)){ - bugs.add(new BugInfo.BugInfoBuilder().setMessageCode("PARSE_ERROR") + bugs.add(new BugInfo.BugInfoBuilder().setMessageCode("MISSING_SEMI") .setFilename(file).setMessage("End of statement(;) expected instead of " + expression).setSeverity("ERROR") .setExpression(expression) .setLine(line).setColumn(charPositionInLine) diff --git a/src/test/java/com/cflint/TestParsingErrors.java b/src/test/java/com/cflint/TestParsingErrors.java index c8b94ef7b..c388376a8 100644 --- a/src/test/java/com/cflint/TestParsingErrors.java +++ b/src/test/java/com/cflint/TestParsingErrors.java @@ -40,18 +40,27 @@ public void testMissingSemiColon() throws ParseException, IOException{ "\r\n" + " \r\n" + " var xx = 123\r\n" + - " yy = 123\r\n" + + " yy = 123;\r\n" + " \r\n" + "\r\n" + ""; cfBugs.process(cfcSrc,"test"); - assertEquals(1,cfBugs.getBugs().getFlatBugList().size()); - List result = cfBugs.getBugs().getFlatBugList(); + + assertEquals(2,cfBugs.getBugs().getFlatBugList().size()); + System.out.println(cfBugs.getBugs().getFlatBugList()); + final List result = cfBugs.getBugs().getBugList().get("MISSING_SEMI"); assertEquals(1,result.size()); - assertEquals("MISSING_VAR",result.get(0).getMessageCode()); - assertEquals("yy",result.get(0).getVariable()); + assertEquals("MISSING_SEMI",result.get(0).getMessageCode()); assertEquals(5,result.get(0).getLine()); assertEquals("ERROR",result.get(0).getSeverity()); - assertEquals("Variable yy is not declared with a var statement.",result.get(0).getMessage()); + assertEquals("End of statement(;) expected instead of yy",result.get(0).getMessage()); + + final List result2 = cfBugs.getBugs().getBugList().get("MISSING_VAR"); + assertEquals(1,result2.size()); + assertEquals("MISSING_VAR",result2.get(0).getMessageCode()); + assertEquals("yy",result2.get(0).getVariable()); + assertEquals(5,result2.get(0).getLine()); + assertEquals("ERROR",result2.get(0).getSeverity()); + assertEquals("Variable yy is not declared with a var statement.",result2.get(0).getMessage()); } } From 0cc25c61d9cd1df284590142ca840d59501377ca Mon Sep 17 00:00:00 2001 From: ryaneberly Date: Mon, 19 Oct 2015 22:08:39 -0400 Subject: [PATCH 5/6] fix test --- src/test/java/com/cflint/TestComponentLengthChecker.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/cflint/TestComponentLengthChecker.java b/src/test/java/com/cflint/TestComponentLengthChecker.java index 62e47671f..8c94f6fe5 100644 --- a/src/test/java/com/cflint/TestComponentLengthChecker.java +++ b/src/test/java/com/cflint/TestComponentLengthChecker.java @@ -671,7 +671,7 @@ public void testBadFunction() throws ParseException, IOException{ "}\r\n" + "}"; cfBugs.process(cfcSrc,"test"); - final List result = cfBugs.getBugs().getBugList().values().iterator().next(); + final List result = cfBugs.getBugs().getBugList().get("EXCESSIVE_COMPONENT_LENGTH"); assertEquals(1, result.size()); assertEquals("EXCESSIVE_COMPONENT_LENGTH", result.get(0).getMessageCode()); } From 567c2d20f2995918d419c2e493498edb210c5820 Mon Sep 17 00:00:00 2001 From: ryaneberly Date: Mon, 19 Oct 2015 22:15:46 -0400 Subject: [PATCH 6/6] fix test --- src/test/java/com/cflint/TestCFBugs_SimpleComplexity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/com/cflint/TestCFBugs_SimpleComplexity.java b/src/test/java/com/cflint/TestCFBugs_SimpleComplexity.java index a4ba37c96..7470cb950 100644 --- a/src/test/java/com/cflint/TestCFBugs_SimpleComplexity.java +++ b/src/test/java/com/cflint/TestCFBugs_SimpleComplexity.java @@ -142,7 +142,7 @@ public void testComplexScriptBased() throws ParseException, IOException { + "}\r\n" + "}"; cfBugs.process(cfcSrc, "test"); - final List result = cfBugs.getBugs().getBugList().values().iterator().next(); + final List result = cfBugs.getBugs().getBugList().get("FUNCTION_TOO_COMPLEX"); assertEquals(1, result.size()); assertEquals("FUNCTION_TOO_COMPLEX", result.get(0).getMessageCode()); assertEquals(2, result.get(0).getLine());