diff --git a/akka-actor-tests/src/test/scala/akka/actor/ExtensionSpec.scala b/akka-actor-tests/src/test/scala/akka/actor/ExtensionSpec.scala index 26e0a1dd6a..381ff0aa7d 100644 --- a/akka-actor-tests/src/test/scala/akka/actor/ExtensionSpec.scala +++ b/akka-actor-tests/src/test/scala/akka/actor/ExtensionSpec.scala @@ -98,9 +98,8 @@ class ExtensionSpec extends WordSpec with Matchers { """ akka.extensions = ["akka.actor.MissingExtension"] """)) - EventFilter.error("While trying to load extension [akka.actor.MissingExtension], skipping...").intercept()(system) + EventFilter.error("While trying to load extension [akka.actor.MissingExtension], skipping.").intercept(())(system) shutdownActorSystem(system) - } "allow for auto-loading of library-extensions" in { diff --git a/akka-actor-typed-tests/src/test/scala/akka/actor/typed/AskSpec.scala b/akka-actor-typed-tests/src/test/scala/akka/actor/typed/AskSpec.scala index 72ad8fbef1..6b153e0e9f 100644 --- a/akka-actor-typed-tests/src/test/scala/akka/actor/typed/AskSpec.scala +++ b/akka-actor-typed-tests/src/test/scala/akka/actor/typed/AskSpec.scala @@ -44,7 +44,7 @@ class AskSpec extends ScalaTestWithActorTestKit(""" foo.replyTo ! "foo" Behaviors.same case (_, Stop(r)) ⇒ - r ! () + r ! (()) Behaviors.stopped } diff --git a/akka-stream-tests/src/test/scala/akka/stream/io/TcpSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/io/TcpSpec.scala index 6649422a77..dbad5f6dc4 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/io/TcpSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/io/TcpSpec.scala @@ -434,7 +434,7 @@ class TcpSpec extends StreamSpec(""" val path = akka.io.Tcp(system2).getManager.path / "selectors" / s"$$a" / "*" // Some more verbose info when #21839 happens again - system2.actorSelection(path).tell(Identify(), probe.ref) + system2.actorSelection(path).tell(Identify(()), probe.ref) try { probe.expectMsgType[ActorIdentity].ref.get } catch { diff --git a/project/AkkaDisciplinePlugin.scala b/project/AkkaDisciplinePlugin.scala new file mode 100644 index 0000000000..517d6ea887 --- /dev/null +++ b/project/AkkaDisciplinePlugin.scala @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2019 Lightbend Inc. + */ + +package akka + +import sbt._ +import Keys.{scalacOptions, _} +import sbt.plugins.JvmPlugin + +/** + * Initial tests found: + * `akka-actor` 151 errors with `-Xfatal-warnings`, 6 without the flag + */ +object AkkaDisciplinePlugin extends AutoPlugin with ScalafixSupport { + + import scoverage.ScoverageKeys.{coverageFailOnMinimum, coverageHighlighting, coverageMinimum} + import scalafix.sbt.ScalafixPlugin + + override def trigger: PluginTrigger = allRequirements + override def requires: Plugins = JvmPlugin && ScalafixPlugin + + override lazy val projectSettings = disciplineSettings + + lazy val scalaFixSettings = Seq( + Compile / scalacOptions += "-Yrangepos") + + lazy val scoverageSettings = Seq( + coverageMinimum := 70, + coverageFailOnMinimum := false, + coverageHighlighting := { + import sbt.librarymanagement.{ SemanticSelector, VersionNumber } + !VersionNumber(scalaVersion.value).matchesSemVer(SemanticSelector("<=2.11.1")) + }) + + lazy val disciplineSettings = + scalaFixSettings ++ + scoverageSettings ++ Seq( + Compile / scalacOptions ++= disciplineScalacOptions, + Compile / scalacOptions --= undisciplineScalacOptions, + Compile / console / scalacOptions --= Seq("-deprecation", "-Xfatal-warnings", "-Xlint", "-Ywarn-unused:imports"), + Compile / scalacOptions --= (CrossVersion.partialVersion(scalaVersion.value) match { + case Some((2, 13)) => + Seq("-Ywarn-inaccessible", "-Ywarn-infer-any", "-Ywarn-nullary-override", "-Ywarn-nullary-unit", "-Ypartial-unification", "-Yno-adapted-args") + case Some((2, 12)) => + Nil + case Some((2, 11)) => + Seq("-Ywarn-extra-implicit", "-Ywarn-unused:_") + case _ => + Nil + })) + + /** + * Remain visibly filtered for future code quality work and removing. + */ + val undisciplineScalacOptions = Seq( + "-Ywarn-value-discard", + "-Ywarn-numeric-widen", + "-Yno-adapted-args", + "-Xfatal-warnings") + + /** Optimistic, this is desired over time. + * -Xlint and -Ywarn-unused: are included in commonScalaOptions. + * If eventually all modules use this plugin, we could migrate them here. + */ + val disciplineScalacOptions = Seq( + // start: must currently remove, version regardless + "-Xfatal-warnings", + "-Ywarn-value-discard", + "-Yno-adapted-args", + "-Ywarn-numeric-widen", + // end + "-Xfuture", + "-Ywarn-dead-code", + "-Ywarn-inaccessible", + "-Ywarn-infer-any", + "-Ywarn-nullary-override", + "-Ywarn-nullary-unit", + "-Ywarn-unused:_", + "-Ypartial-unification", + "-Ywarn-extra-implicit", + "-Ywarn-numeric-widen") + +} diff --git a/project/plugins.sbt b/project/plugins.sbt index 2ad675f5be..e83c36605f 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -20,6 +20,7 @@ addSbtPlugin("com.lightbend" % "sbt-whitesource" % "0.1.13") addSbtPlugin("com.typesafe.sbt" % "sbt-git" % "1.0.0") addSbtPlugin("de.heikoseeberger" % "sbt-header" % "5.0.0") // for maintenance of copyright file header addSbtPlugin("com.hpe.sbt" % "sbt-pull-request-validator" % "1.0.0") +addSbtPlugin("org.scoverage" % "sbt-scoverage" % "1.6.0-M5") // used for @unidoc directive libraryDependencies += "io.github.classgraph" % "classgraph" % "4.4.12"