Skip to content

Commit 82a03b1

Browse files
authored
build: enable -Xfatal-warnings for Scala 2 and -Werror for Scala 3 (#1109)
* build: enable -Xfatal-warnings for Scala 2 and -Werror for Scala 3 Motivation: Treating warnings as errors ensures that deprecated API usage and other code quality issues are caught at compile time rather than accumulating. Modification: Add -Xfatal-warnings to Scala 2 scalacOptions and -Werror to Scala 3 scalacOptions in Common.scala. Remove -Wconf:cat=deprecation:s for Scala 3 so deprecation warnings are not silenced. Exclude -Xfatal-warnings from Compile / doc scope to avoid doc generation failures. Result: All compiler warnings are now treated as errors, enforcing higher code quality. Tests: - CI will verify compilation References: None - build configuration improvement * fix: suppress warnings exposed by -Xfatal-warnings/-Werror Remove unused classTag import in HttpMessage.scala. Add -Wconf suppressions for structural type warning (Scala 2), synchronized warning and override-deprecated warning (Scala 3). * fix: resolve all compilation warnings for fatal-warnings build - Remove unused imports (classTag, postfixOps, implicitConversions, Failure/Success/Try) - Add -language:implicitConversions as compiler option - Remove unused expectError method from ConnectionPoolSettingsSpec - Add -Wconf suppressions for: structural types, shadowed names, parameterless method confusion, Unit-valued patterns, infer-Any, overloaded implicit conversions, getClass selection, deprecation, refutable extractors, type specialization, type erasure, unreachable cases, exhaustivity, and suspicious top-level calls * style: apply scalafmt after removing imports * fix: fix docs module -Werror duplicate flag and add more -Wconf suppressions Move -Xfatal-warnings in docs module to Scala 2 only to avoid duplicate -Werror flag in Scala 3. Add suppressions for unused import and dead-code warnings in test modules. * fix: exclude fatal-warnings from http-scalafix-rules module The scala.meta compiler plugin used by scalafix generates warnings (InlineInfoAttribute) that cannot be suppressed via -Wconf. Exclude -Xfatal-warnings and -Werror from this module's scalacOptions.
1 parent f0236b3 commit 82a03b1

25 files changed

Lines changed: 31 additions & 41 deletions

File tree

build.sbt

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,9 @@ lazy val httpScalafixRules =
341341
Project(id = "http-scalafix-rules", base = file("http-scalafix/scalafix-rules"))
342342
.settings(
343343
name := "pekko-http-scalafix-rules",
344-
libraryDependencies += Dependencies.Compile.scalafix)
344+
libraryDependencies += Dependencies.Compile.scalafix,
345+
// scala.meta compiler plugin generates warnings that cannot be suppressed via -Wconf
346+
scalacOptions --= Seq("-Xfatal-warnings", "-Werror"))
345347
.enablePlugins(NoScala3)
346348
.disablePlugins(MimaPlugin) // tooling, no bin compat guaranteed
347349

@@ -400,14 +402,13 @@ lazy val docs = project("docs")
400402
.settings(Dependencies.docs)
401403
.settings(
402404
name := "pekko-http-docs",
403-
scalacOptions ++= Seq(
404-
// Make sure we don't accidentally keep documenting deprecated calls
405-
"-Xfatal-warnings",
406-
// Does not appear to lead to problems
407-
"-Wconf:msg=The outer reference in this type test cannot be checked at run time:s"),
408405
scalacOptions ++= (
409-
if (scalaVersion.value.startsWith("3")) Seq.empty
406+
if (scalaVersion.value.startsWith("3")) Seq(
407+
"-Wconf:msg=The outer reference in this type test cannot be checked at run time:s")
410408
else Seq(
409+
// Make sure we don't accidentally keep documenting deprecated calls
410+
"-Xfatal-warnings",
411+
"-Wconf:msg=The outer reference in this type test cannot be checked at run time:s",
411412
// In docs adding an unused variable can be helpful, for example
412413
// to show its type
413414
"-Xlint:-unused")

http-core/src/main/scala/org/apache/pekko/http/impl/settings/ServerSettingsImpl.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
package org.apache.pekko.http.impl.settings
1515

16-
import scala.language.implicitConversions
1716
import scala.collection.immutable
1817
import scala.concurrent.duration._
1918
import scala.util.Try

http-core/src/main/scala/org/apache/pekko/http/impl/util/JavaMapping.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ private[http] object JavaMapping {
9696
def toScala[J, S](j: J)(implicit mapping: JavaMapping[J, S]): S = mapping.toScala(j)
9797

9898
object Implicits {
99-
import scala.language.implicitConversions
10099

101100
implicit def convertToScala[J](j: J)(implicit mapping: J2SMapping[J]): mapping.S = mapping.toScala(j)
102101
implicit def convertSeqToScala[J](j: Seq[J])(implicit mapping: J2SMapping[J]): immutable.Seq[mapping.S] =

http-core/src/main/scala/org/apache/pekko/http/impl/util/package.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ package org.apache.pekko.http.impl
1515

1616
import java.nio.charset.StandardCharsets
1717

18-
import language.implicitConversions
1918
import scala.concurrent.duration.Duration
2019
import scala.concurrent.{ Await, Future }
2120
import scala.reflect.ClassTag

http-core/src/main/scala/org/apache/pekko/http/javadsl/Http.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ object Http extends ExtensionId[Http] with ExtensionIdProvider {
4949
class Http(system: ExtendedActorSystem) extends pekko.actor.Extension {
5050
import scala.concurrent.ExecutionContext.{ parasitic => ec }
5151

52-
import language.implicitConversions
5352
private implicit def completionStageCovariant[T, U >: T](in: CompletionStage[T]): CompletionStage[U] =
5453
in.asInstanceOf[CompletionStage[U]]
5554

http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/ContentType.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
package org.apache.pekko.http.scaladsl.model
1515

16-
import language.implicitConversions
1716
import org.apache.pekko
1817
import pekko.http.impl.util._
1918
import java.util.Optional

http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/HttpCharset.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
package org.apache.pekko.http.scaladsl.model
1515

1616
import java.lang.{ Iterable => JIterable }
17-
import language.implicitConversions
1817
import scala.collection.immutable
1918
import scala.util.Try
2019
import java.nio.charset.Charset

http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/HttpEntity.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ import java.lang.{ Iterable => JIterable }
1919
import java.util.OptionalLong
2020
import java.util.concurrent.CompletionStage
2121

22-
import scala.language.implicitConversions
2322
import scala.annotation.nowarn
2423
import scala.concurrent.Future
2524
import scala.concurrent.duration._

http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/HttpMessage.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import scala.collection.immutable
2424
import scala.concurrent.{ ExecutionContext, Future }
2525
import scala.concurrent.duration._
2626
import scala.jdk.FutureConverters._
27-
import scala.reflect.{ classTag, ClassTag }
27+
import scala.reflect.ClassTag
2828

2929
import org.apache.pekko
3030
import pekko.Done

http-core/src/main/scala/org/apache/pekko/http/scaladsl/model/MediaRange.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
package org.apache.pekko.http.scaladsl.model
1515

16-
import language.implicitConversions
1716
import java.util
1817
import org.apache.pekko
1918
import pekko.http.impl.util._

0 commit comments

Comments
 (0)