aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorChristopher Vogt <oss.nsp@cvogt.org>2017-04-04 19:05:52 -0400
committerChristopher Vogt <oss.nsp@cvogt.org>2017-04-04 19:07:39 -0400
commitfced15a610eaee443ae83be0cdb78975b1f19bbb (patch)
tree0b93fc663824a04ab360cbc61a52a3c414145fd4 /plugins
parent340c7eaabe3c5c416c76bccca07756f52204488a (diff)
downloadcbt-fced15a610eaee443ae83be0cdb78975b1f19bbb.tar.gz
cbt-fced15a610eaee443ae83be0cdb78975b1f19bbb.tar.bz2
cbt-fced15a610eaee443ae83be0cdb78975b1f19bbb.zip
Cleanup Scalastyle plugin
Diffstat (limited to 'plugins')
-rw-r--r--plugins/scalastyle/Scalastyle.scala150
-rw-r--r--plugins/scalastyle/build/build.scala6
-rw-r--r--plugins/scalastyle/resources/scalastyle-config.xml (renamed from plugins/scalastyle/scalastyle_config.xml)49
3 files changed, 93 insertions, 112 deletions
diff --git a/plugins/scalastyle/Scalastyle.scala b/plugins/scalastyle/Scalastyle.scala
index 0a4da32..112d45f 100644
--- a/plugins/scalastyle/Scalastyle.scala
+++ b/plugins/scalastyle/Scalastyle.scala
@@ -5,94 +5,76 @@ import java.util.Date
import scala.io.Codec
import com.typesafe.config.ConfigFactory
-import org.scalastyle.MainConfig
-import org.scalastyle.Directory
-import org.scalastyle.ScalastyleConfiguration
-import org.scalastyle.ScalastyleChecker
-import org.scalastyle.{XmlOutput, TextOutput}
+import org.scalastyle._
-trait Scalastyle extends BaseBuild {
- def scalastyle = {
- val dirList = List(projectDirectory) map (_.getAbsolutePath)
-
- val pluginHome : String = context.cbtHome.getAbsolutePath + "/plugins/" + "scalastyle"
-
- val result = ScalaStyle(dirList, ScalaStyle.checkConfig(projectDirectory.getAbsolutePath, Some(pluginHome)))
- result match {
- case 1 => println("Error Scalastyle Checking")
- case 2 => println("Config file for ScalaStyle not found")
- case _ => ()
- }
- }
+trait Scalastyle extends Plugin {
+ def scalastyle = Scalastyle.apply( lib ).config( Scalastyle.defaultConfig, sourceFiles, getClass.getClassLoader )
}
-
-object ScalaStyle {
-
- val defaultConfigName : String = "/scalastyle_config.xml"
-
- def userHome = Option( System.getProperty("user.home") )
-
- def checkConfig(directory: String, fallback: Option[String] = userHome) : Option[String] = {
-
- def checkConfigExists(filename: String) : Option[String] = {
- val file = new File(filename)
- if (file.exists()) Some(filename) else None
- }
-
- checkConfigExists(directory + defaultConfigName) orElse (
- fallback flatMap (fdir => checkConfigExists(fdir + defaultConfigName))
- )
- }
-
-
-
- def apply(directories: List[String], configFile: Option[String]) : Int = {
- val exitVal = configFile match {
- case Some(_) => {
- val conf = MainConfig(false).copy(config = configFile, directories = directories)
- if (conf.error) {
- 1
- } else {
- if (execute(conf)) 1 else 0
- }
- }
- case None => {
- 2
- }
- }
-
- exitVal
- }
-
-
- private[this] def now(): Long = new Date().getTime()
-
- private[this] def execute(mc: MainConfig)(implicit codec: Codec): Boolean = {
- val start = now()
- val configuration = ScalastyleConfiguration.readFromXml(mc.config.get)
- val cl = mc.externalJar.flatMap(j => Some(new java.net.URLClassLoader(Array(new java.io.File(j).toURI().toURL()))))
- val messages = new ScalastyleChecker(cl).checkFiles(configuration, Directory.getFiles(mc.inputEncoding, mc.directories.map(new File(_)).toSeq, excludedFiles=mc.excludedFiles))
-
- // scalastyle:off regex
- val config = ConfigFactory.load(cl.getOrElse(this.getClass().getClassLoader()))
- val outputResult = new TextOutput(config, mc.verbose, mc.quiet).output(messages)
- mc.xmlFile match {
- case Some(x) => {
- val encoding = mc.xmlEncoding.getOrElse(codec.charSet).toString
- XmlOutput.save(config, x, encoding, messages)
+object Scalastyle {
+ def readConfigFromXml( file: File ) = ScalastyleConfiguration.readFromXml( file.string )
+ def defaultConfig =
+ ScalastyleConfiguration.readFromXml(
+ Option( getClass.getClassLoader.getResource("scalastyle-config.xml") )
+ .getOrElse( throw new Exception("scalastyle-config.xml not found in resources")
+ ).getPath
+ )
+
+ case class apply( lib: Lib ){
+ /** @param classLoader able to load the Checker classes */
+ case class config(
+ scalastyleConfig: ScalastyleConfiguration,
+ files: Seq[File],
+ classLoader: ClassLoader/*,
+ xmlOutput: Option[File] = None,
+ logLevel: Option[Level] = Some( InfoLevel )*/
+ ){
+ def apply: ExitCode = output( messages )
+
+
+ def messages =
+ new ScalastyleChecker( Some( classLoader ) )
+ .checkFiles( scalastyleConfig, Directory.getFiles( None, files ) )
+
+ def output( messages: List[Message[_]] ) = {
+ val messageHelper = new MessageHelper( ConfigFactory.load( classLoader ) )
+
+ def fileLineColumn( file: FileSpec, line: Option[Int], column: Option[Int] ) =
+ file.name ~ line.map( ":" ~ _.toString ~ column.map( ":" ~ _.toString ).getOrElse( "" ) ).getOrElse("")
+
+ val errors = messages.map(x => x:AnyRef).collect{
+ case s@StyleError(
+ file, cls, key, level, args, line, column, customMessage
+ ) => (
+ fileLineColumn( file, line, column ) ~ ": [" ~ cls.getSimpleName ~ "] "
+ ~ Output.findMessage( messageHelper, key, args, customMessage )
+ )
+ case s@StyleException(file, cls, message, stacktrace, line, column) =>
+ fileLineColumn( file, line, column ) ~ ": " ~ cls.map( "[" ~ _.getSimpleName ~ "] " ).getOrElse( "" ) ~ message ~ "\n" ~ stacktrace
+ }
+
+ if( errors.nonEmpty ){
+ System.err.println(
+ lib.red( "Scalastyle linting errors found\n" ) + errors.mkString("\n")
+ )
+ ExitCode.Failure
+ } else {
+ ExitCode.Success
+ }
+
+ /*
+ xmlOutput.foreach(
+ XmlOutput.save(config, _, encoding, messages)
+ )
+
+ if (!mc.quiet) println("Processed " + outputResult.files + " file(s)")
+ if (!mc.quiet) println("Found " + outputResult.errors + " errors")
+ if (!mc.quiet) println("Found " + outputResult.warnings + " warnings")
+ if (!mc.quiet) println("Finished in " + (now - start) + " ms")
+
+ outputResult.errors > 0 || (mc.warningsaserrors && outputResult.warnings > 0)
+ */
}
- case None =>
}
-
- if (!mc.quiet) println("Processed " + outputResult.files + " file(s)")
- if (!mc.quiet) println("Found " + outputResult.errors + " errors")
- if (!mc.quiet) println("Found " + outputResult.warnings + " warnings")
- if (!mc.quiet) println("Finished in " + (now - start) + " ms")
-
- // scalastyle:on regex
-
- outputResult.errors > 0 || (mc.warningsaserrors && outputResult.warnings > 0)
}
-
} \ No newline at end of file
diff --git a/plugins/scalastyle/build/build.scala b/plugins/scalastyle/build/build.scala
index da6849f..1922942 100644
--- a/plugins/scalastyle/build/build.scala
+++ b/plugins/scalastyle/build/build.scala
@@ -1,12 +1,12 @@
import cbt._
class Build(val context: Context) extends Plugin {
- private val ScalaStyleVersion = "0.8.0"
+ private val scalaStyleVersion = "0.8.0"
override def dependencies = (
- super.dependencies ++
+ super.dependencies ++
Resolver( mavenCentral ).bind(
- ScalaDependency( "org.scalastyle", "scalastyle", ScalaStyleVersion )
+ ScalaDependency( "org.scalastyle", "scalastyle", scalaStyleVersion )
)
)
}
diff --git a/plugins/scalastyle/scalastyle_config.xml b/plugins/scalastyle/resources/scalastyle-config.xml
index eb3c2a7..e0c56fd 100644
--- a/plugins/scalastyle/scalastyle_config.xml
+++ b/plugins/scalastyle/resources/scalastyle-config.xml
@@ -26,7 +26,11 @@
</parameters>
</check>
<check level="warning" class="org.scalastyle.scalariform.SpacesAfterPlusChecker" enabled="true"></check>
- <check level="warning" class="org.scalastyle.file.WhitespaceEndOfLineChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.file.WhitespaceEndOfLineChecker" enabled="true">
+ <parameters>
+ <parameter name="ignoreWhitespaceLines"><![CDATA[false]]></parameter>
+ </parameters>
+ </check>
<check level="warning" class="org.scalastyle.scalariform.SpacesBeforePlusChecker" enabled="true"></check>
<check level="warning" class="org.scalastyle.file.FileLineLengthChecker" enabled="true">
<parameters>
@@ -44,6 +48,11 @@
<parameter name="regex"><![CDATA[[A-Z][A-Za-z]*]]></parameter>
</parameters>
</check>
+ <check level="warning" class="org.scalastyle.scalariform.PackageNamesChecker" enabled="true">
+ <parameters>
+ <parameter name="regex"><![CDATA[^[a-z][A-Za-z]*$]]></parameter>
+ </parameters>
+ </check>
<check level="warning" class="org.scalastyle.scalariform.PackageObjectNamesChecker" enabled="true">
<parameters>
<parameter name="regex"><![CDATA[^[a-z][A-Za-z]*$]]></parameter>
@@ -76,6 +85,7 @@
<check level="warning" class="org.scalastyle.file.RegexChecker" enabled="true">
<parameters>
<parameter name="regex"><![CDATA[println]]></parameter>
+ <parameter name="line"><![CDATA[false]]></parameter>
</parameters>
</check>
<check level="warning" class="org.scalastyle.scalariform.NumberOfTypesChecker" enabled="true">
@@ -103,7 +113,7 @@
</check>
<check level="warning" class="org.scalastyle.scalariform.MethodNamesChecker" enabled="true">
<parameters>
- <parameter name="regex"><![CDATA[^[a-z][A-Za-z0-9]*$]]></parameter>
+ <parameter name="regex"><![CDATA[^[a-z][A-Za-z0-9]*(_=)?$]]></parameter>
</parameters>
</check>
<check level="warning" class="org.scalastyle.scalariform.NumberOfMethodsInTypeChecker" enabled="true">
@@ -111,32 +121,21 @@
<parameter name="maxMethods"><![CDATA[30]]></parameter>
</parameters>
</check>
- <check level="warning" class="org.scalastyle.scalariform.PublicMethodsHaveTypeChecker" enabled="true"></check>
- <check level="warning" class="org.scalastyle.file.NewLineAtEofChecker" enabled="true"></check>
- <check level="warning" class="org.scalastyle.file.NoNewLineAtEofChecker" enabled="false"></check>
- <check level="warning" class="org.scalastyle.scalariform.WhileChecker" enabled="false"></check>
- <check level="warning" class="org.scalastyle.scalariform.VarFieldChecker" enabled="false"></check>
- <check level="warning" class="org.scalastyle.scalariform.VarLocalChecker" enabled="false"></check>
- <check level="warning" class="org.scalastyle.scalariform.RedundantIfChecker" enabled="false"></check>
- <check level="warning" class="org.scalastyle.scalariform.TokenChecker" enabled="false">
+ <check level="warning" class="org.scalastyle.scalariform.PublicMethodsHaveTypeChecker" enabled="true"/>
+ <check level="warning" class="org.scalastyle.file.NewLineAtEofChecker" enabled="true"/>
+ <check level="warning" class="org.scalastyle.scalariform.NotImplementedErrorUsage" enabled="true" />
+ <check level="warning" class="org.scalastyle.scalariform.BlockImportChecker" enabled="false"/>
+ <check level="warning" class="org.scalastyle.scalariform.ProcedureDefinitionChecker" enabled="true"/>
+ <check level="warning" class="org.scalastyle.scalariform.ForBraceChecker" enabled="true"/>
+ <check level="warning" class="org.scalastyle.scalariform.SpaceAfterCommentStartChecker" enabled="true"/>
+ <check level="warning" class="org.scalastyle.scalariform.FieldNamesChecker" enabled="true">
<parameters>
- <parameter name="regex"><![CDATA[println]]></parameter>
- </parameters>
- </check>
- <check level="warning" class="org.scalastyle.scalariform.DeprecatedJavaChecker" enabled="true"></check>
- <check level="warning" class="org.scalastyle.scalariform.EmptyClassChecker" enabled="true"></check>
- <check level="warning" class="org.scalastyle.scalariform.ClassTypeParameterChecker" enabled="true">
- <parameters>
- <parameter name="regex"><![CDATA[^[A-Z_]$]]></parameter>
+ <parameter name="regex"><![CDATA[^[a-z][A-Za-z]*$]]></parameter>
</parameters>
</check>
- <check level="warning" class="org.scalastyle.scalariform.UnderscoreImportChecker" enabled="true"></check>
- <check level="warning" class="org.scalastyle.scalariform.LowercasePatternMatchChecker" enabled="true"></check>
- <check level="warning" class="org.scalastyle.scalariform.MultipleStringLiteralsChecker" enabled="true">
+ <check level="warning" class="org.scalastyle.scalariform.TodoCommentChecker" enabled="true">
<parameters>
- <parameter name="allowed"><![CDATA[2]]></parameter>
- <parameter name="ignoreRegex"><![CDATA[^""$]]></parameter>
+ <parameter name="words"><![CDATA[TODO|FIXME]]></parameter>
</parameters>
</check>
- <check level="warning" class="org.scalastyle.scalariform.ImportGroupingChecker" enabled="true"></check>
-</scalastyle> \ No newline at end of file
+</scalastyle>