diff options
| author | Jack Koenig | 2020-08-13 00:14:54 -0700 |
|---|---|---|
| committer | GitHub | 2020-08-13 07:14:54 +0000 |
| commit | 57f4ca4dfb5cf3853af4c3bb0f8caacddd182a9c (patch) | |
| tree | d6d7360a356edc6117ac7333da9629be365fe521 /src/main | |
| parent | 698a9f314b206f1694859ab8044c052086c0cd39 (diff) | |
Deprecate support for Scala 2.11 (#1842)
* Deprecate support for Scala 2.11
Printed as warning in transform, can be suppressed via CLI
* Place version deprecation message in object
Refactor CheckScalaVersion to place the deprecation message inside the
companion object. This lets the object be reused in other places, like
in tests.
Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>
* Check Scala 2.11 deprecation messages in tests
Fix FirrtlMainSpec to check that the Scala 2.11 deprecation message
added by the CheckScalaVersion transform shows up on stdout, but only
if tests are running under 2.11.
Signed-off-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>
Co-authored-by: Schuyler Eldridge <schuyler.eldridge@ibm.com>
Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Diffstat (limited to 'src/main')
| -rw-r--r-- | src/main/scala/firrtl/passes/CheckChirrtl.scala | 3 | ||||
| -rw-r--r-- | src/main/scala/firrtl/stage/FirrtlAnnotations.scala | 15 | ||||
| -rw-r--r-- | src/main/scala/firrtl/stage/FirrtlCli.scala | 3 | ||||
| -rw-r--r-- | src/main/scala/firrtl/stage/package.scala | 1 | ||||
| -rw-r--r-- | src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala | 37 |
5 files changed, 58 insertions, 1 deletions
diff --git a/src/main/scala/firrtl/passes/CheckChirrtl.scala b/src/main/scala/firrtl/passes/CheckChirrtl.scala index 579dba30..9903f445 100644 --- a/src/main/scala/firrtl/passes/CheckChirrtl.scala +++ b/src/main/scala/firrtl/passes/CheckChirrtl.scala @@ -5,9 +5,12 @@ package firrtl.passes import firrtl.Transform import firrtl.ir._ import firrtl.options.Dependency +import firrtl.stage.transforms.CheckScalaVersion object CheckChirrtl extends Pass with CheckHighFormLike { + override def prerequisites = Dependency[CheckScalaVersion] :: Nil + override val optionalPrerequisiteOf = firrtl.stage.Forms.ChirrtlForm ++ Seq( Dependency(CInferTypes), Dependency(CInferMDir), diff --git a/src/main/scala/firrtl/stage/FirrtlAnnotations.scala b/src/main/scala/firrtl/stage/FirrtlAnnotations.scala index 91c5609b..d587fd8c 100644 --- a/src/main/scala/firrtl/stage/FirrtlAnnotations.scala +++ b/src/main/scala/firrtl/stage/FirrtlAnnotations.scala @@ -222,3 +222,18 @@ case class FirrtlCircuitAnnotation(circuit: Circuit) extends NoTargetAnnotation override lazy val hashCode: Int = circuit.hashCode } + +/** Suppresses warning about Scala 2.11 deprecation + * + * - set with `--Wno-scala-version-warning` + */ +case object SuppressScalaVersionWarning extends NoTargetAnnotation with FirrtlOption with HasShellOptions { + def longOption: String = "Wno-scala-version-warning" + val options = Seq( + new ShellOption[Unit]( + longOption = longOption, + toAnnotationSeq = { _ => Seq(this) }, + helpText = "Suppress Scala 2.11 deprecation warning (ignored in Scala 2.12+)" + ) + ) +} diff --git a/src/main/scala/firrtl/stage/FirrtlCli.scala b/src/main/scala/firrtl/stage/FirrtlCli.scala index be1100c3..39b89bea 100644 --- a/src/main/scala/firrtl/stage/FirrtlCli.scala +++ b/src/main/scala/firrtl/stage/FirrtlCli.scala @@ -19,7 +19,8 @@ trait FirrtlCli { this: Shell => RunFirrtlTransformAnnotation, firrtl.EmitCircuitAnnotation, firrtl.EmitAllModulesAnnotation, - NoCircuitDedupAnnotation ) + NoCircuitDedupAnnotation, + SuppressScalaVersionWarning) .map(_.addOptions(parser)) phases.DriverCompatibility.TopNameAnnotation.addOptions(parser) diff --git a/src/main/scala/firrtl/stage/package.scala b/src/main/scala/firrtl/stage/package.scala index e9cf3fb4..123c763a 100644 --- a/src/main/scala/firrtl/stage/package.scala +++ b/src/main/scala/firrtl/stage/package.scala @@ -33,6 +33,7 @@ package object stage { case InfoModeAnnotation(i) => c.copy(infoModeName = i) case FirrtlCircuitAnnotation(cir) => c.copy(firrtlCircuit = Some(cir)) case a : CompilerAnnotation => logger.warn(s"Use of CompilerAnnotation is deprecated. Ignoring $a") ; c + case SuppressScalaVersionWarning => c } } } diff --git a/src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala b/src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala new file mode 100644 index 00000000..a7127dba --- /dev/null +++ b/src/main/scala/firrtl/stage/transforms/CheckScalaVersion.scala @@ -0,0 +1,37 @@ +// See LICENSE for license details. + +package firrtl.stage.transforms + +import firrtl.{BuildInfo, CircuitState, DependencyAPIMigration, Transform} +import firrtl.stage.SuppressScalaVersionWarning +import firrtl.options.StageUtils.dramaticWarning + +object CheckScalaVersion { + def migrationDocumentLink: String = "https://www.chisel-lang.org/chisel3/upgrading-from-scala-2-11.html" + + private def getScalaMajorVersion: Int = { + val "2" :: major :: _ :: Nil = BuildInfo.scalaVersion.split("\\.").toList + major.toInt + } + + final def deprecationMessage(version: String, option: String) = + s"""|FIRRTL support for Scala $version is deprecated, please upgrade to Scala 2.12. + | Migration guide: $migrationDocumentLink + | Suppress warning with '$option'""".stripMargin + +} + +class CheckScalaVersion extends Transform with DependencyAPIMigration { + import CheckScalaVersion._ + + override def invalidates(a: Transform) = false + + def execute(state: CircuitState): CircuitState = { + def suppress = state.annotations.contains(SuppressScalaVersionWarning) + if (getScalaMajorVersion == 11 && !suppress) { + val option = s"--${SuppressScalaVersionWarning.longOption}" + dramaticWarning(deprecationMessage("2.11", option)) + } + state + } +} |
