diff options
author | Christopher Vogt <oss.nsp@cvogt.org> | 2017-04-04 19:05:52 -0400 |
---|---|---|
committer | Christopher Vogt <oss.nsp@cvogt.org> | 2017-04-04 19:07:39 -0400 |
commit | fced15a610eaee443ae83be0cdb78975b1f19bbb (patch) | |
tree | 0b93fc663824a04ab360cbc61a52a3c414145fd4 /plugins | |
parent | 340c7eaabe3c5c416c76bccca07756f52204488a (diff) | |
download | cbt-fced15a610eaee443ae83be0cdb78975b1f19bbb.tar.gz cbt-fced15a610eaee443ae83be0cdb78975b1f19bbb.tar.bz2 cbt-fced15a610eaee443ae83be0cdb78975b1f19bbb.zip |
Cleanup Scalastyle plugin
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/scalastyle/Scalastyle.scala | 150 | ||||
-rw-r--r-- | plugins/scalastyle/build/build.scala | 6 | ||||
-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> |