diff --git a/src/main/scala/org/scalastyle/sbt/Plugin.scala b/src/main/scala/org/scalastyle/sbt/Plugin.scala index fbd5234..a4abf49 100644 --- a/src/main/scala/org/scalastyle/sbt/Plugin.scala +++ b/src/main/scala/org/scalastyle/sbt/Plugin.scala @@ -110,7 +110,7 @@ object ScalastylePlugin extends Plugin { scalastyleFailOnError := true, (scalastyleFailOnError in Test) := (scalastyleFailOnError in scalastyle).value, scalastyleSources := Seq((scalaSource in Compile).value), - (scalastyleSources in Test) := Seq((scalaSource in Test).value) + (scalastyleSources in Test) := (scalastyleSources in scalastyle).value ) ++ Project.inConfig(Compile)(rawScalastyleSettings()) ++ Project.inConfig(Test)(rawScalastyleSettings()) @@ -120,8 +120,13 @@ object Tasks { def doScalastyle(args: Seq[String], config: File, configUrl: Option[URL], failOnError: Boolean, scalastyleSources: Seq[File], scalastyleTarget: File, streams: TaskStreams[ScopedKey[_]], refreshHours: Integer, target: File, urlCacheFile: String): Unit = { val logger = streams.log + val quietArg = "q" + val warnErrorArg = "w" + val supportedArgs = Set(quietArg, warnErrorArg) - val quiet = args.exists(_ == "q") + val quiet = args.contains(quietArg) + val warnError = args.contains(warnErrorArg) + println("config=" + config) def onHasErrors(message: String): Unit = { if (failOnError) { @@ -155,15 +160,29 @@ object Tasks { f } + def isInProject(sources: Seq[File])(f: File) = { + val validFile = f.exists() && sources.find(s => f.getAbsolutePath.startsWith(s.getAbsolutePath)).isDefined + if (!validFile) logger.warn(s"File $f does not exist in project") + validFile + } + def doScalastyleWithConfig(config: File): Unit = { val messageConfig = ConfigFactory.load(new ScalastyleChecker().getClass().getClassLoader()) //streams.log.error("messageConfig=" + messageConfig.root().render()) + System.out.println("args=" + args) + System.out.println("scalastyleSources=" + scalastyleSources) + + val filesToProcess: Seq[File] = args.filterNot(supportedArgs.contains).map(file).filter(isInProject(scalastyleSources)) match { + case Nil => scalastyleSources + case files => files + } - val messages = runScalastyle(config, scalastyleSources) + println("filesToProcess=" + filesToProcess) + println("config=" + config) + val messages = runScalastyle(config, filesToProcess) saveToXml(messageConfig, messages, scalastyleTarget.absolutePath) - val warnError = args.exists(_ == "w") val result = printResults(messageConfig, logger, messages, quiet = quiet, warnError = warnError) if (!quiet) { logger.success("created output: %s".format(target)) @@ -188,9 +207,9 @@ object Tasks { getFileFromJar(getClass.getResource("/scalastyle-config.xml"), config.absolutePath, streams.log) } - private[this] def runScalastyle(config: File, scalastyleSources: Seq[File]) = { + private[this] def runScalastyle(config: File, filesToProcess: Seq[File]) = { val configuration = ScalastyleConfiguration.readFromXml(config.absolutePath) - new ScalastyleChecker().checkFiles(configuration, Directory.getFiles(None, scalastyleSources.toList)) + new ScalastyleChecker().checkFiles(configuration, Directory.getFiles(None, filesToProcess)) } private[this] def printResults(config: Config, logger: Logger, messages: List[Message[FileSpec]], quiet: Boolean = false, warnError: Boolean = false): OutputResult = { diff --git a/src/sbt-test/specific-files/directories/build.sbt b/src/sbt-test/specific-files/directories/build.sbt new file mode 100644 index 0000000..bd2c59a --- /dev/null +++ b/src/sbt-test/specific-files/directories/build.sbt @@ -0,0 +1,16 @@ +version := "0.1" + +scalaVersion := "2.10.0" + +val containsMessage = taskKey[Boolean]("contains message") + +containsMessage := { + val search = "File length exceeds" + val filename = "target/scalastyle-result.xml" + val lines = sbt.IO.readLines(file(filename)) + val contains = lines.find(s => s.contains(search)).isDefined + if (contains) { + sys.error("Found " + search + " in " + filename) + } + contains +} diff --git a/src/sbt-test/specific-files/directories/project/build.properties b/src/sbt-test/specific-files/directories/project/build.properties new file mode 100644 index 0000000..0974fce --- /dev/null +++ b/src/sbt-test/specific-files/directories/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.13.0 diff --git a/src/sbt-test/specific-files/directories/project/plugins.sbt b/src/sbt-test/specific-files/directories/project/plugins.sbt new file mode 100644 index 0000000..1061e94 --- /dev/null +++ b/src/sbt-test/specific-files/directories/project/plugins.sbt @@ -0,0 +1,9 @@ +resolvers += "sonatype-snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/" + +{ + val pluginVersion = System.getProperty("plugin.version") + if(pluginVersion == null) + throw new RuntimeException("""|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin) + else addSbtPlugin("org.scalastyle" % "scalastyle-sbt-plugin" % pluginVersion) +} diff --git a/src/sbt-test/specific-files/directories/scalastyle-config.xml b/src/sbt-test/specific-files/directories/scalastyle-config.xml new file mode 100644 index 0000000..bd579b5 --- /dev/null +++ b/src/sbt-test/specific-files/directories/scalastyle-config.xml @@ -0,0 +1,13 @@ + + Scalastyle standard configuration + + + + + + + + + + + diff --git a/src/sbt-test/specific-files/directories/src/main/scala/package1/Example.scala b/src/sbt-test/specific-files/directories/src/main/scala/package1/Example.scala new file mode 100644 index 0000000..b9f72ca --- /dev/null +++ b/src/sbt-test/specific-files/directories/src/main/scala/package1/Example.scala @@ -0,0 +1,5 @@ +class Example { + def hello(): Unit = { + println("hello") + } +} \ No newline at end of file diff --git a/src/sbt-test/specific-files/directories/src/main/scala/package2/hello.scala b/src/sbt-test/specific-files/directories/src/main/scala/package2/hello.scala new file mode 100644 index 0000000..3cb4df3 --- /dev/null +++ b/src/sbt-test/specific-files/directories/src/main/scala/package2/hello.scala @@ -0,0 +1,9 @@ + +object Main extends App { + println("hello") +} + +object foo { + println("hello") +} + diff --git a/src/sbt-test/specific-files/directories/test b/src/sbt-test/specific-files/directories/test new file mode 100644 index 0000000..b8ec223 --- /dev/null +++ b/src/sbt-test/specific-files/directories/test @@ -0,0 +1,4 @@ +# scalastyle on specific files +> clean +> scalastyle src/main/scala/package1 +> containsMessage diff --git a/src/sbt-test/specific-files/files/build.sbt b/src/sbt-test/specific-files/files/build.sbt new file mode 100644 index 0000000..bd2c59a --- /dev/null +++ b/src/sbt-test/specific-files/files/build.sbt @@ -0,0 +1,16 @@ +version := "0.1" + +scalaVersion := "2.10.0" + +val containsMessage = taskKey[Boolean]("contains message") + +containsMessage := { + val search = "File length exceeds" + val filename = "target/scalastyle-result.xml" + val lines = sbt.IO.readLines(file(filename)) + val contains = lines.find(s => s.contains(search)).isDefined + if (contains) { + sys.error("Found " + search + " in " + filename) + } + contains +} diff --git a/src/sbt-test/specific-files/files/project/build.properties b/src/sbt-test/specific-files/files/project/build.properties new file mode 100644 index 0000000..0974fce --- /dev/null +++ b/src/sbt-test/specific-files/files/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.13.0 diff --git a/src/sbt-test/specific-files/files/project/plugins.sbt b/src/sbt-test/specific-files/files/project/plugins.sbt new file mode 100644 index 0000000..1061e94 --- /dev/null +++ b/src/sbt-test/specific-files/files/project/plugins.sbt @@ -0,0 +1,9 @@ +resolvers += "sonatype-snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/" + +{ + val pluginVersion = System.getProperty("plugin.version") + if(pluginVersion == null) + throw new RuntimeException("""|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin) + else addSbtPlugin("org.scalastyle" % "scalastyle-sbt-plugin" % pluginVersion) +} diff --git a/src/sbt-test/specific-files/files/scalastyle-config.xml b/src/sbt-test/specific-files/files/scalastyle-config.xml new file mode 100644 index 0000000..bd579b5 --- /dev/null +++ b/src/sbt-test/specific-files/files/scalastyle-config.xml @@ -0,0 +1,13 @@ + + Scalastyle standard configuration + + + + + + + + + + + diff --git a/src/sbt-test/specific-files/files/src/main/scala/Example.scala b/src/sbt-test/specific-files/files/src/main/scala/Example.scala new file mode 100644 index 0000000..b9f72ca --- /dev/null +++ b/src/sbt-test/specific-files/files/src/main/scala/Example.scala @@ -0,0 +1,5 @@ +class Example { + def hello(): Unit = { + println("hello") + } +} \ No newline at end of file diff --git a/src/sbt-test/specific-files/files/src/main/scala/hello.scala b/src/sbt-test/specific-files/files/src/main/scala/hello.scala new file mode 100644 index 0000000..3cb4df3 --- /dev/null +++ b/src/sbt-test/specific-files/files/src/main/scala/hello.scala @@ -0,0 +1,9 @@ + +object Main extends App { + println("hello") +} + +object foo { + println("hello") +} + diff --git a/src/sbt-test/specific-files/files/test b/src/sbt-test/specific-files/files/test new file mode 100644 index 0000000..a6f292a --- /dev/null +++ b/src/sbt-test/specific-files/files/test @@ -0,0 +1,4 @@ +# scalastyle on specific files +> clean +> scalastyle src/main/scala/Example.scala +> containsMessage diff --git a/src/sbt-test/specific-files/nonexistent-file/build.sbt b/src/sbt-test/specific-files/nonexistent-file/build.sbt new file mode 100644 index 0000000..7a556d5 --- /dev/null +++ b/src/sbt-test/specific-files/nonexistent-file/build.sbt @@ -0,0 +1,16 @@ +version := "0.1" + +scalaVersion := "2.10.0" + +val containsMessage = taskKey[Boolean]("contains message") + +containsMessage := { + val search = "File length exceeds" + val filename = "target/scalastyle-result.xml" + val lines = sbt.IO.readLines(file(filename)) + val contains = lines.find(s => s.contains(search)).isDefined + if (!contains) { + sys.error("Could not find " + search + " in " + filename) + } + contains +} diff --git a/src/sbt-test/specific-files/nonexistent-file/project/build.properties b/src/sbt-test/specific-files/nonexistent-file/project/build.properties new file mode 100644 index 0000000..0974fce --- /dev/null +++ b/src/sbt-test/specific-files/nonexistent-file/project/build.properties @@ -0,0 +1 @@ +sbt.version=0.13.0 diff --git a/src/sbt-test/specific-files/nonexistent-file/project/plugins.sbt b/src/sbt-test/specific-files/nonexistent-file/project/plugins.sbt new file mode 100644 index 0000000..1061e94 --- /dev/null +++ b/src/sbt-test/specific-files/nonexistent-file/project/plugins.sbt @@ -0,0 +1,9 @@ +resolvers += "sonatype-snapshots" at "https://oss.sonatype.org/content/repositories/snapshots/" + +{ + val pluginVersion = System.getProperty("plugin.version") + if(pluginVersion == null) + throw new RuntimeException("""|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin) + else addSbtPlugin("org.scalastyle" % "scalastyle-sbt-plugin" % pluginVersion) +} diff --git a/src/sbt-test/specific-files/nonexistent-file/scalastyle-config.xml b/src/sbt-test/specific-files/nonexistent-file/scalastyle-config.xml new file mode 100644 index 0000000..bd579b5 --- /dev/null +++ b/src/sbt-test/specific-files/nonexistent-file/scalastyle-config.xml @@ -0,0 +1,13 @@ + + Scalastyle standard configuration + + + + + + + + + + + diff --git a/src/sbt-test/specific-files/nonexistent-file/src/main/scala/Example.scala b/src/sbt-test/specific-files/nonexistent-file/src/main/scala/Example.scala new file mode 100644 index 0000000..b9f72ca --- /dev/null +++ b/src/sbt-test/specific-files/nonexistent-file/src/main/scala/Example.scala @@ -0,0 +1,5 @@ +class Example { + def hello(): Unit = { + println("hello") + } +} \ No newline at end of file diff --git a/src/sbt-test/specific-files/nonexistent-file/src/main/scala/hello.scala b/src/sbt-test/specific-files/nonexistent-file/src/main/scala/hello.scala new file mode 100644 index 0000000..3cb4df3 --- /dev/null +++ b/src/sbt-test/specific-files/nonexistent-file/src/main/scala/hello.scala @@ -0,0 +1,9 @@ + +object Main extends App { + println("hello") +} + +object foo { + println("hello") +} + diff --git a/src/sbt-test/specific-files/nonexistent-file/test b/src/sbt-test/specific-files/nonexistent-file/test new file mode 100644 index 0000000..760f84b --- /dev/null +++ b/src/sbt-test/specific-files/nonexistent-file/test @@ -0,0 +1,5 @@ +# scalastyle on specific files +> clean +# simulated typo +> scalastyle src/main/scala/Eaxmple.scala +> containsMessage diff --git a/src/sbt-test/test-config/scalastyle-config/build.sbt b/src/sbt-test/test-config/scalastyle-config/build.sbt index 6104c6f..7ca23da 100644 --- a/src/sbt-test/test-config/scalastyle-config/build.sbt +++ b/src/sbt-test/test-config/scalastyle-config/build.sbt @@ -1,4 +1,4 @@ -(scalastyleConfig in Test) := file("alternative-config.xml") +(scalastyleConfig in Test) := file("gggalternative-config.xml") version := "0.1"