aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
Diffstat (limited to 'plugins')
-rw-r--r--plugins/scalastyle/Scalastyle.scala80
-rw-r--r--plugins/scalastyle/build/build.scala12
-rw-r--r--plugins/scalastyle/resources/scalastyle-config.xml141
3 files changed, 233 insertions, 0 deletions
diff --git a/plugins/scalastyle/Scalastyle.scala b/plugins/scalastyle/Scalastyle.scala
new file mode 100644
index 0000000..112d45f
--- /dev/null
+++ b/plugins/scalastyle/Scalastyle.scala
@@ -0,0 +1,80 @@
+package cbt
+
+import java.io.File
+import java.util.Date
+import scala.io.Codec
+import com.typesafe.config.ConfigFactory
+
+import org.scalastyle._
+
+trait Scalastyle extends Plugin {
+ def scalastyle = Scalastyle.apply( lib ).config( Scalastyle.defaultConfig, sourceFiles, getClass.getClassLoader )
+}
+
+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)
+ */
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/plugins/scalastyle/build/build.scala b/plugins/scalastyle/build/build.scala
new file mode 100644
index 0000000..1922942
--- /dev/null
+++ b/plugins/scalastyle/build/build.scala
@@ -0,0 +1,12 @@
+import cbt._
+
+class Build(val context: Context) extends Plugin {
+ private val scalaStyleVersion = "0.8.0"
+
+ override def dependencies = (
+ super.dependencies ++
+ Resolver( mavenCentral ).bind(
+ ScalaDependency( "org.scalastyle", "scalastyle", scalaStyleVersion )
+ )
+ )
+}
diff --git a/plugins/scalastyle/resources/scalastyle-config.xml b/plugins/scalastyle/resources/scalastyle-config.xml
new file mode 100644
index 0000000..e0c56fd
--- /dev/null
+++ b/plugins/scalastyle/resources/scalastyle-config.xml
@@ -0,0 +1,141 @@
+<scalastyle commentFilter="enabled">
+ <name>Scalastyle standard configuration</name>
+ <check level="warning" class="org.scalastyle.file.FileTabChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.file.FileLengthChecker" enabled="true">
+ <parameters>
+ <parameter name="maxFileLength"><![CDATA[800]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.file.HeaderMatchesChecker" enabled="true">
+ <parameters>
+ <parameter name="header"><![CDATA[// Copyright (C) 2011-2012 the original author or authors.
+// See the LICENCE.txt file distributed with this work for additional
+// information regarding copyright ownership.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.SpacesAfterPlusChecker" 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>
+ <parameter name="maxLineLength"><![CDATA[160]]></parameter>
+ <parameter name="tabSize"><![CDATA[4]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.ClassNamesChecker" enabled="true">
+ <parameters>
+ <parameter name="regex"><![CDATA[[A-Z][A-Za-z]*]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.ObjectNamesChecker" enabled="true">
+ <parameters>
+ <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>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.EqualsHashCodeChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.scalariform.IllegalImportsChecker" enabled="true">
+ <parameters>
+ <parameter name="illegalImports"><![CDATA[sun._,java.awt._]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.ParameterNumberChecker" enabled="true">
+ <parameters>
+ <parameter name="maxParameters"><![CDATA[8]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.MagicNumberChecker" enabled="true">
+ <parameters>
+ <parameter name="ignore"><![CDATA[-1,0,1,2,3]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.NoWhitespaceBeforeLeftBracketChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.scalariform.NoWhitespaceAfterLeftBracketChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.scalariform.ReturnChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.scalariform.NullChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.scalariform.NoCloneChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.scalariform.NoFinalizeChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.scalariform.CovariantEqualsChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.scalariform.StructuralTypeChecker" enabled="true"></check>
+ <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">
+ <parameters>
+ <parameter name="maxTypes"><![CDATA[30]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.CyclomaticComplexityChecker" enabled="true">
+ <parameters>
+ <parameter name="maximum"><![CDATA[10]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.UppercaseLChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.scalariform.SimplifyBooleanExpressionChecker" enabled="true"></check>
+ <check level="warning" class="org.scalastyle.scalariform.IfBraceChecker" enabled="true">
+ <parameters>
+ <parameter name="singleLineAllowed"><![CDATA[true]]></parameter>
+ <parameter name="doubleLineAllowed"><![CDATA[false]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.MethodLengthChecker" enabled="true">
+ <parameters>
+ <parameter name="maxLength"><![CDATA[50]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.MethodNamesChecker" enabled="true">
+ <parameters>
+ <parameter name="regex"><![CDATA[^[a-z][A-Za-z0-9]*(_=)?$]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.NumberOfMethodsInTypeChecker" enabled="true">
+ <parameters>
+ <parameter name="maxMethods"><![CDATA[30]]></parameter>
+ </parameters>
+ </check>
+ <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[^[a-z][A-Za-z]*$]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.TodoCommentChecker" enabled="true">
+ <parameters>
+ <parameter name="words"><![CDATA[TODO|FIXME]]></parameter>
+ </parameters>
+ </check>
+</scalastyle>