Skip to content

Commit

Permalink
GCC, ARM GCC and Doxygen #38
Browse files Browse the repository at this point in the history
  • Loading branch information
tomasbjerre committed Jul 4, 2018
1 parent 26ad423 commit 0626473
Show file tree
Hide file tree
Showing 10 changed files with 190 additions and 26 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,15 @@

Changelog of Violations lib.

## Unreleased
### GitHub [#38](https://github.com/tomasbjerre/violations-lib/issues/38) gcc, ARM-Gcc and Doxygen

**GCC, ARM GCC and Doxygen**


[af962b40cf5f533](https://github.com/tomasbjerre/violations-lib/commit/af962b40cf5f533) Tomas Bjerre *2018-07-04 17:36:45*


## 1.56
### No issue

Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,9 @@ It supports:
* [_PHPCS_](https://github.com/squizlabs/PHP_CodeSniffer) with `phpcs api.php --report=checkstyle`.
* [_CLang_](https://clang-analyzer.llvm.org/)
* [_RubyCop_](http://rubocop.readthedocs.io/en/latest/formatters/) with `rubycop -f clang file.rb`
* [_GCC_](https://gcc.gnu.org/)
* [_ARM-GCC_](https://developer.arm.com/open-source/gnu-toolchain/gnu-rm)
* [_Doxygen_](https://www.stack.nl/~dimitri/doxygen/)
* [_CodeNarc_](http://codenarc.sourceforge.net/)
* [_CPD_](http://pmd.sourceforge.net/pmd-4.3.0/cpd.html)
* [_CPPLint_](https://github.com/theandrewdavis/cpplint)
Expand Down
25 changes: 14 additions & 11 deletions src/main/java/se/bjurr/violations/lib/parsers/CLangParser.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,25 @@
public class CLangParser implements ViolationsParser {

@Override
public List<Violation> parseReportOutput(String reportContent) throws Exception {
List<Violation> violations = new ArrayList<>();
List<List<String>> partsPerLine =
getLines(reportContent, "^([^:]+?):(\\d*):(\\d*?):([^:]*?)?: (.*)$");
for (List<String> parts : partsPerLine) {
String fileName = parts.get(1);
public List<Violation> parseReportOutput(final String reportContent) throws Exception {
final List<Violation> violations = new ArrayList<>();
final List<List<String>> partsPerLine =
getLines(reportContent, "^([^:]+?):(\\d*):((\\d*?):)?([^:]*?)?: (.*)$");
for (final List<String> parts : partsPerLine) {
final String fileName = parts.get(1);
Integer lineNumber = 0;
if (!parts.get(2).isEmpty()) {
lineNumber = parseInt(parts.get(2));
}
Integer columnNumber = 0;
if (!parts.get(3).isEmpty()) {
columnNumber = parseInt(parts.get(3));
if (parts.get(3) != null
&& !parts.get(3).isEmpty()
&& parts.get(4) != null
&& !parts.get(4).isEmpty()) {
columnNumber = parseInt(parts.get(4));
}
String severity = parts.get(4);
String message = parts.get(5);
final String severity = parts.get(5);
final String message = parts.get(6);
violations.add( //
violationBuilder() //
.setParser(CLANG) //
Expand All @@ -47,7 +50,7 @@ public List<Violation> parseReportOutput(String reportContent) throws Exception
return violations;
}

public SEVERITY toSeverity(String severity) {
public SEVERITY toSeverity(final String severity) {
if (isNullOrEmpty(severity)) {
return INFO;
}
Expand Down
41 changes: 41 additions & 0 deletions src/test/java/se/bjurr/violations/lib/ArmGccTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package se.bjurr.violations.lib;

import static org.assertj.core.api.Assertions.assertThat;
import static se.bjurr.violations.lib.TestUtils.getRootFolder;
import static se.bjurr.violations.lib.ViolationsApi.violationsApi;
import static se.bjurr.violations.lib.model.SEVERITY.WARN;
import static se.bjurr.violations.lib.reports.Parser.CLANG;

import java.util.List;
import org.junit.Test;
import se.bjurr.violations.lib.model.Violation;

public class ArmGccTest {

@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);
}
}
33 changes: 18 additions & 15 deletions src/test/java/se/bjurr/violations/lib/CLangTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -28,26 +28,28 @@ public void testThatViolationsCanBeParsed() {
assertThat(actual) //
.hasSize(4);

assertThat(actual.get(0).getMessage()) //
final Violation violation0 = actual.get(0);
assertThat(violation0.getMessage()) //
.isEqualTo("'test.h' file not found");
assertThat(actual.get(0).getFile()) //
assertThat(violation0.getFile()) //
.isEqualTo("./test.h");
assertThat(actual.get(0).getSeverity()) //
assertThat(violation0.getSeverity()) //
.isEqualTo(ERROR);
assertThat(actual.get(0).getRule()) //
assertThat(violation0.getRule()) //
.isEqualTo("");
assertThat(actual.get(0).getStartLine()) //
assertThat(violation0.getStartLine()) //
.isEqualTo(10);

assertThat(actual.get(2).getMessage()) //
final Violation violation2 = actual.get(2);
assertThat(violation2.getMessage()) //
.isEqualTo("Memory is allocated");
assertThat(actual.get(2).getFile()) //
assertThat(violation2.getFile()) //
.isEqualTo("main.cpp");
assertThat(actual.get(2).getSeverity()) //
assertThat(violation2.getSeverity()) //
.isEqualTo(INFO);
assertThat(actual.get(2).getRule()) //
assertThat(violation2.getRule()) //
.isEqualTo("");
assertThat(actual.get(2).getStartLine()) //
assertThat(violation2.getStartLine()) //
.isEqualTo(4);
}

Expand All @@ -65,15 +67,16 @@ public void testThatRubycopViolationsCanBeParsed() {
assertThat(actual) //
.hasSize(4);

assertThat(actual.get(0).getMessage()) //
final Violation violation0 = actual.get(0);
assertThat(violation0.getMessage()) //
.isEqualTo("Use snake_case for method names.");
assertThat(actual.get(0).getFile()) //
assertThat(violation0.getFile()) //
.isEqualTo("test.rb");
assertThat(actual.get(0).getSeverity()) //
assertThat(violation0.getSeverity()) //
.isEqualTo(ERROR);
assertThat(actual.get(0).getRule()) //
assertThat(violation0.getRule()) //
.isEqualTo("");
assertThat(actual.get(0).getStartLine()) //
assertThat(violation0.getStartLine()) //
.isEqualTo(1);

assertThat(actual.get(3).getSeverity()) //
Expand Down
42 changes: 42 additions & 0 deletions src/test/java/se/bjurr/violations/lib/DoxygenTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package se.bjurr.violations.lib;

import static org.assertj.core.api.Assertions.assertThat;
import static se.bjurr.violations.lib.TestUtils.getRootFolder;
import static se.bjurr.violations.lib.ViolationsApi.violationsApi;
import static se.bjurr.violations.lib.model.SEVERITY.WARN;
import static se.bjurr.violations.lib.reports.Parser.CLANG;

import java.util.List;
import org.junit.Test;
import se.bjurr.violations.lib.model.Violation;

public class DoxygenTest {

@Test
public void testThatViolationsCanBeParsed() {
final String rootFolder = getRootFolder();

final List<Violation> actual =
violationsApi() //
.withPattern(".*/doxygen/output.*\\.txt$") //
.inFolder(rootFolder) //
.findAll(CLANG) //
.violations();

assertThat(actual) //
.hasSize(3);

final Violation violation0 = actual.get(0);
assertThat(violation0.getMessage()) //
.isEqualTo(
"argument 'index' of command @param is not found in the argument list of arm_min_q7(q7_t *pSrc, uint32_t blockSize, q7_t *pResult, uint32_t *pIndex)");
assertThat(violation0.getFile()) //
.isEqualTo("./pump/external/specific/arm/cmsis_dsp/StatisticsFunctions/arm_min_q7.c");
assertThat(violation0.getSeverity()) //
.isEqualTo(WARN);
assertThat(violation0.getRule()) //
.isEqualTo("");
assertThat(violation0.getStartLine()) //
.isEqualTo(48);
}
}
53 changes: 53 additions & 0 deletions src/test/java/se/bjurr/violations/lib/GccTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package se.bjurr.violations.lib;

import static org.assertj.core.api.Assertions.assertThat;
import static se.bjurr.violations.lib.TestUtils.getRootFolder;
import static se.bjurr.violations.lib.ViolationsApi.violationsApi;
import static se.bjurr.violations.lib.model.SEVERITY.WARN;
import static se.bjurr.violations.lib.reports.Parser.CLANG;

import java.util.List;
import org.junit.Test;
import se.bjurr.violations.lib.model.Violation;

public class GccTest {

@Test
public void testThatViolationsCanBeParsed() {
final String rootFolder = getRootFolder();

final List<Violation> actual =
violationsApi() //
.withPattern(".*/gcc/output.*\\.txt$") //
.inFolder(rootFolder) //
.findAll(CLANG) //
.violations();

assertThat(actual) //
.hasSize(2);

final Violation violation0 = actual.get(0);
assertThat(violation0.getMessage()) //
.isEqualTo("comparison between signed and unsigned integer expressions [-Wsign-compare]");
assertThat(violation0.getFile()) //
.isEqualTo("../../../pump/source/util/FormattedDate.cpp");
assertThat(violation0.getSeverity()) //
.isEqualTo(WARN);
assertThat(violation0.getRule()) //
.isEqualTo("");
assertThat(violation0.getStartLine()) //
.isEqualTo(82);

final Violation violation1 = actual.get(1);
assertThat(violation1.getMessage()) //
.isEqualTo("variable 'exceedingDuration' set but not used [-Wunused-but-set-variable]");
assertThat(violation1.getFile()) //
.isEqualTo("../../../pump/source/util/profile/profile_function_overlay.cpp");
assertThat(violation1.getSeverity()) //
.isEqualTo(WARN);
assertThat(violation1.getRule()) //
.isEqualTo("");
assertThat(violation1.getStartLine()) //
.isEqualTo(112);
}
}
4 changes: 4 additions & 0 deletions src/test/resources/arm-gcc/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
../../external/specific/arm/cmsis/arm_math.h:5774:14: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
../../external/generic/boost/boost/type_traits/intrinsics.hpp:321:0: warning: "BOOST_HAS_TRIVIAL_DESTRUCTOR" redefined
../../external/generic/boost/boost/type_traits/intrinsics.hpp:128:0: note: this is the location of the previous definition
../../source/startup/controller/DebugConsole.c:49:5: error: 'dmax' undeclared (first use in this function)
4 changes: 4 additions & 0 deletions src/test/resources/doxygen/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
./pump/external/specific/arm/cmsis_dsp/StatisticsFunctions/arm_min_q7.c:48: warning: argument 'index' of command @param is not found in the argument list of arm_min_q7(q7_t *pSrc, uint32_t blockSize, q7_t *pResult, uint32_t *pIndex)
./pump/external/specific/arm/stm32f4xx/libinc/stm32f4xx_flash.h:354: warning: The following parameters of FLASH_ITConfig(uint32_t FLASH_IT, FunctionalState NewState) are not documented:
parameter 'NewState'
./pump/external/specific/arm/stm32f4xx/libsrc/stm32f4xx_gpio.c:518: warning: End of list marker found without any preceding list items
2 changes: 2 additions & 0 deletions src/test/resources/gcc/output.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
../../../pump/source/util/FormattedDate.cpp:82:44: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
../../../pump/source/util/profile/profile_function_overlay.cpp:112:25: warning: variable 'exceedingDuration' set but not used [-Wunused-but-set-variable]

0 comments on commit 0626473

Please sign in to comment.