Skip to content

Commit 44a8a78

Browse files
committed
0.1.10
1 parent 07d4f4c commit 44a8a78

9 files changed

+74
-63
lines changed

README.md

+7-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Add Linter to your project by appending these lines to your `build.sbt`:
77

88
resolvers += "Linter Repository" at "https://hairyfotr.github.io/linteRepo/releases"
99

10-
addCompilerPlugin("com.foursquare.lint" %% "linter" % "0.1.9")
10+
addCompilerPlugin("com.foursquare.lint" %% "linter" % "0.1.10")
1111

1212
There are also snapshot releases published under `"0.1-SNAPSHOT"`.
1313

@@ -47,18 +47,18 @@ Or only specific checks can be enabled using:
4747

4848
If you believe some warnings are false positives, you can ignore them with a code comment:
4949
```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
5151
<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
5353
^
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
5555
```
5656

5757
__Note:__ Please consider reporting false positives so that they can be removed in future versions.
5858

5959
## List of implemented checks
6060

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)
6262

6363
__Note:__ Links currently go to the test for that check.
6464

@@ -277,9 +277,10 @@ Rule lists from other static analysis tools:
277277
* PMD(Java) - http://pmd.sourceforge.net/snapshot/pmd-java/rules/index.html
278278
* Error-prone(Java) - https://code.google.com/p/error-prone/wiki/BugPatterns
279279
* CodeNarc(Groovy) - http://codenarc.sourceforge.net/codenarc-rule-index.html
280+
* Shellcheck(shell) - http://www.shellcheck.net/about.html
280281
* ($)PVS-Studio(C++) - http://www.viva64.com/en/d/
281282
* ($)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/
283284
* Clang(C++/ObjC) - http://clang-analyzer.llvm.org/available_checks.html
284285
* OCLint(C++/ObjC) - http://docs.oclint.org/en/dev/rules/index.html
285286
* ($)Fortify(Java/C++/...) - http://www.hpenterprisesecurity.com/vulncat/en/vulncat/index.html

build.sbt

+12-7
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,25 @@ name := "linter"
22

33
organization := "com.foursquare.lint"
44

5-
//version := "0.1.9"
5+
//version := "0.1.10"
66

77
scalaVersion := "2.10.5"
88

9-
crossScalaVersions <<= scalaVersion { scalaVersion => Seq("2.10.5", "2.11.4") }
9+
crossScalaVersions <<= scalaVersion { scalaVersion => Seq("2.10.5", "2.11.6", "2.12.0-M1") }
1010

1111
resolvers ++= Seq("snapshots", "releases").map(Resolver.sonatypeRepo)
1212

13+
libraryDependencies := {
14+
CrossVersion.partialVersion(scalaVersion.value) match {
15+
case Some((2, scalaMajor)) if scalaMajor <= 11 =>
16+
libraryDependencies.value :+ "org.specs2" %% "specs2" % "2.4" % "test"
17+
case _ =>
18+
libraryDependencies.value // Tests won't work in Scala 2.12
19+
}
20+
}
1321
libraryDependencies ++= Seq(
14-
"org.specs2" %% "specs2" % "2.4" % "test",
15-
"junit" % "junit" % "4.12" % "test",
16-
"com.novocode" % "junit-interface" % "0.11" % "test")
22+
"junit" % "junit" % "4.12" % "test",
23+
"com.novocode" % "junit-interface" % "0.11" % "test")
1724

1825
libraryDependencies <+= scalaVersion { (scalaVersion) =>
1926
"org.scala-lang" % "scala-compiler" % scalaVersion
@@ -28,6 +35,4 @@ libraryDependencies := {
2835
}
2936
}
3037

31-
scalacOptions in console in Compile <+= (packageBin in Compile) map { pluginJar => "-Xplugin:"+pluginJar }
32-
3338
publishTo := Some(Resolver.file("file", new File( "../linteRepo/releases" )) )

project/build.properties

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=0.13.7
1+
sbt.version=0.13.8

project/plugins.sbt

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "0.4.0")
1+
addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "0.7.0")
22

33
addSbtPlugin("de.johoop" % "findbugs4sbt" % "1.3.0")
44

@@ -10,6 +10,6 @@ addSbtPlugin("com.timushev.sbt" % "sbt-updates" % "0.1.8")
1010

1111
//addSbtPlugin("de.johoop" % "jacoco4sbt" % "2.1.6")
1212

13-
//addSbtPlugin("com.sksamuel.scapegoat" %% "sbt-scapegoat" % "0.94.5")
13+
//addSbtPlugin("com.sksamuel.scapegoat" %% "sbt-scapegoat" % "1.0.0")
1414

15-
//addSbtPlugin("org.brianmckenna" % "sbt-wartremover" % "0.11")
15+
//addSbtPlugin("org.brianmckenna" % "sbt-wartremover" % "0.13")

0 commit comments

Comments
 (0)