diff options
author | Igor Tsalko <tsalko.igor@gmail.com> | 2017-03-17 22:41:38 +0300 |
---|---|---|
committer | Christopher Vogt <oss.nsp@cvogt.org> | 2017-04-04 12:52:27 -0400 |
commit | 340c7eaabe3c5c416c76bccca07756f52204488a (patch) | |
tree | 9194534f72af325de953afee2776da86c73efd3d /plugins | |
parent | 439190b6bf46ccb971c0ec708da38d437f2e331d (diff) | |
download | cbt-340c7eaabe3c5c416c76bccca07756f52204488a.tar.gz cbt-340c7eaabe3c5c416c76bccca07756f52204488a.tar.bz2 cbt-340c7eaabe3c5c416c76bccca07756f52204488a.zip |
Add Scalastyle plugin
Diffstat (limited to 'plugins')
-rw-r--r-- | plugins/scalastyle/Scalastyle.scala | 98 | ||||
-rw-r--r-- | plugins/scalastyle/build/build.scala | 12 | ||||
-rw-r--r-- | plugins/scalastyle/scalastyle_config.xml | 142 |
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 |