From a53c8cf4a180fe313b7652b9d119b567ed9f81a1 Mon Sep 17 00:00:00 2001 From: Hamza Remmal Date: Mon, 19 Aug 2024 23:26:46 +0100 Subject: [PATCH] Refactor MigrationVersion to be an enum --- .../tools/dotc/config/MigrationVersion.scala | 59 ++++++++----------- 1 file changed, 24 insertions(+), 35 deletions(-) diff --git a/compiler/src/dotty/tools/dotc/config/MigrationVersion.scala b/compiler/src/dotty/tools/dotc/config/MigrationVersion.scala index 4dd9d065395b..83d750ca7c1e 100644 --- a/compiler/src/dotty/tools/dotc/config/MigrationVersion.scala +++ b/compiler/src/dotty/tools/dotc/config/MigrationVersion.scala @@ -6,46 +6,35 @@ import SourceVersion.* import Feature.* import core.Contexts.Context -class MigrationVersion( - val warnFrom: SourceVersion, - val errorFrom: SourceVersion): - require(warnFrom.ordinal <= errorFrom.ordinal) - - def needsPatch(using Context): Boolean = - sourceVersion.isMigrating && sourceVersion.isAtLeast(warnFrom) - - def patchFrom: SourceVersion = - warnFrom.prevMigrating - -object MigrationVersion: - - val Scala2to3 = MigrationVersion(`3.0`, `3.0`) - - val OverrideValParameter = MigrationVersion(`3.0`, future) - +enum MigrationVersion(val warnFrom: SourceVersion, val errorFrom: SourceVersion): + case Scala2to3 extends MigrationVersion(`3.0`, `3.0`) + case OverrideValParameter extends MigrationVersion(`3.0`, future) // we tighten for-comprehension without `case` to error in 3.4, // but we keep pat-defs as warnings for now ("@unchecked"), // until we propose an alternative way to assert exhaustivity to the typechecker. - val ForComprehensionPatternWithoutCase = MigrationVersion(`3.2`, `3.4`) - val ForComprehensionUncheckedPathDefs = MigrationVersion(`3.2`, future) - - val NonLocalReturns = MigrationVersion(`3.2`, future) - - val AscriptionAfterPattern = MigrationVersion(`3.3`, future) + case ForComprehensionPatternWithoutCase extends MigrationVersion(`3.2`, `3.4`) + case ForComprehensionUncheckedPathDefs extends MigrationVersion(`3.2`, future) + + case NonLocalReturns extends MigrationVersion(`3.2`, future) + case AscriptionAfterPattern extends MigrationVersion(`3.3`, future) + case ExplicitContextBoundArgument extends MigrationVersion(`3.4`, `3.5`) + case AlphanumericInfix extends MigrationVersion(`3.4`, future) + case RemoveThisQualifier extends MigrationVersion(`3.4`, future) + case UninitializedVars extends MigrationVersion(`3.4`, future) + case VarargSpliceAscription extends MigrationVersion(`3.4`, future) + case WildcardType extends MigrationVersion(`3.4`, future) + case WithOperator extends MigrationVersion(`3.4`, future) + case FunctionUnderscore extends MigrationVersion(`3.4`, future) + case ImportWildcard extends MigrationVersion(future, future) + case ImportRename extends MigrationVersion(future, future) + case ParameterEnclosedByParenthesis extends MigrationVersion(future, future) + case XmlLiteral extends MigrationVersion(future, future) - val ExplicitContextBoundArgument = MigrationVersion(`3.4`, `3.5`) + require(warnFrom.ordinal <= errorFrom.ordinal) - val AlphanumericInfix = MigrationVersion(`3.4`, future) - val RemoveThisQualifier = MigrationVersion(`3.4`, future) - val UninitializedVars = MigrationVersion(`3.4`, future) - val VarargSpliceAscription = MigrationVersion(`3.4`, future) - val WildcardType = MigrationVersion(`3.4`, future) - val WithOperator = MigrationVersion(`3.4`, future) - val FunctionUnderscore = MigrationVersion(`3.4`, future) + def needsPatch(using Context): Boolean = + sourceVersion.isMigrating && sourceVersion.isAtLeast(warnFrom) - val ImportWildcard = MigrationVersion(future, future) - val ImportRename = MigrationVersion(future, future) - val ParameterEnclosedByParenthesis = MigrationVersion(future, future) - val XmlLiteral = MigrationVersion(future, future) + def patchFrom: SourceVersion = warnFrom.prevMigrating end MigrationVersion