diff --git a/.scalafix.conf b/.scalafix.conf index 1ccc2301d9..d796fa597e 100644 --- a/.scalafix.conf +++ b/.scalafix.conf @@ -14,3 +14,9 @@ ignored-files = [ "FlowZipWithSpec.scala", "FlowZipWithIndexSpec.scala" ] + +//ignored pacakges +ignored-packages = [ + "doc", + "jdoc" +] diff --git a/build.sbt b/build.sbt index e49d15c0f3..7da4f9d6db 100644 --- a/build.sbt +++ b/build.sbt @@ -4,9 +4,8 @@ enablePlugins(UnidocRoot, TimeStampede, UnidocWithPrValidation, NoPublish, Copyr ScalafixIgnoreFilePlugin) disablePlugins(MimaPlugin) addCommandAlias( - name ="fix", + name ="fixall", value = ";scalafixEnable;compile:scalafix;test:scalafix;multi-jvm:scalafix;test:compile") - import com.typesafe.sbt.SbtMultiJvm.MultiJvmKeys.MultiJvm import com.typesafe.tools.mima.plugin.MimaPlugin import spray.boilerplate.BoilerplatePlugin @@ -57,7 +56,7 @@ lazy val root = Project( .settings(unidocRootIgnoreProjects := (CrossVersion.partialVersion(scalaVersion.value) match { case Some((2, n)) if n == 11 ⇒ aggregatedProjects // ignore all, don't unidoc when scalaVersion is 2.11 - case _ ⇒ Seq(remoteTests, benchJmh, protobuf, akkaScalaNightly, docs) + case _ ⇒ Seq(remoteTests, benchJmh, protobuf, akkaScalaNightly, docs) }) ) .settings( diff --git a/project/ScalafixForMultiNodeScalaTestPlugin.scala b/project/ScalafixForMultiNodePlugin.scala similarity index 54% rename from project/ScalafixForMultiNodeScalaTestPlugin.scala rename to project/ScalafixForMultiNodePlugin.scala index 2c1db64873..7f83f4b064 100644 --- a/project/ScalafixForMultiNodeScalaTestPlugin.scala +++ b/project/ScalafixForMultiNodePlugin.scala @@ -5,14 +5,14 @@ package akka import com.typesafe.sbt.MultiJvmPlugin -import sbt.{AutoPlugin, Def, PluginTrigger, Plugins, Setting, inConfig} +import sbt.{AutoPlugin, Def, PluginTrigger, Plugins, ScalafixSupport, Setting, inConfig} import scalafix.sbt.ScalafixPlugin.autoImport.scalafixConfigSettings -object ScalafixForMultiNodeScalaTestPlugin extends AutoPlugin with ScalafixIgnoreFileSupport { +object ScalafixForMultiNodePlugin extends AutoPlugin with ScalafixSupport { override def trigger: PluginTrigger = allRequirements - override def requires: Plugins = MultiNodeScalaTest - + override def requires: Plugins = MultiNode + import MultiJvmPlugin.autoImport._ lazy val scalafixIgnoredSetting: Seq[Setting[_]] = Seq( @@ -20,5 +20,9 @@ object ScalafixForMultiNodeScalaTestPlugin extends AutoPlugin with ScalafixIgnor ) override def projectSettings: Seq[Def.Setting[_]] = - Seq(MultiJvm).flatMap(c => inConfig(c)(scalafixConfigSettings(c))) ++ scalafixIgnoredSetting + Seq(MultiJvm).flatMap(c => inConfig(c)(scalafixConfigSettings(c))) ++ + scalafixIgnoredSetting ++ Seq( + updateProjectCommands( + alias = "fix", + value = ";scalafixEnable;compile:scalafix;test:scalafix;multi-jvm:scalafix;test:compile")) } diff --git a/project/ScalafixIgnoreFilePlugin.scala b/project/ScalafixIgnoreFilePlugin.scala index a05362f4f4..4aa40e4eb2 100644 --- a/project/ScalafixIgnoreFilePlugin.scala +++ b/project/ScalafixIgnoreFilePlugin.scala @@ -4,9 +4,9 @@ package akka import sbt.plugins.JvmPlugin -import sbt.{AutoPlugin, PluginTrigger, Plugins} +import sbt.{AutoPlugin, PluginTrigger, Plugins, ScalafixSupport} -object ScalafixIgnoreFilePlugin extends AutoPlugin with ScalafixIgnoreFileSupport { +object ScalafixIgnoreFilePlugin extends AutoPlugin with ScalafixSupport { override def trigger: PluginTrigger = allRequirements override def requires: Plugins = JvmPlugin @@ -15,5 +15,8 @@ object ScalafixIgnoreFilePlugin extends AutoPlugin with ScalafixIgnoreFileSuppor ignore(Test) ) - override def projectSettings: Seq[Def.Setting[_]] = scalafixIgnoredSetting + override def projectSettings: Seq[Def.Setting[_]] = scalafixIgnoredSetting ++ Seq( + addProjectCommandsIfAbsent( + alias = "fix", + value = ";scalafixEnable;compile:scalafix;test:scalafix;test:compile")) } diff --git a/project/ScalafixIgnoreFileSupport.scala b/project/ScalafixIgnoreFileSupport.scala deleted file mode 100644 index b4263dd2ac..0000000000 --- a/project/ScalafixIgnoreFileSupport.scala +++ /dev/null @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2018 Lightbend Inc. - */ -package akka - -import com.typesafe.config.ConfigFactory -import sbt.Keys.unmanagedSources -import sbt.{ConfigKey, file} -import sbt.internal.sbtscalafix.Compat - -trait ScalafixIgnoreFileSupport { - import scalafix.sbt.ScalafixPlugin.autoImport._ - protected def ignore(configKey:ConfigKey) = { - lazy val stdoutLogger = Compat.ConsoleLogger(System.out) - - lazy val ignoredFiles:Set[String] = { - import scala.collection.JavaConverters._ - val config = ConfigFactory.parseFile(file(".scalafix.conf")) - stdoutLogger.info("ignored-files from .scalaifx.config:" + config.origin().filename()) - config - .getStringList("ignored-files") - .asScala - .toSet - } - unmanagedSources.in(configKey, scalafix) := - unmanagedSources.in(configKey, scalafix).value - .filterNot(file => { - val ignored = ignoredFiles(file.getName) - if (ignored){ - stdoutLogger.info("scalafix ignored file:"+file.toURI) - } - ignored - }) - } -} diff --git a/project/ScalafixSupport.scala b/project/ScalafixSupport.scala new file mode 100644 index 0000000000..1ab01a28b2 --- /dev/null +++ b/project/ScalafixSupport.scala @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2018 Lightbend Inc. + */ +package sbt + +import java.io.File + +import com.typesafe.config.ConfigFactory +import sbt.Keys.unmanagedSources +import sbt.internal.sbtscalafix.Compat + +trait ScalafixSupport { + + import scalafix.sbt.ScalafixPlugin.autoImport._ + + protected def ignore(configKey: ConfigKey): Def.Setting[Task[Seq[File]]] = { + lazy val stdoutLogger = Compat.ConsoleLogger(System.out) + + lazy val ignoredFiles: Set[String] = { + import scala.collection.JavaConverters._ + val config = ConfigFactory.parseFile(file(".scalafix.conf")) + stdoutLogger.info(s"Loading ignored-files from .scalaifx.config:[${config.origin().url().toURI.getPath}]") + config + .getStringList("ignored-files") + .asScala + .toSet + } + + lazy val ignoredPackages: Set[String] = { + import scala.collection.JavaConverters._ + val config = ConfigFactory.parseFile(file(".scalafix.conf")) + stdoutLogger.info(s"Loading ignored-packages from .scalaifx.config:[${config.origin().url().toURI.getPath}]") + config + .getStringList("ignored-packages") + .asScala + .toSet + } + + unmanagedSources.in(configKey, scalafix) := + unmanagedSources.in(configKey, scalafix).value + .filterNot(file => { + val ignoredByFile = ignoredFiles(file.getName) + if (ignoredByFile) { + stdoutLogger.info(s"scalafix ignored file: ${file.toURI} with file name: ${file.getName}") + } + val ignoredByPackages = ignoredPackages.exists(pkg => { + getPackageName(file.toURI.toString) match { + case Some(packageName) => + val ignored = packageName.startsWith(pkg) + if (ignored) { + stdoutLogger.info(s"scalafix ignored file with pkg:$pkg file:[${file.toPath}] ") + } + ignored + case None => false + } + }) + ignoredByFile || ignoredByPackages + }) + } + + private def getPackageName(fileName: String): Option[String] = { + def getPackageName0(fileType: String): String = { + fileName.split(File.separatorChar) + .dropWhile(part ⇒ part != fileType) + .drop(1) + .dropRight(1) + .mkString(".") + } + + fileName.split('.').lastOption match { + case Some(fileType) ⇒ + fileType match { + case "java" ⇒ + Option(getPackageName0("java")) + case "scala" ⇒ + Option(getPackageName0("scala")) + case _ ⇒ None + } + case None ⇒ None + } + } + + import sbt.Keys._ + + def addProjectCommandsIfAbsent(alias: String, value: String): Def.Setting[Seq[Command]] = { + commands := { + val currentCommands = commands.value.collect { + case command: SimpleCommand => command.name + }.toSet + val isPresent = currentCommands(alias) + if (isPresent) + commands.value + else + commands.value :+ BasicCommands.newAlias( + name = alias, + value = value + ) + } + } + + def updateProjectCommands(alias: String, value: String): Def.Setting[Seq[Command]] = { + commands := { + commands.value.filterNot({ + case command: SimpleCommand => command.name == alias + case _ => false + }) :+ BasicCommands.newAlias( + name = alias, + value = value + ) + } + } +}