@@ -7,7 +7,7 @@ Add Linter to your project by appending these lines to your `build.sbt`:
7
7
8
8
resolvers += "Linter Repository" at "https://hairyfotr.github.io/linteRepo/releases"
9
9
10
- addCompilerPlugin("com.foursquare.lint" %% "linter" % "0.1.9 ")
10
+ addCompilerPlugin("com.foursquare.lint" %% "linter" % "0.1.10 ")
11
11
12
12
There are also snapshot releases published under ` "0.1-SNAPSHOT" ` .
13
13
@@ -47,18 +47,18 @@ Or only specific checks can be enabled using:
47
47
48
48
If you believe some warnings are false positives, you can ignore them with a code comment:
49
49
``` scala
50
- scala> val x = math.pow(5 , 1 / 3d ) + 1 / 0 // linter:disable: UseCbrt+ DivideByZero // ignores UseCbrt and DivideByZero
50
+ scala> val x = math.pow(5 , 1 / 3d ) + 1 / 0 // linter:ignore UseCbrt, DivideByZero // ignores UseCbrt and DivideByZero
51
51
<console >: 8 : warning : Integer division detected in an expression assigned to a floating point variable.
52
- math.pow(5 , 1 / 3d ) + 1 / 0 // linter:disable: UseCbrt+ DivideByZero // ignores UseCbrt and DivideByZero
52
+ math.pow(5 , 1 / 3d ) + 1 / 0 // linter:ignore UseCbrt, DivideByZero // ignores UseCbrt and DivideByZero
53
53
^
54
- scala> val x = math.pow(5 , 1 / 3d ) + 1 / 0 // linter:disable // ignores all warnings
54
+ scala> val x = math.pow(5 , 1 / 3d ) + 1 / 0 // linter:ignore // ignores all warnings
55
55
```
56
56
57
57
__ Note:__ Please consider reporting false positives so that they can be removed in future versions.
58
58
59
59
## List of implemented checks
60
60
61
- [UnextendedSealedTrait](src/test/scala/LinterPluginTest.scala#L1497), [UnlikelyEquality](src/test/scala/LinterPluginTest.scala#L1573), [UseLog1p](src/test/scala/LinterPluginTest.scala#L884), [UseLog10](src/test/scala/LinterPluginTest.scala#L246), [UseExpm1](src/test/scala/LinterPluginTest.scala#L930), [UseHypot](src/test/scala/LinterPluginTest.scala#L193), [UseCbrt](src/test/scala/LinterPluginTest.scala#L215), [UseSqrt](src/test/scala/LinterPluginTest.scala#L225), [UseExp](src/test/scala/LinterPluginTest.scala#L235), [UseAbsNotSqrtSquare](src/test/scala/LinterPluginTest.scala#L1012), [UseIsNanNotSelfComparison](src/test/scala/LinterPluginTest.scala#L1448), [UseIsNanNotNanComparison](src/test/scala/LinterPluginTest.scala#L1467), [UseSignum](src/test/scala/LinterPluginTest.scala#L1284), BigDecimalNumberFormat, BigDecimalPrecisionLoss, [ReflexiveAssignment](src/test/scala/LinterPluginTest.scala#L1125), [CloseSourceFile](src/test/scala/LinterPluginTest.scala#L718), [JavaConverters](src/test/scala/LinterPluginTest.scala#L729), [ContainsTypeMismatch](src/test/scala/LinterPluginTest.scala#L735), [NumberInstanceOf](src/test/scala/LinterPluginTest.scala#L172), [PatternMatchConstant](src/test/scala/LinterPluginTest.scala#L841), PreferIfToBooleanMatch, [IdenticalCaseBodies](src/test/scala/LinterPluginTest.scala#L795), [IdenticalCaseConditions](src/test/scala/LinterPluginTest.scala#L1349), ReflexiveComparison, [YodaConditions](src/test/scala/LinterPluginTest.scala#L1208), [UseConditionDirectly](src/test/scala/LinterPluginTest.scala#L746), [UseIfExpression](src/test/scala/LinterPluginTest.scala#L130), [UnnecessaryElseBranch](src/test/scala/LinterPluginTest.scala#L140), [DuplicateIfBranches](src/test/scala/LinterPluginTest.scala#L771), [IdenticalIfElseCondition](src/test/scala/LinterPluginTest.scala#L1151), [MergeNestedIfs](src/test/scala/LinterPluginTest.scala#L1231), [VariableAssignedUnusedValue](src/test/scala/LinterPluginTest.scala#L1381), [MalformedSwap](src/test/scala/LinterPluginTest.scala#L1327), IdenticalIfCondition, [IdenticalStatements](src/test/scala/LinterPluginTest.scala#L1430), IndexingWithNegativeNumber, OptionOfOption, [UndesirableTypeInference](src/test/scala/LinterPluginTest.scala#L1361), AssigningOptionToNull, WrapNullWithOption, AvoidOptionStringSize, AvoidOptionCollectionSize, UseGetOrElseOnOption, UseOptionOrNull, UseOptionGetOrElse, UseExistsOnOption, [UseFindNotFilterHead](src/test/scala/LinterPluginTest.scala#L393), [UseContainsNotExistsEquals](src/test/scala/LinterPluginTest.scala#L624), [UseQuantifierFuncNotFold](src/test/scala/LinterPluginTest.scala#L643), [UseFuncNotReduce](src/test/scala/LinterPluginTest.scala#L678), [UseFuncNotFold](src/test/scala/LinterPluginTest.scala#L659), [MergeMaps](src/test/scala/LinterPluginTest.scala#L1026), [FuncFirstThenMap](src/test/scala/LinterPluginTest.scala#L1035), [FilterFirstThenSort](src/test/scala/LinterPluginTest.scala#L1050), [UseMinOrMaxNotSort](src/test/scala/LinterPluginTest.scala#L1064), [UseMapNotFlatMap](src/test/scala/LinterPluginTest.scala#L1078), [UseFilterNotFlatMap](src/test/scala/LinterPluginTest.scala#L1089), AvoidOptionMethod, [TransformNotMap](src/test/scala/LinterPluginTest.scala#L485), [DuplicateKeyInMap](src/test/scala/LinterPluginTest.scala#L968), [InefficientUseOfListSize](src/test/scala/LinterPluginTest.scala#L988), [OnceEvaluatedStatementsInBlockReturningFunction](src/test/scala/LinterPluginTest.scala#L1523), [IntDivisionAssignedToFloat](src/test/scala/LinterPluginTest.scala#L1531), [UseFlattenNotFilterOption](src/test/scala/LinterPluginTest.scala#L981), [UseExistsNotFilterEmpty](src/test/scala/LinterPluginTest.scala#L525), [UseCountNotFilterLength](src/test/scala/LinterPluginTest.scala#L551), [UseExistsNotCountCompare](src/test/scala/LinterPluginTest.scala#L581), [PassPartialFunctionDirectly](src/test/scala/LinterPluginTest.scala#L1512), [UnitImplicitOrdering](src/test/scala/LinterPluginTest.scala#L271), [RegexWarning](src/test/scala/LinterPluginTest.scala#L402), [InvariantCondition](src/test/scala/LinterPluginTest.scala#L439), DecomposingEmptyCollection, InvariantExtrema, [UnnecessaryMethodCall](src/test/scala/LinterPluginTest.scala#L1002), ProducesEmptyCollection, OperationAlwaysProducesZero, ModuloByOne, DivideByOne, DivideByZero, ZeroDivideBy, [UseUntilNotToMinusOne](src/test/scala/LinterPluginTest.scala#L1481), [InvalidParamToRandomNextInt](src/test/scala/LinterPluginTest.scala#L1544), UnusedForLoopIteratorValue, StringMultiplicationByNonPositive, LikelyIndexOutOfBounds, UnnecessaryReturn, InvariantReturn, [UnusedParameter](src/test/scala/LinterPluginTest.scala#L861), [InvalidStringFormat](src/test/scala/LinterPluginTest.scala#L330), InvalidStringConversion, UnnecessaryStringNonEmpty, UnnecessaryStringIsEmpty, [PossibleLossOfPrecision](src/test/scala/LinterPluginTest.scala#L256), [UnsafeAbs](src/test/scala/LinterPluginTest.scala#L283), [TypeToType](src/test/scala/LinterPluginTest.scala#L299), [EmptyStringInterpolator](src/test/scala/LinterPluginTest.scala#L347), [UnlikelyToString](src/test/scala/LinterPluginTest.scala#L358), [UnthrownException](src/test/scala/LinterPluginTest.scala#L368), [SuspiciousMatches](src/test/scala/LinterPluginTest.scala#L377), [IfDoWhile](src/test/scala/LinterPluginTest.scala#L457)
61
+ [UnextendedSealedTrait](src/test/scala/LinterPluginTest.scala#L1500), [UnlikelyEquality](src/test/scala/LinterPluginTest.scala#L1576), [UseLog1p](src/test/scala/LinterPluginTest.scala#L887), [UseLog10](src/test/scala/LinterPluginTest.scala#L246), [UseExpm1](src/test/scala/LinterPluginTest.scala#L933), [UseHypot](src/test/scala/LinterPluginTest.scala#L193), [UseCbrt](src/test/scala/LinterPluginTest.scala#L215), [UseSqrt](src/test/scala/LinterPluginTest.scala#L225), [UseExp](src/test/scala/LinterPluginTest.scala#L235), [UseAbsNotSqrtSquare](src/test/scala/LinterPluginTest.scala#L1015), [UseIsNanNotSelfComparison](src/test/scala/LinterPluginTest.scala#L1451), [UseIsNanNotNanComparison](src/test/scala/LinterPluginTest.scala#L1470), [UseSignum](src/test/scala/LinterPluginTest.scala#L1287), BigDecimalNumberFormat, BigDecimalPrecisionLoss, [ReflexiveAssignment](src/test/scala/LinterPluginTest.scala#L1128), [CloseSourceFile](src/test/scala/LinterPluginTest.scala#L721), [JavaConverters](src/test/scala/LinterPluginTest.scala#L732), [ContainsTypeMismatch](src/test/scala/LinterPluginTest.scala#L738), [NumberInstanceOf](src/test/scala/LinterPluginTest.scala#L172), [PatternMatchConstant](src/test/scala/LinterPluginTest.scala#L844), PreferIfToBooleanMatch, [IdenticalCaseBodies](src/test/scala/LinterPluginTest.scala#L798), [IdenticalCaseConditions](src/test/scala/LinterPluginTest.scala#L1352), ReflexiveComparison, [YodaConditions](src/test/scala/LinterPluginTest.scala#L1211), [UseConditionDirectly](src/test/scala/LinterPluginTest.scala#L749), [UseIfExpression](src/test/scala/LinterPluginTest.scala#L130), [UnnecessaryElseBranch](src/test/scala/LinterPluginTest.scala#L140), [DuplicateIfBranches](src/test/scala/LinterPluginTest.scala#L774), [IdenticalIfElseCondition](src/test/scala/LinterPluginTest.scala#L1154), [MergeNestedIfs](src/test/scala/LinterPluginTest.scala#L1234), [VariableAssignedUnusedValue](src/test/scala/LinterPluginTest.scala#L1384), [MalformedSwap](src/test/scala/LinterPluginTest.scala#L1330), IdenticalIfCondition, [IdenticalStatements](src/test/scala/LinterPluginTest.scala#L1433), IndexingWithNegativeNumber, OptionOfOption, [UndesirableTypeInference](src/test/scala/LinterPluginTest.scala#L1364), AssigningOptionToNull, WrapNullWithOption, AvoidOptionStringSize, AvoidOptionCollectionSize, UseGetOrElseOnOption, UseOptionOrNull, UseOptionGetOrElse, UseExistsOnOption, [UseFindNotFilterHead](src/test/scala/LinterPluginTest.scala#L393), [UseContainsNotExistsEquals](src/test/scala/LinterPluginTest.scala#L624), [UseQuantifierFuncNotFold](src/test/scala/LinterPluginTest.scala#L646), [UseFuncNotReduce](src/test/scala/LinterPluginTest.scala#L681), [UseFuncNotFold](src/test/scala/LinterPluginTest.scala#L662), [MergeMaps](src/test/scala/LinterPluginTest.scala#L1029), [FuncFirstThenMap](src/test/scala/LinterPluginTest.scala#L1038), [FilterFirstThenSort](src/test/scala/LinterPluginTest.scala#L1053), [UseMinOrMaxNotSort](src/test/scala/LinterPluginTest.scala#L1067), [UseMapNotFlatMap](src/test/scala/LinterPluginTest.scala#L1081), [UseFilterNotFlatMap](src/test/scala/LinterPluginTest.scala#L1092), AvoidOptionMethod, [TransformNotMap](src/test/scala/LinterPluginTest.scala#L485), [DuplicateKeyInMap](src/test/scala/LinterPluginTest.scala#L971), [InefficientUseOfListSize](src/test/scala/LinterPluginTest.scala#L991), [OnceEvaluatedStatementsInBlockReturningFunction](src/test/scala/LinterPluginTest.scala#L1526), [IntDivisionAssignedToFloat](src/test/scala/LinterPluginTest.scala#L1534), [UseFlattenNotFilterOption](src/test/scala/LinterPluginTest.scala#L984), [UseExistsNotFilterEmpty](src/test/scala/LinterPluginTest.scala#L525), [UseCountNotFilterLength](src/test/scala/LinterPluginTest.scala#L551), [UseExistsNotCountCompare](src/test/scala/LinterPluginTest.scala#L581), [PassPartialFunctionDirectly](src/test/scala/LinterPluginTest.scala#L1515), [UnitImplicitOrdering](src/test/scala/LinterPluginTest.scala#L271), [RegexWarning](src/test/scala/LinterPluginTest.scala#L402), [InvariantCondition](src/test/scala/LinterPluginTest.scala#L439), DecomposingEmptyCollection, InvariantExtrema, [UnnecessaryMethodCall](src/test/scala/LinterPluginTest.scala#L1005), ProducesEmptyCollection, OperationAlwaysProducesZero, ModuloByOne, DivideByOne, DivideByZero, ZeroDivideBy, [UseUntilNotToMinusOne](src/test/scala/LinterPluginTest.scala#L1484), [InvalidParamToRandomNextInt](src/test/scala/LinterPluginTest.scala#L1547), UnusedForLoopIteratorValue, StringMultiplicationByNonPositive, LikelyIndexOutOfBounds, UnnecessaryReturn, InvariantReturn, [UnusedParameter](src/test/scala/LinterPluginTest.scala#L864), [InvalidStringFormat](src/test/scala/LinterPluginTest.scala#L330), InvalidStringConversion, UnnecessaryStringNonEmpty, UnnecessaryStringIsEmpty, [PossibleLossOfPrecision](src/test/scala/LinterPluginTest.scala#L256), [UnsafeAbs](src/test/scala/LinterPluginTest.scala#L283), [TypeToType](src/test/scala/LinterPluginTest.scala#L299), [EmptyStringInterpolator](src/test/scala/LinterPluginTest.scala#L347), [UnlikelyToString](src/test/scala/LinterPluginTest.scala#L358), [UnthrownException](src/test/scala/LinterPluginTest.scala#L368), [SuspiciousMatches](src/test/scala/LinterPluginTest.scala#L377), [IfDoWhile](src/test/scala/LinterPluginTest.scala#L457)
62
62
63
63
__ Note:__ Links currently go to the test for that check.
64
64
@@ -277,9 +277,10 @@ Rule lists from other static analysis tools:
277
277
* PMD(Java) - http://pmd.sourceforge.net/snapshot/pmd-java/rules/index.html
278
278
* Error-prone(Java) - https://code.google.com/p/error-prone/wiki/BugPatterns
279
279
* CodeNarc(Groovy) - http://codenarc.sourceforge.net/codenarc-rule-index.html
280
+ * Shellcheck(shell) - http://www.shellcheck.net/about.html
280
281
* ($)PVS-Studio(C++) - http://www.viva64.com/en/d/
281
282
* ($)Coverity(C++/Java/...) - http://www.slideshare.net/Coverity/static-analysis-primer-22874326 (6,7)
282
- * CppCheck(C++) - http://sourceforge.net/apps/mediawiki/ cppcheck/index.php?title=Main_Page#Checks
283
+ * CppCheck(C++) - http://sourceforge.net/p/ cppcheck/wiki/ListOfChecks/
283
284
* Clang(C++/ObjC) - http://clang-analyzer.llvm.org/available_checks.html
284
285
* OCLint(C++/ObjC) - http://docs.oclint.org/en/dev/rules/index.html
285
286
* ($)Fortify(Java/C++/...) - http://www.hpenterprisesecurity.com/vulncat/en/vulncat/index.html
0 commit comments