aboutsummaryrefslogtreecommitdiff
path: root/plugins
diff options
context:
space:
mode:
authorIgor Tsalko <tsalko.igor@gmail.com>2017-03-17 22:41:38 +0300
committerChristopher Vogt <oss.nsp@cvogt.org>2017-04-04 12:52:27 -0400
commit340c7eaabe3c5c416c76bccca07756f52204488a (patch)
tree9194534f72af325de953afee2776da86c73efd3d /plugins
parent439190b6bf46ccb971c0ec708da38d437f2e331d (diff)
downloadcbt-340c7eaabe3c5c416c76bccca07756f52204488a.tar.gz
cbt-340c7eaabe3c5c416c76bccca07756f52204488a.tar.bz2
cbt-340c7eaabe3c5c416c76bccca07756f52204488a.zip
Add Scalastyle plugin
Diffstat (limited to 'plugins')
-rw-r--r--plugins/scalastyle/Scalastyle.scala98
-rw-r--r--plugins/scalastyle/build/build.scala12
-rw-r--r--plugins/scalastyle/scalastyle_config.xml142
3 files changed, 252 insertions, 0 deletions
diff --git a/plugins/scalastyle/Scalastyle.scala b/plugins/scalastyle/Scalastyle.scala
new file mode 100644
index 0000000..0a4da32
--- /dev/null
+++ b/plugins/scalastyle/Scalastyle.scala
@@ -0,0 +1,98 @@
+package cbt
+
+import java.io.File
+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}
+
+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 _ => ()
+ }
+ }
+}
+
+
+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)
+ }
+ 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
new file mode 100644
index 0000000..da6849f
--- /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/scalastyle_config.xml b/plugins/scalastyle/scalastyle_config.xml
new file mode 100644
index 0000000..eb3c2a7
--- /dev/null
+++ b/plugins/scalastyle/scalastyle_config.xml
@@ -0,0 +1,142 @@
+<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"></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.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>
+ </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>
+ <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">
+ <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>
+ </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">
+ <parameters>
+ <parameter name="allowed"><![CDATA[2]]></parameter>
+ <parameter name="ignoreRegex"><![CDATA[^""$]]></parameter>
+ </parameters>
+ </check>
+ <check level="warning" class="org.scalastyle.scalariform.ImportGroupingChecker" enabled="true"></check>
+</scalastyle> \ No newline at end of file