LOG.log( FINE, v.getReporter() + " " + v.getSeverity() + " (" + v.getRule() + ") " + v.getFile() + " " + v.getStartLine() + " -> " + v.getEndLine());
private StringBuilder toDetailed( final Iterable<Violation> violations, final String summarySubject) { final StringBuilder sb = new StringBuilder(); final List<String[]> rows = new ArrayList<>(); for (final Violation violation : violations) { final String message = addNewlines(violation.getMessage(), maxMessageColumnWidth); final String line = addNewlines(violation.getStartLine().toString(), maxLineColumnWidth); final String severity = addNewlines(violation.getSeverity().name(), maxSeverityColumnWidth); final String rule = addNewlines(violation.getRule(), maxRuleColumnWidth); final String reporter = addNewlines(violation.getReporter(), maxReporterColumnWidth); final String[] row = {reporter, rule, severity, line, message}; rows.add(row); } final String[] headers = {"Reporter", "Rule", "Severity", "Line", "Message"}; final String[][] data = rows.toArray(new String[][] {}); sb.append(FlipTable.of(headers, data)); sb.append("\n"); sb.append(toCompact(violations, summarySubject)); sb.append("\n"); return sb; }
public Violation build() { return new Violation(this); }
private String comparingString(final Violation o) { return o.file + "_" + (Integer.MAX_VALUE - o.getStartLine()) + "_" + o.getParser() + "_" + o.getMessage(); } }
public ViolationData(final Violation violation) { super(violation); messageEscaped = escapeHTML(violation.getMessage()); final String[] fileParts = violation.getFile().split("\\/"); fileName = fileParts[fileParts.length - 1]; }
assertThat(actual.get(0).getMessage()) // .isEqualTo("Type Javadoc comment is missing an @author tag."); assertThat(actual.get(0).getFile()) // .isEqualTo("D:/projects/fawkez/test/java/org/jcoderz/commons/logging/XmlPrinterTest.java"); assertThat(actual.get(0).getSeverity()) // .isEqualTo(INFO); assertThat(actual.get(0).getRule()) // .isEqualTo("CS_MISSING_TAG(Checkstyle)"); assertThat(actual.get(0).getStartLine()) // .isEqualTo(50); assertThat(actual.get(0).getEndLine()) // .isEqualTo(50); assertThat(actual.get(1).getMessage()) // .isEqualTo("Class LogElementHandler should be declared as final.");
assertThat(actualViolationZero.getFile()) // .isEqualTo("C:/git/test-project/Test Solution 1/GenericsSample/Form1.Designer.cs"); assertThat(actualViolationZero.getStartLine()) // .isEqualTo(212); assertThat(actualViolationZero.getMessage()) // .startsWith("Method 'Form"); assertThat(actualViolationZero.getReporter()) // .isEqualTo(FXCOP.name()); assertThat(actualViolationZero.getRule()) // .isEqualTo("Do not pass literals as localized parameters"); assertThat(actualViolationZero.getSeverity()) // .isEqualTo(WARN); assertThat(actualViolationZero.getSource()) // .isEqualTo("Form1"); assertThat(actualViolationZero.getSpecifics().get("TARGET_NAME")) // .isEqualTo( "C:/git/test-project/Test Solution 1/GenericsSample/bin/Debug/GenericsSample.exe"); assertThat(actualViolationOne.getFile()) // .isEqualTo("C:/git/test-project/Test Solution 1/GenericsSample/Form1.Designer.cs"); assertThat(actualViolationOne.getStartLine()) // .isEqualTo(203); assertThat(actualViolationOne.getMessage()) // .startsWith("Method 'Form"); assertThat(actualViolationOne.getReporter()) // .isEqualTo(FXCOP.name()); assertThat(actualViolationOne.getRule()) // .isEqualTo("Do not pass literals as localized parameters"); assertThat(actualViolationOne.getSeverity()) //
assertThat(violation0.getFile()) // .isEqualTo("se/bjurr/violations/lib/parsers/FindbugsParser.java"); assertThat(violation0.getMessage()) // .startsWith("Method invokes toString") // .doesNotContain("CDATA"); assertThat(violation0.getStartLine()) // .isEqualTo(125); assertThat(violation0.getEndLine()) // .isEqualTo(125); assertThat(violation0.getRule()) // .isEqualTo("DM_STRING_TOSTRING"); assertThat(violation0.getSeverity()) // .isEqualTo(INFO); assertThat(violation0.getSource()) // .isEqualTo("se.bjurr.violations.lib.parsers.FindbugsParser"); assertThat(violation0.getSpecifics().get(FINDBUGS_SPECIFIC_RANK)) // .isEqualTo("20");
violationBuilder() // assertThat(violation9.getMessage()) // .isEqualTo("test with F"); assertThat(violation9.getFile()) // .isEqualTo("__fake__.py"); assertThat(violation9.getRule()) // .isEqualTo("F265"); assertThat(violation9.getSeverity()) // .isEqualTo(ERROR); assertThat(violation10.getMessage()) // .isEqualTo("test with W"); assertThat(violation10.getFile()) // .isEqualTo("__fake__.py"); assertThat(violation10.getSeverity()) // .isEqualTo(WARN); assertThat(violation11.getMessage()) // .isEqualTo("test with C"); assertThat(violation11.getFile()) // .isEqualTo("__fake__.py"); assertThat(violation11.getSeverity()) // .isEqualTo(INFO); assertThat(violation16.getMessage()) // .isEqualTo("expected 2 blank lines, found 1"); assertThat(violation16.getFile()) // .isEqualTo("python/project/file.py");
violationsLogger.log( INFO, violation.getReporter() + " " + violation.getSeverity() + " " + violation.getRule() + " " + changedFile.get().getFilename() + " " + violation.getStartLine() + " " + violation.getSource()); commentsProvider.createSingleFileComment( changedFile.get(), violation.getStartLine(), singleFileCommentContent);
@Test public void testThatSeverityAndRulenumberFromMisraTakesPrecedence() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/pclint/.*\\.txt$") // .inFolder(rootFolder) // .findAll(PCLINT) // .violations(); Violation violation = actual.get(1); assertThat(violation.getRule()).isEqualTo("MISRA 2012 Rule 10.4, mandatory"); assertThat(violation.getSeverity()).isEqualTo(ERROR); violation = actual.get(2); assertThat(violation.getRule()).isEqualTo("MISRA 2012 Rule 1.3, required"); assertThat(violation.getSeverity()).isEqualTo(WARN); violation = actual.get(7); assertThat(violation.getRule()).isEqualTo("MISRA 2012 Rule 10.1, advisory"); assertThat(violation.getSeverity()).isEqualTo(INFO); assertThat(violation.getMessage()) .isEqualTo("Bad type (Error <a href=\"/userContent/LintMsgRef.html#48\">48</a>)"); } }
@Override public List<Violation> parseReportOutput(final String string) throws Exception { List<Violation> violations = new ArrayList<>(); List<List<String>> partsPerLine = getLines(string, "(w|e):([^:]*)[^\\d]+?(\\d+?)[^\\d]+?(\\d+?)[^:]+?:(.*)"); for (List<String> parts : partsPerLine) { String severity = parts.get(1).trim(); String filename = parts.get(2).trim(); Integer line = parseInt(parts.get(3)); Integer column = parseInt(parts.get(4)); String message = parts.get(5).trim(); violations.add( // violationBuilder() // .setParser(KOTLINGRADLE) // .setStartLine(line) // .setColumn(column) // .setFile(filename) // .setSeverity(toSeverity(severity)) // .setMessage(message) // .build() // ); } return violations; }
@Test public void testThatPHPViolationsCanBeParsedIfNoSource() { final List<Violation> actual = violationsApi() // .withPattern(".*/checkstyle/checkstyle-no-source\\.xml$") // .inFolder(rootFolder) // .findAll(CHECKSTYLE) // .withReporter("PHP") // .violations(); assertThat(actual) // .hasSize(1); assertThat(actual.get(0).getMessage()) // .isEqualTo("Must have at least one statement."); assertThat(actual.get(0).getReporter()) // .isEqualTo("PHP"); } }
public List<Violation> getViolationsInChangeset( final File file, final String from, final String to) throws Exception { final DiffsPerFile diffs = ViolationsGitRepo.diff(file, from, to); final List<Violation> filtered = new ArrayList<>(); for (final Violation candidate : violations) { final Optional<String> patchStringOpt = diffs.findPatchString(candidate.getFile()); if (patchStringOpt.isPresent()) { final String patchString = patchStringOpt.get(); final Integer violatedLine = candidate.getStartLine(); final Optional<Integer> lineOpt = PatchParser.findLineInDiff(patchString, violatedLine); if (lineOpt.isPresent()) { filtered.add(candidate); } } } return filtered; } }
@Override public int compare(Violation o1, Violation o2) { return Integer.compare(o1.getSeverity().ordinal(), o2.getSeverity().ordinal()); } });
@Test public void testThatFilePathsAreAlwaysFronSlashes() { final Violation violation = violationBuilder() // .setParser(CHECKSTYLE) // .setFile("c:\\path\\to\\file.xml") // .setMessage("message") // .setSeverity(ERROR) // .setStartLine(1) // .build(); assertThat(violation.getFile()) // .isEqualTo("c:/path/to/file.xml"); }
private Map<String, Set<Violation>> getViolationsPerReporter( final Iterable<Violation> violations) { final Map<String, Set<Violation>> violationsPerReporter = new TreeMap<>(); for (final Violation violation : violations) { final Set<Violation> perReporter = getOrCreate(violationsPerReporter, violation.getReporter()); perReporter.add(violation); } return violationsPerReporter; }
public static List<Violation> filterRule(final List<Violation> all, final String rule) { final List<Violation> filtered = new ArrayList<>(); for (final Violation v : all) { if (v.getRule().equals(rule)) { filtered.add(v); } } return filtered; }
@Test public void testThatViolationsCanBeParsedExample1() { String rootFolder = getRootFolder(); List<Violation> actual = violationsApi() // .withPattern(".*/cppcheck/example1\\.xml$") // .inFolder(rootFolder) // .findAll(CPPCHECK) // .violations(); Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .isEqualTo("Variable 'it' is reassigned a value before the old one has been used."); Violation violation1 = actual.get(1); assertThat(violation1.getMessage()) // .isEqualTo("Variable 'it' is reassigned a value before the old one has been used."); Violation violation2 = actual.get(2); assertThat(violation2.getMessage()) // .isEqualTo("Condition 'rc' is always true"); Violation violation3 = actual.get(3); assertThat(violation3.getMessage()) // .isEqualTo("Condition 'rc' is always true. Assignment 'rc=true', assigned value is 1"); } }