private Map<String, Set<Violation>> getViolationsPerFile(final Iterable<Violation> violations) { final Map<String, Set<Violation>> violationsPerFile = new TreeMap<>(); for (final Violation violation : violations) { final Set<Violation> perReporter = getOrCreate(violationsPerFile, violation.getFile()); perReporter.add(violation); } return violationsPerFile; }
/** * When creating comment, the call should use the file as it is specified by the comments * provider. Not the one specified by the {@link Violation}. The one in the {@link Violation} may * not be recognized. <br> * <br> * Here we make a guess on which file in the {@link CommentsProvider} to use. */ static Optional<ChangedFile> findChangedFile( final List<ChangedFile> files, final Violation violation) { for (final ChangedFile providerFile : files) { String violationFile = violation.getFile(); String fileFile = providerFile.getFilename(); if (violationFile.endsWith(fileFile) || fileFile.endsWith(violationFile)) { return ofNullable(providerFile); } } return empty(); } }
public ViolationData(final Violation violation) { super(violation); messageEscaped = escapeHTML(violation.getMessage()); final String[] fileParts = violation.getFile().split("\\/"); fileName = fileParts[fileParts.length - 1]; }
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; } }
@Test public void testThatGoVetViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/golint/govet\\.txt$") // .inFolder(rootFolder) // .findAll(GOLINT) // .violations(); assertThat(actual) // .hasSize(1); assertThat(actual.get(0).getMessage()) // .isEqualTo("this is a message"); assertThat(actual.get(0).getFile()) // .isEqualTo("my_file.go"); assertThat(actual.get(0).getSeverity()) // .isEqualTo(INFO); assertThat(actual.get(0).getStartLine()) // .isEqualTo(46); } }
@Test public void testThatViolationsCanBeParsed() { String rootFolder = getRootFolder(); List<Violation> actual = violationsApi() // .withPattern(".*/pitest/.*\\.xml$") // .inFolder(rootFolder) // .findAll(PITEST) // .violations(); assertThat(actual) // .hasSize(25); assertThat(actual.get(0).getFile()) // .isEqualTo("se/bjurr/violations/lib/example/CopyOfMyClass.java"); assertThat(actual.get(0).getMessage()) // .isEqualTo( "NO_COVERAGE, org.pitest.mutationtest.engine.gregor.mutators.ReturnValsMutator, (Ljava/lang/Object;)Z"); assertThat(actual.get(0).getStartLine()) // .isEqualTo(17); assertThat(actual.get(0).getEndLine()) // .isEqualTo(17); assertThat(actual.get(0).getSeverity()) // .isEqualTo(WARN); } }
@Test public void testThatViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/gendarme/.*\\.xml$") // .inFolder(rootFolder) // .findAll(GENDARME) // .violations(); assertThat(actual) // .hasSize(28); assertThat(actual.get(0).getMessage()) // .startsWith("This me"); assertThat(actual.get(0).getFile()) // .isEqualTo("c:/Dev/src/hudson/Hudson.Domain/Dog.cs"); assertThat(actual.get(0).getSeverity()) // .isEqualTo(INFO); assertThat(actual.get(0).getRule()) // .isEqualTo("MethodCanBeMadeStaticRule"); assertThat(actual.get(0).getStartLine()) // .isEqualTo(10); assertThat(actual.get(0).getEndLine()) // .isEqualTo(10); assertThat(actual.get(5).getMessage()) // .startsWith("A constructor ca"); }
@Test public void testThatViolationsCanBeParsed() { String rootFolder = getRootFolder(); List<Violation> actual = violationsApi() // .withPattern(".*/jshint/.*\\.xml$") // .inFolder(rootFolder) // .findAll(JSHINT) // .violations(); assertThat(actual) // .hasSize(6); assertThat(actual.get(0).getFile()) // .isEqualTo("../../../web/js-file.js"); assertThat(actual.get(0).getMessage()) // .startsWith("Use") // .doesNotContain("CDATA"); assertThat(actual.get(0).getStartLine()) // .isEqualTo(4); assertThat(actual.get(0).getEndLine()) // .isEqualTo(4); assertThat(actual.get(0).getSeverity()) // .isEqualTo(WARN); } }
@Test public void testThatViolationsCanBeParsedEmptySourceFolder() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/codenarc/CodeNarcXmlReport\\.xml$") // .inFolder(rootFolder) // .findAll(CODENARC) // .violations(); final Violation violation0 = actual.get(0); assertThat(violation0.getFile()) // .isEqualTo("grails-app/controllers/LoginController.groovy"); } }
@Test public void testThatViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/arm-gcc/output.*\\.txt$") // .inFolder(rootFolder) // .findAll(CLANG) // .violations(); assertThat(actual) // .hasSize(4); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .isEqualTo("comparison between signed and unsigned integer expressions [-Wsign-compare]"); assertThat(violation0.getFile()) // .isEqualTo("../../external/specific/arm/cmsis/arm_math.h"); assertThat(violation0.getSeverity()) // .isEqualTo(WARN); assertThat(violation0.getRule()) // .isEqualTo(""); assertThat(violation0.getStartLine()) // .isEqualTo(5774); } }
@Test public void testThatViolationsCanBeParsed2() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/codenarc/SampleCodeNarc.*\\.xml$") // .inFolder(rootFolder) // .findAll(CODENARC) // .violations(); assertThat(actual) // .hasSize(79); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .isEqualTo( "Violations are triggered when an excessive set of consecutive statements all reference the same variable. This can be made more readable by using a with or identity block."); assertThat(violation0.getFile()) // .isEqualTo("src/test/groovy/org/codenarc/rule/AbstractAstVisitorRuleTest.groovy"); assertThat(violation0.getSeverity()) // .isEqualTo(INFO); assertThat(violation0.getRule()) // .isEqualTo("UnnecessaryObjectReferences"); assertThat(violation0.getStartLine()) // .isEqualTo(184); assertThat(violation0.getEndLine()) // .isEqualTo(184); }
@Test public void testThatViolationsCanBeParsed2() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*cpplint-result\\.xml$") // .inFolder(rootFolder) // .findAll(CPPLINT) // .violations(); assertThat(actual) // .hasSize(1); final Violation violation = actual.get(0); assertThat(violation.getMessage()) // .isEqualTo("Using C-style cast. Use reinterpret_cast<uint8_t *>(...) instead"); assertThat(violation.getFile()) // .isEqualTo("pump/src/hal/stm32f4xx/devices/spi/spi_unit0_com.c"); assertThat(violation.getSeverity()) // .isEqualTo(WARN); assertThat(violation.getRule()) // .isEqualTo("readability/casting"); assertThat(violation.getStartLine()) // .isEqualTo(737); assertThat(violation.getEndLine()) // .isEqualTo(737); } }
@Test public void testThatViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/pylint/.*\\.txt$") // .inFolder(rootFolder) // .findAll(PYLINT) // .violations(); assertThat(actual) // .hasSize(136); Violation violation = actual.get(0); assertThat(violation.getFile()) // .isEqualTo("marshmallow/schema.py"); assertThat(violation.getStartLine()) // .isEqualTo(190); assertThat(violation.getMessage()) // .isEqualTo("Wrong continued indentation (add 1 space)."); assertThat(violation.getSeverity()) // .isEqualTo(INFO); assertThat(violation.getRule()) // .isEqualTo("C0330(bad-continuation)"); } }
@Test public void testThatViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/kotlingradle/.*\\.txt") // .inFolder(rootFolder) // .findAll(KOTLINGRADLE) // .violations(); assertThat(actual) // .hasSize(3); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .isEqualTo( "Elvis operator (?:) always returns the left operand of non-nullable type String"); assertThat(violation0.getFile()) // .isEqualTo("/Users/scottkennedy/project/src/main/java/com/example/Test.kt"); assertThat(violation0.getSeverity()) // .isEqualTo(WARN); assertThat(violation0.getRule()) // .isEqualTo(""); assertThat(violation0.getParser()) // .isEqualTo(KOTLINGRADLE); } }
@Test public void testThatViolationsCanBeParsedMaven() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/googleErrorProne/googleErrorProneMaven\\.log$") // .inFolder(rootFolder) // .findAll(GOOGLEERRORPRONE) // .violations(); assertThat(actual) // .hasSize(1); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .endsWith("row new Exception();'?"); assertThat(violation0.getFile()) // .isEqualTo("../examples/maven/error_prone_should_flag/src/main/java/Main.java"); assertThat(violation0.getSeverity()) // .isEqualTo(ERROR); assertThat(violation0.getRule()) // .isEqualTo("DeadException"); assertThat(violation0.getStartLine()) // .isEqualTo(20); }
@Test public void testThatViolationsCanBeParsedCsvDelta() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/pmd/csv-delta\\.xml$") // .inFolder(rootFolder) // .findAll(PMD) // .violations(); assertThat(actual) // .hasSize(5); final Violation violationZero = actual.get(0); assertThat(violationZero.getFile()) // .isEqualTo("src/CustomTableClass.java"); assertThat(violationZero.getMessage()) // .startsWith("Description") // .doesNotContain("CDATA"); assertThat(violationZero.getStartLine()) // .isEqualTo(1); assertThat(violationZero.getEndLine()) // .isEqualTo(1); assertThat(violationZero.getRule()) // .isEqualTo("RULE1"); assertThat(violationZero.getSeverity()) // .isEqualTo(WARN); }
@Test public void testThatPHPMDViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/pmd/phpmd\\.xml$") // .inFolder(rootFolder) // .findAll(PMD) // .violations(); assertThat(actual) // .hasSize(2); final Violation violationZero = actual.get(0); assertThat(violationZero.getFile()) // .isEqualTo("/home/bjerre/workspace/pull-request-notifier-for-stash/api.php"); assertThat(violationZero.getMessage()) // .startsWith("Avoid unused"); } }
@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"); }