From 3d3b61d8c0fa33a84b4f3bf14be6c47b5df768e9 Mon Sep 17 00:00:00 2001 From: Adrien Piquerez Date: Wed, 23 Aug 2023 14:05:38 +0200 Subject: [PATCH] Update to Scala 3.3.0 --- .github/workflows/tests.yml | 14 +- build.sbt | 4 +- docs/tooling/scala-3-migrate-plugin.md | 6 +- .../main/scala-3.0/alphanumeric-infix.scala | 0 .../src/main/scala/alphanumeric-infix.scala | 0 .../main/scala-3.0/context-bound-arg.scala | 0 .../src/main/scala/context-bound-arg.scala | 0 .../src/main/scala-3.0/eta-expansion.scala | 0 .../src/main/scala/eta-expansion.scala | 0 .../scala-3.0/implicit-lambda-param.scala | 0 .../main/scala/implicit-lambda-param.scala | 0 .../src/main/scala-3.0/pattern-binding.scala | 0 .../src/main/scala/pattern-binding.scala | 0 .../src/main/scala-3.0/wildcard.scala | 0 .../wildcard/src/main/scala/wildcard.scala | 0 {incompat-30 => incompat-3}/README.md | 0 .../abstract-override/README.md | 0 .../main/scala-2.13/abstract-override.scala | 0 .../src/main/scala/abstract-override.scala | 0 .../access-modifier/README.md | 0 .../src/main/scala-2.13/access-modifier.scala | 0 .../src/main/scala/access-modifier.scala | 0 .../ambiguous-conversion/README.md | 0 .../scala-2.13/ambiguous-conversion.scala | 0 .../src/main/scala/ambiguous-conversion.scala | 0 .../anonymous-type-param/README.md | 0 .../scala-2.13/anonymous-type-param.scala | 0 .../src/main/scala/anonymous-type-param.scala | 0 .../any2stringadd-conversion/README.md | 0 .../scala-2.13/any2stringadd-conversion.scala | 0 .../main/scala/any2stringadd-conversion.scala | 0 .../auto-application/.scalafix.conf | 0 .../auto-application/README.md | 0 .../main/scala-2.13/auto-application.scala | 0 .../src/main/scala/auto-application.scala | 0 .../bean-property/README.md | 0 .../src/main/scala-2.13/bean-property.scala | 0 .../src/main/scala/bean-property.scala | 0 .../by-name-param-type-infer/README.md | 0 .../scala-2.13/by-name-param-type-infer.scala | 0 .../main/scala/by-name-param-type-infer.scala | 0 .../case-class-companion/README.md | 0 .../scala-2.13/case-class-companion.scala | 0 .../src/main/scala/case-class-companion.scala | 0 .../do-while/README.md | 0 .../src/main/scala-2.13/do-while.scala | 0 .../do-while/src/main/scala/do-while.scala | 0 .../early-initializer/README.md | 0 .../main/scala-2.13/early-initializer.scala | 0 .../src/main/scala/early-initializer.scala | 0 .../existential-type/README.md | 0 .../main/scala-2.13/existential-type.scala | 0 .../src/main/scala/existential-type.scala | 0 .../explicit-call-to-unapply/README.md | 0 .../scala-2.13/explicit-call-to-unapply.scala | 0 .../main/scala/explicit-call-to-unapply.scala | 0 .../implicit-view/README.md | 0 .../src/main/scala-2.13/implicit-view.scala | 0 .../src/main/scala/implicit-view.scala | 0 .../indent-argument/README.md | 0 .../src/main/scala-2.13/indent-argument.scala | 0 .../src/main/scala/indent-argument.scala | 0 .../indentation/README.md | 0 .../src/main/scala-2.13/indentation.scala | 0 .../src/main/scala/indentation.scala | 0 .../infer-return-type/README.md | 0 .../main/scala-2.13/infer-return-type.scala | 0 .../src/main/scala/infer-return-type.scala | 0 .../inheritance-shadowing/README.md | 0 .../scala-2.13/inheritance-shadowing.scala | 0 .../main/scala/inheritance-shadowing.scala | 0 .../keywords/README.md | 0 .../src/main/scala-2.13/keywords.scala | 0 .../keywords/src/main/scala/keywords.scala | 0 .../lambda-params/.scalafix.conf | 0 .../lambda-params/README.md | 0 .../src/main/scala-2.13/lambda-params.scala | 0 .../src/main/scala/lambda-params.scala | 0 .../pattern-match/README.md | 0 .../src/main/scala-2.13/pattern-match.scala | 0 .../src/main/scala/pattern-match.scala | 0 .../procedure-syntax/.scalafix.conf | 0 .../procedure-syntax/README.md | 0 .../main/scala-2.13/procedure-syntax.scala | 0 .../src/main/scala/procedure-syntax.scala | 0 .../reflective-call/README.md | 0 .../src/main/scala-2.13/reflective-call.scala | 0 .../src/main/scala/reflective-call.scala | 0 .../restricted-operator/README.md | 0 .../main/scala-2.13/restricted-operator.scala | 0 .../src/main/scala/restricted-operator.scala | 0 .../symbol-literals/README.md | 0 .../src/main/scala-2.13/symbol-literals.scala | 0 .../src/main/scala/symbol-literals.scala | 0 .../type-infer-10/README.md | 0 .../src/main/scala-2.13/type-infer.scala | 0 .../src/main/scala/type-infer.scala | 0 .../type-infer-3/README.md | 0 .../src/main/scala-2.13/type-infer.scala | 0 .../src/main/scala/type-infer.scala | 0 .../type-infer-4/README.md | 0 .../src/main/scala-2.13/type-infer.scala | 0 .../src/main/scala/type-infer.scala | 0 .../type-infer-5/README.md | 0 .../src/main/scala-2.13/type-infer.scala | 0 .../src/main/scala/type-infer.scala | 0 .../type-infer-9/README.md | 0 .../src/main/scala-2.13/type-infer.scala | 0 .../src/main/scala/type-infer.scala | 0 .../type-of-implicit-def/.scalafix.conf | 0 .../type-of-implicit-def/README.md | 0 .../scala-2.13/type-of-implicit-def.scala | 0 .../src/main/scala/type-of-implicit-def.scala | 0 .../type-param-identifier/README.md | 0 .../scala-2.13/type-param-identifier.scala | 0 .../main/scala/type-param-identifier.scala | 0 .../value-eta-expansion/.scalafix.conf | 0 .../value-eta-expansion/README.md | 0 .../main/scala-2.13/value-eta-expansion.scala | 0 .../src/main/scala/value-eta-expansion.scala | 0 .../variance/README.md | 0 .../src/main/scala-2.13/variance.scala | 0 .../variance/src/main/scala/variance.scala | 0 .../view-bound/README.md | 0 .../src/main/scala-2.13/view-bound.scala | 0 .../src/main/scala/view-bound.scala | 0 .../wildcard-argument/README.md | 0 .../main/scala-2.13/wildcard-argument.scala | 0 .../src/main/scala/wildcard-argument.scala | 0 incompat-30/type-infer-1/README.md | 11 -- .../src/main/scala-2.13/type-infer.scala | 11 -- .../src/main/scala/type-infer.scala | 11 -- incompat-30/type-infer-7/README.md | 14 -- .../src/main/scala-2.13/type-infer.scala | 16 --- .../src/main/scala/type-infer.scala | 16 --- incompat.sbt | 129 +++++++++--------- project/IncompatSettings.scala | 45 +++--- project/Versions.scala | 6 +- project/build.properties | 2 +- tutorials.sbt | 14 +- 140 files changed, 108 insertions(+), 191 deletions(-) rename {incompat-31 => incompat-3-future}/alphanumeric-infix/src/main/scala-3.0/alphanumeric-infix.scala (100%) rename {incompat-31 => incompat-3-future}/alphanumeric-infix/src/main/scala/alphanumeric-infix.scala (100%) rename {incompat-31 => incompat-3-future}/context-bound-arg/src/main/scala-3.0/context-bound-arg.scala (100%) rename {incompat-31 => incompat-3-future}/context-bound-arg/src/main/scala/context-bound-arg.scala (100%) rename {incompat-31 => incompat-3-future}/eta-expansion/src/main/scala-3.0/eta-expansion.scala (100%) rename {incompat-31 => incompat-3-future}/eta-expansion/src/main/scala/eta-expansion.scala (100%) rename {incompat-31 => incompat-3-future}/implicit-lambda-param/src/main/scala-3.0/implicit-lambda-param.scala (100%) rename {incompat-31 => incompat-3-future}/implicit-lambda-param/src/main/scala/implicit-lambda-param.scala (100%) rename {incompat-31 => incompat-3-future}/pattern-binding/src/main/scala-3.0/pattern-binding.scala (100%) rename {incompat-31 => incompat-3-future}/pattern-binding/src/main/scala/pattern-binding.scala (100%) rename {incompat-31 => incompat-3-future}/wildcard/src/main/scala-3.0/wildcard.scala (100%) rename {incompat-31 => incompat-3-future}/wildcard/src/main/scala/wildcard.scala (100%) rename {incompat-30 => incompat-3}/README.md (100%) rename {incompat-30 => incompat-3}/abstract-override/README.md (100%) rename {incompat-30 => incompat-3}/abstract-override/src/main/scala-2.13/abstract-override.scala (100%) rename {incompat-30 => incompat-3}/abstract-override/src/main/scala/abstract-override.scala (100%) rename {incompat-30 => incompat-3}/access-modifier/README.md (100%) rename {incompat-30 => incompat-3}/access-modifier/src/main/scala-2.13/access-modifier.scala (100%) rename {incompat-30 => incompat-3}/access-modifier/src/main/scala/access-modifier.scala (100%) rename {incompat-30 => incompat-3}/ambiguous-conversion/README.md (100%) rename {incompat-30 => incompat-3}/ambiguous-conversion/src/main/scala-2.13/ambiguous-conversion.scala (100%) rename {incompat-30 => incompat-3}/ambiguous-conversion/src/main/scala/ambiguous-conversion.scala (100%) rename {incompat-30 => incompat-3}/anonymous-type-param/README.md (100%) rename {incompat-30 => incompat-3}/anonymous-type-param/src/main/scala-2.13/anonymous-type-param.scala (100%) rename {incompat-30 => incompat-3}/anonymous-type-param/src/main/scala/anonymous-type-param.scala (100%) rename {incompat-30 => incompat-3}/any2stringadd-conversion/README.md (100%) rename {incompat-30 => incompat-3}/any2stringadd-conversion/src/main/scala-2.13/any2stringadd-conversion.scala (100%) rename {incompat-30 => incompat-3}/any2stringadd-conversion/src/main/scala/any2stringadd-conversion.scala (100%) rename {incompat-30 => incompat-3}/auto-application/.scalafix.conf (100%) rename {incompat-30 => incompat-3}/auto-application/README.md (100%) rename {incompat-30 => incompat-3}/auto-application/src/main/scala-2.13/auto-application.scala (100%) rename {incompat-30 => incompat-3}/auto-application/src/main/scala/auto-application.scala (100%) rename {incompat-30 => incompat-3}/bean-property/README.md (100%) rename {incompat-30 => incompat-3}/bean-property/src/main/scala-2.13/bean-property.scala (100%) rename {incompat-30 => incompat-3}/bean-property/src/main/scala/bean-property.scala (100%) rename {incompat-30 => incompat-3}/by-name-param-type-infer/README.md (100%) rename {incompat-30 => incompat-3}/by-name-param-type-infer/src/main/scala-2.13/by-name-param-type-infer.scala (100%) rename {incompat-30 => incompat-3}/by-name-param-type-infer/src/main/scala/by-name-param-type-infer.scala (100%) rename {incompat-30 => incompat-3}/case-class-companion/README.md (100%) rename {incompat-30 => incompat-3}/case-class-companion/src/main/scala-2.13/case-class-companion.scala (100%) rename {incompat-30 => incompat-3}/case-class-companion/src/main/scala/case-class-companion.scala (100%) rename {incompat-30 => incompat-3}/do-while/README.md (100%) rename {incompat-30 => incompat-3}/do-while/src/main/scala-2.13/do-while.scala (100%) rename {incompat-30 => incompat-3}/do-while/src/main/scala/do-while.scala (100%) rename {incompat-30 => incompat-3}/early-initializer/README.md (100%) rename {incompat-30 => incompat-3}/early-initializer/src/main/scala-2.13/early-initializer.scala (100%) rename {incompat-30 => incompat-3}/early-initializer/src/main/scala/early-initializer.scala (100%) rename {incompat-30 => incompat-3}/existential-type/README.md (100%) rename {incompat-30 => incompat-3}/existential-type/src/main/scala-2.13/existential-type.scala (100%) rename {incompat-30 => incompat-3}/existential-type/src/main/scala/existential-type.scala (100%) rename {incompat-30 => incompat-3}/explicit-call-to-unapply/README.md (100%) rename {incompat-30 => incompat-3}/explicit-call-to-unapply/src/main/scala-2.13/explicit-call-to-unapply.scala (100%) rename {incompat-30 => incompat-3}/explicit-call-to-unapply/src/main/scala/explicit-call-to-unapply.scala (100%) rename {incompat-30 => incompat-3}/implicit-view/README.md (100%) rename {incompat-30 => incompat-3}/implicit-view/src/main/scala-2.13/implicit-view.scala (100%) rename {incompat-30 => incompat-3}/implicit-view/src/main/scala/implicit-view.scala (100%) rename {incompat-30 => incompat-3}/indent-argument/README.md (100%) rename {incompat-30 => incompat-3}/indent-argument/src/main/scala-2.13/indent-argument.scala (100%) rename {incompat-30 => incompat-3}/indent-argument/src/main/scala/indent-argument.scala (100%) rename {incompat-30 => incompat-3}/indentation/README.md (100%) rename {incompat-30 => incompat-3}/indentation/indentation-1/src/main/scala-2.13/indentation.scala (100%) rename {incompat-30 => incompat-3}/indentation/indentation-1/src/main/scala/indentation.scala (100%) rename {incompat-30 => incompat-3}/infer-return-type/README.md (100%) rename {incompat-30 => incompat-3}/infer-return-type/src/main/scala-2.13/infer-return-type.scala (100%) rename {incompat-30 => incompat-3}/infer-return-type/src/main/scala/infer-return-type.scala (100%) rename {incompat-30 => incompat-3}/inheritance-shadowing/README.md (100%) rename {incompat-30 => incompat-3}/inheritance-shadowing/src/main/scala-2.13/inheritance-shadowing.scala (100%) rename {incompat-30 => incompat-3}/inheritance-shadowing/src/main/scala/inheritance-shadowing.scala (100%) rename {incompat-30 => incompat-3}/keywords/README.md (100%) rename {incompat-30 => incompat-3}/keywords/src/main/scala-2.13/keywords.scala (100%) rename {incompat-30 => incompat-3}/keywords/src/main/scala/keywords.scala (100%) rename {incompat-30 => incompat-3}/lambda-params/.scalafix.conf (100%) rename {incompat-30 => incompat-3}/lambda-params/README.md (100%) rename {incompat-30 => incompat-3}/lambda-params/src/main/scala-2.13/lambda-params.scala (100%) rename {incompat-30 => incompat-3}/lambda-params/src/main/scala/lambda-params.scala (100%) rename {incompat-30 => incompat-3}/pattern-match/README.md (100%) rename {incompat-30 => incompat-3}/pattern-match/src/main/scala-2.13/pattern-match.scala (100%) rename {incompat-30 => incompat-3}/pattern-match/src/main/scala/pattern-match.scala (100%) rename {incompat-30 => incompat-3}/procedure-syntax/.scalafix.conf (100%) rename {incompat-30 => incompat-3}/procedure-syntax/README.md (100%) rename {incompat-30 => incompat-3}/procedure-syntax/src/main/scala-2.13/procedure-syntax.scala (100%) rename {incompat-30 => incompat-3}/procedure-syntax/src/main/scala/procedure-syntax.scala (100%) rename {incompat-30 => incompat-3}/reflective-call/README.md (100%) rename {incompat-30 => incompat-3}/reflective-call/src/main/scala-2.13/reflective-call.scala (100%) rename {incompat-30 => incompat-3}/reflective-call/src/main/scala/reflective-call.scala (100%) rename {incompat-30 => incompat-3}/restricted-operator/README.md (100%) rename {incompat-30 => incompat-3}/restricted-operator/src/main/scala-2.13/restricted-operator.scala (100%) rename {incompat-30 => incompat-3}/restricted-operator/src/main/scala/restricted-operator.scala (100%) rename {incompat-30 => incompat-3}/symbol-literals/README.md (100%) rename {incompat-30 => incompat-3}/symbol-literals/src/main/scala-2.13/symbol-literals.scala (100%) rename {incompat-30 => incompat-3}/symbol-literals/src/main/scala/symbol-literals.scala (100%) rename {incompat-30 => incompat-3}/type-infer-10/README.md (100%) rename {incompat-30 => incompat-3}/type-infer-10/src/main/scala-2.13/type-infer.scala (100%) rename {incompat-30 => incompat-3}/type-infer-10/src/main/scala/type-infer.scala (100%) rename {incompat-30 => incompat-3}/type-infer-3/README.md (100%) rename {incompat-30 => incompat-3}/type-infer-3/src/main/scala-2.13/type-infer.scala (100%) rename {incompat-30 => incompat-3}/type-infer-3/src/main/scala/type-infer.scala (100%) rename {incompat-30 => incompat-3}/type-infer-4/README.md (100%) rename {incompat-30 => incompat-3}/type-infer-4/src/main/scala-2.13/type-infer.scala (100%) rename {incompat-30 => incompat-3}/type-infer-4/src/main/scala/type-infer.scala (100%) rename {incompat-30 => incompat-3}/type-infer-5/README.md (100%) rename {incompat-30 => incompat-3}/type-infer-5/src/main/scala-2.13/type-infer.scala (100%) rename {incompat-30 => incompat-3}/type-infer-5/src/main/scala/type-infer.scala (100%) rename {incompat-30 => incompat-3}/type-infer-9/README.md (100%) rename {incompat-30 => incompat-3}/type-infer-9/src/main/scala-2.13/type-infer.scala (100%) rename {incompat-30 => incompat-3}/type-infer-9/src/main/scala/type-infer.scala (100%) rename {incompat-30 => incompat-3}/type-of-implicit-def/.scalafix.conf (100%) rename {incompat-30 => incompat-3}/type-of-implicit-def/README.md (100%) rename {incompat-30 => incompat-3}/type-of-implicit-def/src/main/scala-2.13/type-of-implicit-def.scala (100%) rename {incompat-30 => incompat-3}/type-of-implicit-def/src/main/scala/type-of-implicit-def.scala (100%) rename {incompat-30 => incompat-3}/type-param-identifier/README.md (100%) rename {incompat-30 => incompat-3}/type-param-identifier/src/main/scala-2.13/type-param-identifier.scala (100%) rename {incompat-30 => incompat-3}/type-param-identifier/src/main/scala/type-param-identifier.scala (100%) rename {incompat-30 => incompat-3}/value-eta-expansion/.scalafix.conf (100%) rename {incompat-30 => incompat-3}/value-eta-expansion/README.md (100%) rename {incompat-30 => incompat-3}/value-eta-expansion/src/main/scala-2.13/value-eta-expansion.scala (100%) rename {incompat-30 => incompat-3}/value-eta-expansion/src/main/scala/value-eta-expansion.scala (100%) rename {incompat-30 => incompat-3}/variance/README.md (100%) rename {incompat-30 => incompat-3}/variance/src/main/scala-2.13/variance.scala (100%) rename {incompat-30 => incompat-3}/variance/src/main/scala/variance.scala (100%) rename {incompat-30 => incompat-3}/view-bound/README.md (100%) rename {incompat-30 => incompat-3}/view-bound/src/main/scala-2.13/view-bound.scala (100%) rename {incompat-30 => incompat-3}/view-bound/src/main/scala/view-bound.scala (100%) rename {incompat-30 => incompat-3}/wildcard-argument/README.md (100%) rename {incompat-30 => incompat-3}/wildcard-argument/src/main/scala-2.13/wildcard-argument.scala (100%) rename {incompat-30 => incompat-3}/wildcard-argument/src/main/scala/wildcard-argument.scala (100%) delete mode 100644 incompat-30/type-infer-1/README.md delete mode 100644 incompat-30/type-infer-1/src/main/scala-2.13/type-infer.scala delete mode 100644 incompat-30/type-infer-1/src/main/scala/type-infer.scala delete mode 100644 incompat-30/type-infer-7/README.md delete mode 100644 incompat-30/type-infer-7/src/main/scala-2.13/type-infer.scala delete mode 100644 incompat-30/type-infer-7/src/main/scala/type-infer.scala diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d8ff3d3e..d9c21c29 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,10 +13,10 @@ jobs: steps: - uses: actions/checkout@v2 - uses: olafurpg/setup-scala@v10 - - name: Test Incompatibilities 3.0 - run: sbt '++3.0.0; incompat-30 / test; ++2.13.6; incompat-30 / test' - - name: Test Incompatibilities 3.1 - run: sbt 'incompat-31 / test' + - name: Test Incompatibilities + run: sbt '++3.3.0; incompat-3 / test; ++2.13.11; incompat-3 / test' + - name: Test Future Incompatibilities + run: sbt 'incompat-3-future / test' tutorials: name: Check Tutorials runs-on: ubuntu-latest @@ -26,8 +26,8 @@ jobs: - uses: actions/checkout@v2 - uses: olafurpg/setup-scala@v10 - name: Sbt Migration Tutorial - run: sbt '++3.0.0; sbt-migration-tutorial / run; ++2.13.6; sbt-migration-tutorial / run' + run: sbt '++3.3.0; sbt-migration-tutorial / run; ++2.13.11; sbt-migration-tutorial / run' - name: Macro Cross-Building - run: sbt '++3.0.0; macro-cross-building-example / test; ++2.13.6; macro-cross-building-example / test' + run: sbt '++3.3.0; macro-cross-building-example / test; ++2.13.11; macro-cross-building-example / test' - name: Macro Mixing - run: sbt '++3.0.0; macro-mixing-example-test / test; ++2.13.6; macro-mixing-example-test / test' + run: sbt '++3.3.0; macro-mixing-example-test / test; ++2.13.11; macro-mixing-example-test / test' diff --git a/build.sbt b/build.sbt index 8b92e382..05a23cbb 100644 --- a/build.sbt +++ b/build.sbt @@ -6,8 +6,8 @@ lazy val website = project publish / skip := true, mdoc := (Compile / run).evaluated, mdocVariables := Map( - "scala30" -> scala30, - "scala30Binary" -> scala30, + "scala3" -> scala3, + "scala3Binary" -> scala3, "scala213" -> scala213, "sbtDotty" -> sbtDotty, "scala3Migrate" -> scala3Migrate, diff --git a/docs/tooling/scala-3-migrate-plugin.md b/docs/tooling/scala-3-migrate-plugin.md index 36aca9c0..7234458d 100644 --- a/docs/tooling/scala-3-migrate-plugin.md +++ b/docs/tooling/scala-3-migrate-plugin.md @@ -17,7 +17,7 @@ The solution consists of 3 independent steps that are packaged in an sbt plugin: Each of this step is an sbt command that will be described in details in the following sections. > #### Requirements -> - Scala 2.13, preferred 2.13.5 +> - Scala 2.13, preferred 2.13.11 > - sbt 1.4 or higher > - **Disclaimer:** This tool cannot migrate libraries containing macros. > - **Not implemented yet:** @@ -55,7 +55,7 @@ lazy val main = project .in(file(".")) .settings( name := "main", - scalaVersion := "2.13.5", + scalaVersion := "2.13.11", semanticdbEnabled := true, scalacOptions ++= Seq("-explaintypes", "-Wunused"), libraryDependencies ++= Seq( @@ -341,7 +341,7 @@ Then the tool compiles one last time in Scala 3 with `-rewrite` scalacOption. ## What to do next ? You can start again with another module `MODULE2`. If `MODULE2` depends on the last module migrated, you need -either to add `-Ytasty-reader` to `MODULE2` scalacOptions, or `reload` or `set MODULE-MIGRATED/scalaVersion := "2.13.5"` +either to add `-Ytasty-reader` to `MODULE2` scalacOptions, or `reload` or `set MODULE-MIGRATED/scalaVersion := "2.13.11"` Once you're done, you can remove `scala3-migrate` from your plugins. diff --git a/incompat-31/alphanumeric-infix/src/main/scala-3.0/alphanumeric-infix.scala b/incompat-3-future/alphanumeric-infix/src/main/scala-3.0/alphanumeric-infix.scala similarity index 100% rename from incompat-31/alphanumeric-infix/src/main/scala-3.0/alphanumeric-infix.scala rename to incompat-3-future/alphanumeric-infix/src/main/scala-3.0/alphanumeric-infix.scala diff --git a/incompat-31/alphanumeric-infix/src/main/scala/alphanumeric-infix.scala b/incompat-3-future/alphanumeric-infix/src/main/scala/alphanumeric-infix.scala similarity index 100% rename from incompat-31/alphanumeric-infix/src/main/scala/alphanumeric-infix.scala rename to incompat-3-future/alphanumeric-infix/src/main/scala/alphanumeric-infix.scala diff --git a/incompat-31/context-bound-arg/src/main/scala-3.0/context-bound-arg.scala b/incompat-3-future/context-bound-arg/src/main/scala-3.0/context-bound-arg.scala similarity index 100% rename from incompat-31/context-bound-arg/src/main/scala-3.0/context-bound-arg.scala rename to incompat-3-future/context-bound-arg/src/main/scala-3.0/context-bound-arg.scala diff --git a/incompat-31/context-bound-arg/src/main/scala/context-bound-arg.scala b/incompat-3-future/context-bound-arg/src/main/scala/context-bound-arg.scala similarity index 100% rename from incompat-31/context-bound-arg/src/main/scala/context-bound-arg.scala rename to incompat-3-future/context-bound-arg/src/main/scala/context-bound-arg.scala diff --git a/incompat-31/eta-expansion/src/main/scala-3.0/eta-expansion.scala b/incompat-3-future/eta-expansion/src/main/scala-3.0/eta-expansion.scala similarity index 100% rename from incompat-31/eta-expansion/src/main/scala-3.0/eta-expansion.scala rename to incompat-3-future/eta-expansion/src/main/scala-3.0/eta-expansion.scala diff --git a/incompat-31/eta-expansion/src/main/scala/eta-expansion.scala b/incompat-3-future/eta-expansion/src/main/scala/eta-expansion.scala similarity index 100% rename from incompat-31/eta-expansion/src/main/scala/eta-expansion.scala rename to incompat-3-future/eta-expansion/src/main/scala/eta-expansion.scala diff --git a/incompat-31/implicit-lambda-param/src/main/scala-3.0/implicit-lambda-param.scala b/incompat-3-future/implicit-lambda-param/src/main/scala-3.0/implicit-lambda-param.scala similarity index 100% rename from incompat-31/implicit-lambda-param/src/main/scala-3.0/implicit-lambda-param.scala rename to incompat-3-future/implicit-lambda-param/src/main/scala-3.0/implicit-lambda-param.scala diff --git a/incompat-31/implicit-lambda-param/src/main/scala/implicit-lambda-param.scala b/incompat-3-future/implicit-lambda-param/src/main/scala/implicit-lambda-param.scala similarity index 100% rename from incompat-31/implicit-lambda-param/src/main/scala/implicit-lambda-param.scala rename to incompat-3-future/implicit-lambda-param/src/main/scala/implicit-lambda-param.scala diff --git a/incompat-31/pattern-binding/src/main/scala-3.0/pattern-binding.scala b/incompat-3-future/pattern-binding/src/main/scala-3.0/pattern-binding.scala similarity index 100% rename from incompat-31/pattern-binding/src/main/scala-3.0/pattern-binding.scala rename to incompat-3-future/pattern-binding/src/main/scala-3.0/pattern-binding.scala diff --git a/incompat-31/pattern-binding/src/main/scala/pattern-binding.scala b/incompat-3-future/pattern-binding/src/main/scala/pattern-binding.scala similarity index 100% rename from incompat-31/pattern-binding/src/main/scala/pattern-binding.scala rename to incompat-3-future/pattern-binding/src/main/scala/pattern-binding.scala diff --git a/incompat-31/wildcard/src/main/scala-3.0/wildcard.scala b/incompat-3-future/wildcard/src/main/scala-3.0/wildcard.scala similarity index 100% rename from incompat-31/wildcard/src/main/scala-3.0/wildcard.scala rename to incompat-3-future/wildcard/src/main/scala-3.0/wildcard.scala diff --git a/incompat-31/wildcard/src/main/scala/wildcard.scala b/incompat-3-future/wildcard/src/main/scala/wildcard.scala similarity index 100% rename from incompat-31/wildcard/src/main/scala/wildcard.scala rename to incompat-3-future/wildcard/src/main/scala/wildcard.scala diff --git a/incompat-30/README.md b/incompat-3/README.md similarity index 100% rename from incompat-30/README.md rename to incompat-3/README.md diff --git a/incompat-30/abstract-override/README.md b/incompat-3/abstract-override/README.md similarity index 100% rename from incompat-30/abstract-override/README.md rename to incompat-3/abstract-override/README.md diff --git a/incompat-30/abstract-override/src/main/scala-2.13/abstract-override.scala b/incompat-3/abstract-override/src/main/scala-2.13/abstract-override.scala similarity index 100% rename from incompat-30/abstract-override/src/main/scala-2.13/abstract-override.scala rename to incompat-3/abstract-override/src/main/scala-2.13/abstract-override.scala diff --git a/incompat-30/abstract-override/src/main/scala/abstract-override.scala b/incompat-3/abstract-override/src/main/scala/abstract-override.scala similarity index 100% rename from incompat-30/abstract-override/src/main/scala/abstract-override.scala rename to incompat-3/abstract-override/src/main/scala/abstract-override.scala diff --git a/incompat-30/access-modifier/README.md b/incompat-3/access-modifier/README.md similarity index 100% rename from incompat-30/access-modifier/README.md rename to incompat-3/access-modifier/README.md diff --git a/incompat-30/access-modifier/src/main/scala-2.13/access-modifier.scala b/incompat-3/access-modifier/src/main/scala-2.13/access-modifier.scala similarity index 100% rename from incompat-30/access-modifier/src/main/scala-2.13/access-modifier.scala rename to incompat-3/access-modifier/src/main/scala-2.13/access-modifier.scala diff --git a/incompat-30/access-modifier/src/main/scala/access-modifier.scala b/incompat-3/access-modifier/src/main/scala/access-modifier.scala similarity index 100% rename from incompat-30/access-modifier/src/main/scala/access-modifier.scala rename to incompat-3/access-modifier/src/main/scala/access-modifier.scala diff --git a/incompat-30/ambiguous-conversion/README.md b/incompat-3/ambiguous-conversion/README.md similarity index 100% rename from incompat-30/ambiguous-conversion/README.md rename to incompat-3/ambiguous-conversion/README.md diff --git a/incompat-30/ambiguous-conversion/src/main/scala-2.13/ambiguous-conversion.scala b/incompat-3/ambiguous-conversion/src/main/scala-2.13/ambiguous-conversion.scala similarity index 100% rename from incompat-30/ambiguous-conversion/src/main/scala-2.13/ambiguous-conversion.scala rename to incompat-3/ambiguous-conversion/src/main/scala-2.13/ambiguous-conversion.scala diff --git a/incompat-30/ambiguous-conversion/src/main/scala/ambiguous-conversion.scala b/incompat-3/ambiguous-conversion/src/main/scala/ambiguous-conversion.scala similarity index 100% rename from incompat-30/ambiguous-conversion/src/main/scala/ambiguous-conversion.scala rename to incompat-3/ambiguous-conversion/src/main/scala/ambiguous-conversion.scala diff --git a/incompat-30/anonymous-type-param/README.md b/incompat-3/anonymous-type-param/README.md similarity index 100% rename from incompat-30/anonymous-type-param/README.md rename to incompat-3/anonymous-type-param/README.md diff --git a/incompat-30/anonymous-type-param/src/main/scala-2.13/anonymous-type-param.scala b/incompat-3/anonymous-type-param/src/main/scala-2.13/anonymous-type-param.scala similarity index 100% rename from incompat-30/anonymous-type-param/src/main/scala-2.13/anonymous-type-param.scala rename to incompat-3/anonymous-type-param/src/main/scala-2.13/anonymous-type-param.scala diff --git a/incompat-30/anonymous-type-param/src/main/scala/anonymous-type-param.scala b/incompat-3/anonymous-type-param/src/main/scala/anonymous-type-param.scala similarity index 100% rename from incompat-30/anonymous-type-param/src/main/scala/anonymous-type-param.scala rename to incompat-3/anonymous-type-param/src/main/scala/anonymous-type-param.scala diff --git a/incompat-30/any2stringadd-conversion/README.md b/incompat-3/any2stringadd-conversion/README.md similarity index 100% rename from incompat-30/any2stringadd-conversion/README.md rename to incompat-3/any2stringadd-conversion/README.md diff --git a/incompat-30/any2stringadd-conversion/src/main/scala-2.13/any2stringadd-conversion.scala b/incompat-3/any2stringadd-conversion/src/main/scala-2.13/any2stringadd-conversion.scala similarity index 100% rename from incompat-30/any2stringadd-conversion/src/main/scala-2.13/any2stringadd-conversion.scala rename to incompat-3/any2stringadd-conversion/src/main/scala-2.13/any2stringadd-conversion.scala diff --git a/incompat-30/any2stringadd-conversion/src/main/scala/any2stringadd-conversion.scala b/incompat-3/any2stringadd-conversion/src/main/scala/any2stringadd-conversion.scala similarity index 100% rename from incompat-30/any2stringadd-conversion/src/main/scala/any2stringadd-conversion.scala rename to incompat-3/any2stringadd-conversion/src/main/scala/any2stringadd-conversion.scala diff --git a/incompat-30/auto-application/.scalafix.conf b/incompat-3/auto-application/.scalafix.conf similarity index 100% rename from incompat-30/auto-application/.scalafix.conf rename to incompat-3/auto-application/.scalafix.conf diff --git a/incompat-30/auto-application/README.md b/incompat-3/auto-application/README.md similarity index 100% rename from incompat-30/auto-application/README.md rename to incompat-3/auto-application/README.md diff --git a/incompat-30/auto-application/src/main/scala-2.13/auto-application.scala b/incompat-3/auto-application/src/main/scala-2.13/auto-application.scala similarity index 100% rename from incompat-30/auto-application/src/main/scala-2.13/auto-application.scala rename to incompat-3/auto-application/src/main/scala-2.13/auto-application.scala diff --git a/incompat-30/auto-application/src/main/scala/auto-application.scala b/incompat-3/auto-application/src/main/scala/auto-application.scala similarity index 100% rename from incompat-30/auto-application/src/main/scala/auto-application.scala rename to incompat-3/auto-application/src/main/scala/auto-application.scala diff --git a/incompat-30/bean-property/README.md b/incompat-3/bean-property/README.md similarity index 100% rename from incompat-30/bean-property/README.md rename to incompat-3/bean-property/README.md diff --git a/incompat-30/bean-property/src/main/scala-2.13/bean-property.scala b/incompat-3/bean-property/src/main/scala-2.13/bean-property.scala similarity index 100% rename from incompat-30/bean-property/src/main/scala-2.13/bean-property.scala rename to incompat-3/bean-property/src/main/scala-2.13/bean-property.scala diff --git a/incompat-30/bean-property/src/main/scala/bean-property.scala b/incompat-3/bean-property/src/main/scala/bean-property.scala similarity index 100% rename from incompat-30/bean-property/src/main/scala/bean-property.scala rename to incompat-3/bean-property/src/main/scala/bean-property.scala diff --git a/incompat-30/by-name-param-type-infer/README.md b/incompat-3/by-name-param-type-infer/README.md similarity index 100% rename from incompat-30/by-name-param-type-infer/README.md rename to incompat-3/by-name-param-type-infer/README.md diff --git a/incompat-30/by-name-param-type-infer/src/main/scala-2.13/by-name-param-type-infer.scala b/incompat-3/by-name-param-type-infer/src/main/scala-2.13/by-name-param-type-infer.scala similarity index 100% rename from incompat-30/by-name-param-type-infer/src/main/scala-2.13/by-name-param-type-infer.scala rename to incompat-3/by-name-param-type-infer/src/main/scala-2.13/by-name-param-type-infer.scala diff --git a/incompat-30/by-name-param-type-infer/src/main/scala/by-name-param-type-infer.scala b/incompat-3/by-name-param-type-infer/src/main/scala/by-name-param-type-infer.scala similarity index 100% rename from incompat-30/by-name-param-type-infer/src/main/scala/by-name-param-type-infer.scala rename to incompat-3/by-name-param-type-infer/src/main/scala/by-name-param-type-infer.scala diff --git a/incompat-30/case-class-companion/README.md b/incompat-3/case-class-companion/README.md similarity index 100% rename from incompat-30/case-class-companion/README.md rename to incompat-3/case-class-companion/README.md diff --git a/incompat-30/case-class-companion/src/main/scala-2.13/case-class-companion.scala b/incompat-3/case-class-companion/src/main/scala-2.13/case-class-companion.scala similarity index 100% rename from incompat-30/case-class-companion/src/main/scala-2.13/case-class-companion.scala rename to incompat-3/case-class-companion/src/main/scala-2.13/case-class-companion.scala diff --git a/incompat-30/case-class-companion/src/main/scala/case-class-companion.scala b/incompat-3/case-class-companion/src/main/scala/case-class-companion.scala similarity index 100% rename from incompat-30/case-class-companion/src/main/scala/case-class-companion.scala rename to incompat-3/case-class-companion/src/main/scala/case-class-companion.scala diff --git a/incompat-30/do-while/README.md b/incompat-3/do-while/README.md similarity index 100% rename from incompat-30/do-while/README.md rename to incompat-3/do-while/README.md diff --git a/incompat-30/do-while/src/main/scala-2.13/do-while.scala b/incompat-3/do-while/src/main/scala-2.13/do-while.scala similarity index 100% rename from incompat-30/do-while/src/main/scala-2.13/do-while.scala rename to incompat-3/do-while/src/main/scala-2.13/do-while.scala diff --git a/incompat-30/do-while/src/main/scala/do-while.scala b/incompat-3/do-while/src/main/scala/do-while.scala similarity index 100% rename from incompat-30/do-while/src/main/scala/do-while.scala rename to incompat-3/do-while/src/main/scala/do-while.scala diff --git a/incompat-30/early-initializer/README.md b/incompat-3/early-initializer/README.md similarity index 100% rename from incompat-30/early-initializer/README.md rename to incompat-3/early-initializer/README.md diff --git a/incompat-30/early-initializer/src/main/scala-2.13/early-initializer.scala b/incompat-3/early-initializer/src/main/scala-2.13/early-initializer.scala similarity index 100% rename from incompat-30/early-initializer/src/main/scala-2.13/early-initializer.scala rename to incompat-3/early-initializer/src/main/scala-2.13/early-initializer.scala diff --git a/incompat-30/early-initializer/src/main/scala/early-initializer.scala b/incompat-3/early-initializer/src/main/scala/early-initializer.scala similarity index 100% rename from incompat-30/early-initializer/src/main/scala/early-initializer.scala rename to incompat-3/early-initializer/src/main/scala/early-initializer.scala diff --git a/incompat-30/existential-type/README.md b/incompat-3/existential-type/README.md similarity index 100% rename from incompat-30/existential-type/README.md rename to incompat-3/existential-type/README.md diff --git a/incompat-30/existential-type/src/main/scala-2.13/existential-type.scala b/incompat-3/existential-type/src/main/scala-2.13/existential-type.scala similarity index 100% rename from incompat-30/existential-type/src/main/scala-2.13/existential-type.scala rename to incompat-3/existential-type/src/main/scala-2.13/existential-type.scala diff --git a/incompat-30/existential-type/src/main/scala/existential-type.scala b/incompat-3/existential-type/src/main/scala/existential-type.scala similarity index 100% rename from incompat-30/existential-type/src/main/scala/existential-type.scala rename to incompat-3/existential-type/src/main/scala/existential-type.scala diff --git a/incompat-30/explicit-call-to-unapply/README.md b/incompat-3/explicit-call-to-unapply/README.md similarity index 100% rename from incompat-30/explicit-call-to-unapply/README.md rename to incompat-3/explicit-call-to-unapply/README.md diff --git a/incompat-30/explicit-call-to-unapply/src/main/scala-2.13/explicit-call-to-unapply.scala b/incompat-3/explicit-call-to-unapply/src/main/scala-2.13/explicit-call-to-unapply.scala similarity index 100% rename from incompat-30/explicit-call-to-unapply/src/main/scala-2.13/explicit-call-to-unapply.scala rename to incompat-3/explicit-call-to-unapply/src/main/scala-2.13/explicit-call-to-unapply.scala diff --git a/incompat-30/explicit-call-to-unapply/src/main/scala/explicit-call-to-unapply.scala b/incompat-3/explicit-call-to-unapply/src/main/scala/explicit-call-to-unapply.scala similarity index 100% rename from incompat-30/explicit-call-to-unapply/src/main/scala/explicit-call-to-unapply.scala rename to incompat-3/explicit-call-to-unapply/src/main/scala/explicit-call-to-unapply.scala diff --git a/incompat-30/implicit-view/README.md b/incompat-3/implicit-view/README.md similarity index 100% rename from incompat-30/implicit-view/README.md rename to incompat-3/implicit-view/README.md diff --git a/incompat-30/implicit-view/src/main/scala-2.13/implicit-view.scala b/incompat-3/implicit-view/src/main/scala-2.13/implicit-view.scala similarity index 100% rename from incompat-30/implicit-view/src/main/scala-2.13/implicit-view.scala rename to incompat-3/implicit-view/src/main/scala-2.13/implicit-view.scala diff --git a/incompat-30/implicit-view/src/main/scala/implicit-view.scala b/incompat-3/implicit-view/src/main/scala/implicit-view.scala similarity index 100% rename from incompat-30/implicit-view/src/main/scala/implicit-view.scala rename to incompat-3/implicit-view/src/main/scala/implicit-view.scala diff --git a/incompat-30/indent-argument/README.md b/incompat-3/indent-argument/README.md similarity index 100% rename from incompat-30/indent-argument/README.md rename to incompat-3/indent-argument/README.md diff --git a/incompat-30/indent-argument/src/main/scala-2.13/indent-argument.scala b/incompat-3/indent-argument/src/main/scala-2.13/indent-argument.scala similarity index 100% rename from incompat-30/indent-argument/src/main/scala-2.13/indent-argument.scala rename to incompat-3/indent-argument/src/main/scala-2.13/indent-argument.scala diff --git a/incompat-30/indent-argument/src/main/scala/indent-argument.scala b/incompat-3/indent-argument/src/main/scala/indent-argument.scala similarity index 100% rename from incompat-30/indent-argument/src/main/scala/indent-argument.scala rename to incompat-3/indent-argument/src/main/scala/indent-argument.scala diff --git a/incompat-30/indentation/README.md b/incompat-3/indentation/README.md similarity index 100% rename from incompat-30/indentation/README.md rename to incompat-3/indentation/README.md diff --git a/incompat-30/indentation/indentation-1/src/main/scala-2.13/indentation.scala b/incompat-3/indentation/indentation-1/src/main/scala-2.13/indentation.scala similarity index 100% rename from incompat-30/indentation/indentation-1/src/main/scala-2.13/indentation.scala rename to incompat-3/indentation/indentation-1/src/main/scala-2.13/indentation.scala diff --git a/incompat-30/indentation/indentation-1/src/main/scala/indentation.scala b/incompat-3/indentation/indentation-1/src/main/scala/indentation.scala similarity index 100% rename from incompat-30/indentation/indentation-1/src/main/scala/indentation.scala rename to incompat-3/indentation/indentation-1/src/main/scala/indentation.scala diff --git a/incompat-30/infer-return-type/README.md b/incompat-3/infer-return-type/README.md similarity index 100% rename from incompat-30/infer-return-type/README.md rename to incompat-3/infer-return-type/README.md diff --git a/incompat-30/infer-return-type/src/main/scala-2.13/infer-return-type.scala b/incompat-3/infer-return-type/src/main/scala-2.13/infer-return-type.scala similarity index 100% rename from incompat-30/infer-return-type/src/main/scala-2.13/infer-return-type.scala rename to incompat-3/infer-return-type/src/main/scala-2.13/infer-return-type.scala diff --git a/incompat-30/infer-return-type/src/main/scala/infer-return-type.scala b/incompat-3/infer-return-type/src/main/scala/infer-return-type.scala similarity index 100% rename from incompat-30/infer-return-type/src/main/scala/infer-return-type.scala rename to incompat-3/infer-return-type/src/main/scala/infer-return-type.scala diff --git a/incompat-30/inheritance-shadowing/README.md b/incompat-3/inheritance-shadowing/README.md similarity index 100% rename from incompat-30/inheritance-shadowing/README.md rename to incompat-3/inheritance-shadowing/README.md diff --git a/incompat-30/inheritance-shadowing/src/main/scala-2.13/inheritance-shadowing.scala b/incompat-3/inheritance-shadowing/src/main/scala-2.13/inheritance-shadowing.scala similarity index 100% rename from incompat-30/inheritance-shadowing/src/main/scala-2.13/inheritance-shadowing.scala rename to incompat-3/inheritance-shadowing/src/main/scala-2.13/inheritance-shadowing.scala diff --git a/incompat-30/inheritance-shadowing/src/main/scala/inheritance-shadowing.scala b/incompat-3/inheritance-shadowing/src/main/scala/inheritance-shadowing.scala similarity index 100% rename from incompat-30/inheritance-shadowing/src/main/scala/inheritance-shadowing.scala rename to incompat-3/inheritance-shadowing/src/main/scala/inheritance-shadowing.scala diff --git a/incompat-30/keywords/README.md b/incompat-3/keywords/README.md similarity index 100% rename from incompat-30/keywords/README.md rename to incompat-3/keywords/README.md diff --git a/incompat-30/keywords/src/main/scala-2.13/keywords.scala b/incompat-3/keywords/src/main/scala-2.13/keywords.scala similarity index 100% rename from incompat-30/keywords/src/main/scala-2.13/keywords.scala rename to incompat-3/keywords/src/main/scala-2.13/keywords.scala diff --git a/incompat-30/keywords/src/main/scala/keywords.scala b/incompat-3/keywords/src/main/scala/keywords.scala similarity index 100% rename from incompat-30/keywords/src/main/scala/keywords.scala rename to incompat-3/keywords/src/main/scala/keywords.scala diff --git a/incompat-30/lambda-params/.scalafix.conf b/incompat-3/lambda-params/.scalafix.conf similarity index 100% rename from incompat-30/lambda-params/.scalafix.conf rename to incompat-3/lambda-params/.scalafix.conf diff --git a/incompat-30/lambda-params/README.md b/incompat-3/lambda-params/README.md similarity index 100% rename from incompat-30/lambda-params/README.md rename to incompat-3/lambda-params/README.md diff --git a/incompat-30/lambda-params/src/main/scala-2.13/lambda-params.scala b/incompat-3/lambda-params/src/main/scala-2.13/lambda-params.scala similarity index 100% rename from incompat-30/lambda-params/src/main/scala-2.13/lambda-params.scala rename to incompat-3/lambda-params/src/main/scala-2.13/lambda-params.scala diff --git a/incompat-30/lambda-params/src/main/scala/lambda-params.scala b/incompat-3/lambda-params/src/main/scala/lambda-params.scala similarity index 100% rename from incompat-30/lambda-params/src/main/scala/lambda-params.scala rename to incompat-3/lambda-params/src/main/scala/lambda-params.scala diff --git a/incompat-30/pattern-match/README.md b/incompat-3/pattern-match/README.md similarity index 100% rename from incompat-30/pattern-match/README.md rename to incompat-3/pattern-match/README.md diff --git a/incompat-30/pattern-match/src/main/scala-2.13/pattern-match.scala b/incompat-3/pattern-match/src/main/scala-2.13/pattern-match.scala similarity index 100% rename from incompat-30/pattern-match/src/main/scala-2.13/pattern-match.scala rename to incompat-3/pattern-match/src/main/scala-2.13/pattern-match.scala diff --git a/incompat-30/pattern-match/src/main/scala/pattern-match.scala b/incompat-3/pattern-match/src/main/scala/pattern-match.scala similarity index 100% rename from incompat-30/pattern-match/src/main/scala/pattern-match.scala rename to incompat-3/pattern-match/src/main/scala/pattern-match.scala diff --git a/incompat-30/procedure-syntax/.scalafix.conf b/incompat-3/procedure-syntax/.scalafix.conf similarity index 100% rename from incompat-30/procedure-syntax/.scalafix.conf rename to incompat-3/procedure-syntax/.scalafix.conf diff --git a/incompat-30/procedure-syntax/README.md b/incompat-3/procedure-syntax/README.md similarity index 100% rename from incompat-30/procedure-syntax/README.md rename to incompat-3/procedure-syntax/README.md diff --git a/incompat-30/procedure-syntax/src/main/scala-2.13/procedure-syntax.scala b/incompat-3/procedure-syntax/src/main/scala-2.13/procedure-syntax.scala similarity index 100% rename from incompat-30/procedure-syntax/src/main/scala-2.13/procedure-syntax.scala rename to incompat-3/procedure-syntax/src/main/scala-2.13/procedure-syntax.scala diff --git a/incompat-30/procedure-syntax/src/main/scala/procedure-syntax.scala b/incompat-3/procedure-syntax/src/main/scala/procedure-syntax.scala similarity index 100% rename from incompat-30/procedure-syntax/src/main/scala/procedure-syntax.scala rename to incompat-3/procedure-syntax/src/main/scala/procedure-syntax.scala diff --git a/incompat-30/reflective-call/README.md b/incompat-3/reflective-call/README.md similarity index 100% rename from incompat-30/reflective-call/README.md rename to incompat-3/reflective-call/README.md diff --git a/incompat-30/reflective-call/src/main/scala-2.13/reflective-call.scala b/incompat-3/reflective-call/src/main/scala-2.13/reflective-call.scala similarity index 100% rename from incompat-30/reflective-call/src/main/scala-2.13/reflective-call.scala rename to incompat-3/reflective-call/src/main/scala-2.13/reflective-call.scala diff --git a/incompat-30/reflective-call/src/main/scala/reflective-call.scala b/incompat-3/reflective-call/src/main/scala/reflective-call.scala similarity index 100% rename from incompat-30/reflective-call/src/main/scala/reflective-call.scala rename to incompat-3/reflective-call/src/main/scala/reflective-call.scala diff --git a/incompat-30/restricted-operator/README.md b/incompat-3/restricted-operator/README.md similarity index 100% rename from incompat-30/restricted-operator/README.md rename to incompat-3/restricted-operator/README.md diff --git a/incompat-30/restricted-operator/src/main/scala-2.13/restricted-operator.scala b/incompat-3/restricted-operator/src/main/scala-2.13/restricted-operator.scala similarity index 100% rename from incompat-30/restricted-operator/src/main/scala-2.13/restricted-operator.scala rename to incompat-3/restricted-operator/src/main/scala-2.13/restricted-operator.scala diff --git a/incompat-30/restricted-operator/src/main/scala/restricted-operator.scala b/incompat-3/restricted-operator/src/main/scala/restricted-operator.scala similarity index 100% rename from incompat-30/restricted-operator/src/main/scala/restricted-operator.scala rename to incompat-3/restricted-operator/src/main/scala/restricted-operator.scala diff --git a/incompat-30/symbol-literals/README.md b/incompat-3/symbol-literals/README.md similarity index 100% rename from incompat-30/symbol-literals/README.md rename to incompat-3/symbol-literals/README.md diff --git a/incompat-30/symbol-literals/src/main/scala-2.13/symbol-literals.scala b/incompat-3/symbol-literals/src/main/scala-2.13/symbol-literals.scala similarity index 100% rename from incompat-30/symbol-literals/src/main/scala-2.13/symbol-literals.scala rename to incompat-3/symbol-literals/src/main/scala-2.13/symbol-literals.scala diff --git a/incompat-30/symbol-literals/src/main/scala/symbol-literals.scala b/incompat-3/symbol-literals/src/main/scala/symbol-literals.scala similarity index 100% rename from incompat-30/symbol-literals/src/main/scala/symbol-literals.scala rename to incompat-3/symbol-literals/src/main/scala/symbol-literals.scala diff --git a/incompat-30/type-infer-10/README.md b/incompat-3/type-infer-10/README.md similarity index 100% rename from incompat-30/type-infer-10/README.md rename to incompat-3/type-infer-10/README.md diff --git a/incompat-30/type-infer-10/src/main/scala-2.13/type-infer.scala b/incompat-3/type-infer-10/src/main/scala-2.13/type-infer.scala similarity index 100% rename from incompat-30/type-infer-10/src/main/scala-2.13/type-infer.scala rename to incompat-3/type-infer-10/src/main/scala-2.13/type-infer.scala diff --git a/incompat-30/type-infer-10/src/main/scala/type-infer.scala b/incompat-3/type-infer-10/src/main/scala/type-infer.scala similarity index 100% rename from incompat-30/type-infer-10/src/main/scala/type-infer.scala rename to incompat-3/type-infer-10/src/main/scala/type-infer.scala diff --git a/incompat-30/type-infer-3/README.md b/incompat-3/type-infer-3/README.md similarity index 100% rename from incompat-30/type-infer-3/README.md rename to incompat-3/type-infer-3/README.md diff --git a/incompat-30/type-infer-3/src/main/scala-2.13/type-infer.scala b/incompat-3/type-infer-3/src/main/scala-2.13/type-infer.scala similarity index 100% rename from incompat-30/type-infer-3/src/main/scala-2.13/type-infer.scala rename to incompat-3/type-infer-3/src/main/scala-2.13/type-infer.scala diff --git a/incompat-30/type-infer-3/src/main/scala/type-infer.scala b/incompat-3/type-infer-3/src/main/scala/type-infer.scala similarity index 100% rename from incompat-30/type-infer-3/src/main/scala/type-infer.scala rename to incompat-3/type-infer-3/src/main/scala/type-infer.scala diff --git a/incompat-30/type-infer-4/README.md b/incompat-3/type-infer-4/README.md similarity index 100% rename from incompat-30/type-infer-4/README.md rename to incompat-3/type-infer-4/README.md diff --git a/incompat-30/type-infer-4/src/main/scala-2.13/type-infer.scala b/incompat-3/type-infer-4/src/main/scala-2.13/type-infer.scala similarity index 100% rename from incompat-30/type-infer-4/src/main/scala-2.13/type-infer.scala rename to incompat-3/type-infer-4/src/main/scala-2.13/type-infer.scala diff --git a/incompat-30/type-infer-4/src/main/scala/type-infer.scala b/incompat-3/type-infer-4/src/main/scala/type-infer.scala similarity index 100% rename from incompat-30/type-infer-4/src/main/scala/type-infer.scala rename to incompat-3/type-infer-4/src/main/scala/type-infer.scala diff --git a/incompat-30/type-infer-5/README.md b/incompat-3/type-infer-5/README.md similarity index 100% rename from incompat-30/type-infer-5/README.md rename to incompat-3/type-infer-5/README.md diff --git a/incompat-30/type-infer-5/src/main/scala-2.13/type-infer.scala b/incompat-3/type-infer-5/src/main/scala-2.13/type-infer.scala similarity index 100% rename from incompat-30/type-infer-5/src/main/scala-2.13/type-infer.scala rename to incompat-3/type-infer-5/src/main/scala-2.13/type-infer.scala diff --git a/incompat-30/type-infer-5/src/main/scala/type-infer.scala b/incompat-3/type-infer-5/src/main/scala/type-infer.scala similarity index 100% rename from incompat-30/type-infer-5/src/main/scala/type-infer.scala rename to incompat-3/type-infer-5/src/main/scala/type-infer.scala diff --git a/incompat-30/type-infer-9/README.md b/incompat-3/type-infer-9/README.md similarity index 100% rename from incompat-30/type-infer-9/README.md rename to incompat-3/type-infer-9/README.md diff --git a/incompat-30/type-infer-9/src/main/scala-2.13/type-infer.scala b/incompat-3/type-infer-9/src/main/scala-2.13/type-infer.scala similarity index 100% rename from incompat-30/type-infer-9/src/main/scala-2.13/type-infer.scala rename to incompat-3/type-infer-9/src/main/scala-2.13/type-infer.scala diff --git a/incompat-30/type-infer-9/src/main/scala/type-infer.scala b/incompat-3/type-infer-9/src/main/scala/type-infer.scala similarity index 100% rename from incompat-30/type-infer-9/src/main/scala/type-infer.scala rename to incompat-3/type-infer-9/src/main/scala/type-infer.scala diff --git a/incompat-30/type-of-implicit-def/.scalafix.conf b/incompat-3/type-of-implicit-def/.scalafix.conf similarity index 100% rename from incompat-30/type-of-implicit-def/.scalafix.conf rename to incompat-3/type-of-implicit-def/.scalafix.conf diff --git a/incompat-30/type-of-implicit-def/README.md b/incompat-3/type-of-implicit-def/README.md similarity index 100% rename from incompat-30/type-of-implicit-def/README.md rename to incompat-3/type-of-implicit-def/README.md diff --git a/incompat-30/type-of-implicit-def/src/main/scala-2.13/type-of-implicit-def.scala b/incompat-3/type-of-implicit-def/src/main/scala-2.13/type-of-implicit-def.scala similarity index 100% rename from incompat-30/type-of-implicit-def/src/main/scala-2.13/type-of-implicit-def.scala rename to incompat-3/type-of-implicit-def/src/main/scala-2.13/type-of-implicit-def.scala diff --git a/incompat-30/type-of-implicit-def/src/main/scala/type-of-implicit-def.scala b/incompat-3/type-of-implicit-def/src/main/scala/type-of-implicit-def.scala similarity index 100% rename from incompat-30/type-of-implicit-def/src/main/scala/type-of-implicit-def.scala rename to incompat-3/type-of-implicit-def/src/main/scala/type-of-implicit-def.scala diff --git a/incompat-30/type-param-identifier/README.md b/incompat-3/type-param-identifier/README.md similarity index 100% rename from incompat-30/type-param-identifier/README.md rename to incompat-3/type-param-identifier/README.md diff --git a/incompat-30/type-param-identifier/src/main/scala-2.13/type-param-identifier.scala b/incompat-3/type-param-identifier/src/main/scala-2.13/type-param-identifier.scala similarity index 100% rename from incompat-30/type-param-identifier/src/main/scala-2.13/type-param-identifier.scala rename to incompat-3/type-param-identifier/src/main/scala-2.13/type-param-identifier.scala diff --git a/incompat-30/type-param-identifier/src/main/scala/type-param-identifier.scala b/incompat-3/type-param-identifier/src/main/scala/type-param-identifier.scala similarity index 100% rename from incompat-30/type-param-identifier/src/main/scala/type-param-identifier.scala rename to incompat-3/type-param-identifier/src/main/scala/type-param-identifier.scala diff --git a/incompat-30/value-eta-expansion/.scalafix.conf b/incompat-3/value-eta-expansion/.scalafix.conf similarity index 100% rename from incompat-30/value-eta-expansion/.scalafix.conf rename to incompat-3/value-eta-expansion/.scalafix.conf diff --git a/incompat-30/value-eta-expansion/README.md b/incompat-3/value-eta-expansion/README.md similarity index 100% rename from incompat-30/value-eta-expansion/README.md rename to incompat-3/value-eta-expansion/README.md diff --git a/incompat-30/value-eta-expansion/src/main/scala-2.13/value-eta-expansion.scala b/incompat-3/value-eta-expansion/src/main/scala-2.13/value-eta-expansion.scala similarity index 100% rename from incompat-30/value-eta-expansion/src/main/scala-2.13/value-eta-expansion.scala rename to incompat-3/value-eta-expansion/src/main/scala-2.13/value-eta-expansion.scala diff --git a/incompat-30/value-eta-expansion/src/main/scala/value-eta-expansion.scala b/incompat-3/value-eta-expansion/src/main/scala/value-eta-expansion.scala similarity index 100% rename from incompat-30/value-eta-expansion/src/main/scala/value-eta-expansion.scala rename to incompat-3/value-eta-expansion/src/main/scala/value-eta-expansion.scala diff --git a/incompat-30/variance/README.md b/incompat-3/variance/README.md similarity index 100% rename from incompat-30/variance/README.md rename to incompat-3/variance/README.md diff --git a/incompat-30/variance/src/main/scala-2.13/variance.scala b/incompat-3/variance/src/main/scala-2.13/variance.scala similarity index 100% rename from incompat-30/variance/src/main/scala-2.13/variance.scala rename to incompat-3/variance/src/main/scala-2.13/variance.scala diff --git a/incompat-30/variance/src/main/scala/variance.scala b/incompat-3/variance/src/main/scala/variance.scala similarity index 100% rename from incompat-30/variance/src/main/scala/variance.scala rename to incompat-3/variance/src/main/scala/variance.scala diff --git a/incompat-30/view-bound/README.md b/incompat-3/view-bound/README.md similarity index 100% rename from incompat-30/view-bound/README.md rename to incompat-3/view-bound/README.md diff --git a/incompat-30/view-bound/src/main/scala-2.13/view-bound.scala b/incompat-3/view-bound/src/main/scala-2.13/view-bound.scala similarity index 100% rename from incompat-30/view-bound/src/main/scala-2.13/view-bound.scala rename to incompat-3/view-bound/src/main/scala-2.13/view-bound.scala diff --git a/incompat-30/view-bound/src/main/scala/view-bound.scala b/incompat-3/view-bound/src/main/scala/view-bound.scala similarity index 100% rename from incompat-30/view-bound/src/main/scala/view-bound.scala rename to incompat-3/view-bound/src/main/scala/view-bound.scala diff --git a/incompat-30/wildcard-argument/README.md b/incompat-3/wildcard-argument/README.md similarity index 100% rename from incompat-30/wildcard-argument/README.md rename to incompat-3/wildcard-argument/README.md diff --git a/incompat-30/wildcard-argument/src/main/scala-2.13/wildcard-argument.scala b/incompat-3/wildcard-argument/src/main/scala-2.13/wildcard-argument.scala similarity index 100% rename from incompat-30/wildcard-argument/src/main/scala-2.13/wildcard-argument.scala rename to incompat-3/wildcard-argument/src/main/scala-2.13/wildcard-argument.scala diff --git a/incompat-30/wildcard-argument/src/main/scala/wildcard-argument.scala b/incompat-3/wildcard-argument/src/main/scala/wildcard-argument.scala similarity index 100% rename from incompat-30/wildcard-argument/src/main/scala/wildcard-argument.scala rename to incompat-3/wildcard-argument/src/main/scala/wildcard-argument.scala diff --git a/incompat-30/type-infer-1/README.md b/incompat-30/type-infer-1/README.md deleted file mode 100644 index 78e29c2b..00000000 --- a/incompat-30/type-infer-1/README.md +++ /dev/null @@ -1,11 +0,0 @@ -This incompatibility is inspired by [endpoints4s](https://github.com/endpoints4s/endpoints4s) from this [original commit](https://github.com/endpoints4s/endpoints4s/commit/2b57a0be3978c92eb89c6ab766eb93b5789c171f#diff-d6fdde1c26979b1076788de7854e2ddc). - -As of `0.25.0-RC2` the error message is: - -``` -[error] -- [E007] Type Mismatch Error: /home/piquerez/scalacenter/scala-3-migration-guide/incompat/type-infer-1/src/main/scala-2.13/type-infer.scala:10:64 -[error] 10 | def bar(f: String => Int): Option[Int] = Some(inner(foo)).map(f) -[error] | ^ -[error] | Found: (f : String => Int) -[error] | Required: Any => Int -``` \ No newline at end of file diff --git a/incompat-30/type-infer-1/src/main/scala-2.13/type-infer.scala b/incompat-30/type-infer-1/src/main/scala-2.13/type-infer.scala deleted file mode 100644 index a0b44247..00000000 --- a/incompat-30/type-infer-1/src/main/scala-2.13/type-infer.scala +++ /dev/null @@ -1,11 +0,0 @@ -trait Foo { - type Inner -} - -object Foo { - val foo: Foo { type Inner = String } = ??? - - def inner(foo: Foo): foo.Inner = ??? - - def bar(f: String => Int): Option[Int] = Some(inner(foo)).map(f) -} diff --git a/incompat-30/type-infer-1/src/main/scala/type-infer.scala b/incompat-30/type-infer-1/src/main/scala/type-infer.scala deleted file mode 100644 index b2c9d8b9..00000000 --- a/incompat-30/type-infer-1/src/main/scala/type-infer.scala +++ /dev/null @@ -1,11 +0,0 @@ -trait Foo { - type Inner -} - -object Foo { - val foo: Foo { type Inner = String } = ??? - - def inner(foo: Foo): foo.Inner = ??? - - def bar(f: String => Int): Option[Int] = Some[String](inner(foo)).map(f) -} diff --git a/incompat-30/type-infer-7/README.md b/incompat-30/type-infer-7/README.md deleted file mode 100644 index a771f88c..00000000 --- a/incompat-30/type-infer-7/README.md +++ /dev/null @@ -1,14 +0,0 @@ -This incompatibility is inspired by [this commit](https://github.com/lihaoyi/upickle/commit/7841a7ea20cf79b540ec7a46b2fb0c34172d8714) in [upickle](https://github.com/lihaoyi/upickle) - -As of `0.25.0-RC2` the error message is -``` -[error] -- Error: /home/piquerez/scalacenter/scala-3-migration-guide/incompat/type-infer-7/src/main/scala-2.13/type-infer.scala:15:23 -[error] 15 | rw(Map(List(1) -> 1)) -[error] | ^ -[error] |no implicit argument of type Writer[Map[C[Int], Int]] was found for an implicit parameter of method rw in object Test. -[error] |I found: -[error] | -[error] | writer -[error] | -[error] |But value writer in object Test does not match type Writer[Map[C[Int], Int]]. -``` diff --git a/incompat-30/type-infer-7/src/main/scala-2.13/type-infer.scala b/incompat-30/type-infer-7/src/main/scala-2.13/type-infer.scala deleted file mode 100644 index ea4d2f5c..00000000 --- a/incompat-30/type-infer-7/src/main/scala-2.13/type-infer.scala +++ /dev/null @@ -1,16 +0,0 @@ -import scala.collection.Factory - -trait Reader[A] -trait Writer[A] - -object Test { - def rw[T: Reader: Writer](a: T): Unit = ??? - - implicit def seqLikeReader[C[_], T](implicit r: Reader[T], factory: Factory[T, C[T]]): Reader[C[T]] = ??? - implicit def mapReader[A: Reader, B: Reader]: Reader[Map[A, B]] = ??? - implicit val intReader: Reader[Int] = ??? - - implicit val writer: Writer[Map[List[Int], Int]] = ??? - - rw(Map(List(1) -> 1)) -} diff --git a/incompat-30/type-infer-7/src/main/scala/type-infer.scala b/incompat-30/type-infer-7/src/main/scala/type-infer.scala deleted file mode 100644 index da89857c..00000000 --- a/incompat-30/type-infer-7/src/main/scala/type-infer.scala +++ /dev/null @@ -1,16 +0,0 @@ -import scala.collection.Factory - -trait Reader[A] -trait Writer[A] - -object Test { - def rw[T: Reader: Writer](a: T): Unit = ??? - - implicit def seqLikeReader[C[_], T](implicit r: Reader[T], factory: Factory[T, C[T]]): Reader[C[T]] = ??? - implicit def mapReader[A: Reader, B: Reader]: Reader[Map[A, B]] = ??? - implicit val intReader: Reader[Int] = ??? - - implicit val writer: Writer[Map[List[Int], Int]] = ??? - - rw[Map[List[Int], Int]](Map(List(1) -> 1)) -} diff --git a/incompat.sbt b/incompat.sbt index b0a708d6..26d943de 100644 --- a/incompat.sbt +++ b/incompat.sbt @@ -13,13 +13,13 @@ ThisBuild /scalafixScalaBinaryVersion := CrossVersion.binaryScalaVersion(scalaVe List of all incompatibilities between Scala 2.13 and Scala 3.0 You can run: - - `++0.26.0; / test` to validate the incompatibility as well as the Dotty rewrite if it has one + - `++3.3.0; / test` to validate the incompatibility as well as the Dotty rewrite if it has one - `++2.13.3; / test` to cross-compile the proposed solution and validate the scalafix rule if it has one - where can be a single incompatibility or `incompat30` for all incompatibilities + where can be a single incompatibility or `incompat3` for all incompatibilities */ -lazy val `incompat-30` = project.in(file("incompat-30")) +lazy val `incompat-3` = project.in(file("incompat-3")) .configs(CompileBackward) - .aggregate(dotty30MigrationRewrites: _*) + .aggregate(dotty3MigrationRewrites: _*) .aggregate(typeInferIncompats: _*) .aggregate(otherIncompats: _*) @@ -28,18 +28,18 @@ lazy val `incompat-30` = project.in(file("incompat-30")) It only contains the already existing future-migration rewrites in Dotty You can run: - - `++0.26.0; / test` to validate the Dotty rewrite - where can be a single incompatibility or `incompat31` for all incompatibilities + - `++3.3.0; / test` to validate the Dotty rewrite + where can be a single incompatibility or `incompat3Future` for all incompatibilities */ -lazy val `incompat-31` = project.in(file("incompat-31")) +lazy val `incompat-3-future` = project.in(file("incompat-3-future")) .configs(CompileBackward) - .aggregate(dotty31MigrationRewrites: _*) + .aggregate(dotty3FutureMigrationRewrites: _*) /* Dotty migration rewrites between 2.13 and 3.0 `dotc -source:3.0-migration -rewrite` */ -lazy val dotty30MigrationRewrites = Seq[ProjectReference]( +lazy val dotty3MigrationRewrites = Seq[ProjectReference]( keywords, lambdaParams, symbolLiterals, @@ -51,27 +51,27 @@ lazy val dotty30MigrationRewrites = Seq[ProjectReference]( valueEtaExpansion ) -lazy val keywords = project.in(file("incompat-30/keywords")).dotty30MigrationRewriteSettings +lazy val keywords = project.in(file("incompat-3/keywords")).dotty3MigrationRewriteSettings lazy val lambdaParams = - project.in(file("incompat-30/lambda-params")) - .dotty30MigrationRewriteSettings + project.in(file("incompat-3/lambda-params")) + .dotty3MigrationRewriteSettings .settings(scalafixRewrite := true) -lazy val symbolLiterals = project.in(file("incompat-30/symbol-literals")).dotty30MigrationRewriteSettings -lazy val indentArgument = project.in(file("incompat-30/indent-argument")).dotty30MigrationRewriteSettings -lazy val doWhile = project.in(file("incompat-30/do-while")).dotty30MigrationRewriteSettings +lazy val symbolLiterals = project.in(file("incompat-3/symbol-literals")).dotty3MigrationRewriteSettings +lazy val indentArgument = project.in(file("incompat-3/indent-argument")).dotty3MigrationRewriteSettings +lazy val doWhile = project.in(file("incompat-3/do-while")).dotty3MigrationRewriteSettings lazy val procedureSyntax = - project.in(file("incompat-30/procedure-syntax")) - .dotty30MigrationRewriteSettings + project.in(file("incompat-3/procedure-syntax")) + .dotty3MigrationRewriteSettings .settings(scalafixRewrite := true) lazy val autoApplication = - project.in(file("incompat-30/auto-application")) - .dotty30MigrationRewriteSettings + project.in(file("incompat-3/auto-application")) + .dotty3MigrationRewriteSettings .settings(scalafixRewrite := true) -lazy val inheritanceShadowing = project.in(file("incompat-30/inheritance-shadowing")).dotty30MigrationRewriteSettings +lazy val inheritanceShadowing = project.in(file("incompat-3/inheritance-shadowing")).dotty3MigrationRewriteSettings lazy val valueEtaExpansion = - project.in(file("incompat-30/value-eta-expansion")) - .dotty30MigrationRewriteSettings + project.in(file("incompat-3/value-eta-expansion")) + .dotty3MigrationRewriteSettings // does not add enclosing parens like dotc does // .settings(scalafixRewrite := true) @@ -79,22 +79,19 @@ lazy val valueEtaExpansion = Type inference incompatibilities */ lazy val typeInferIncompats = Seq[ProjectReference]( - typeInfer1, typeInfer3, typeInfer4, typeInfer5, - typeInfer7, typeInfer9, - typeInfer10 + typeInfer10, ) -lazy val typeInfer1 = project.in(file("incompat-30/type-infer-1")).incompat30Settings -lazy val typeInfer3 = project.in(file("incompat-30/type-infer-3")).incompat30Settings -lazy val typeInfer4 = project.in(file("incompat-30/type-infer-4")).incompat30Settings -lazy val typeInfer5 = project.in(file("incompat-30/type-infer-5")).incompat30Settings -lazy val typeInfer7 = project.in(file("incompat-30/type-infer-7")).incompat30Settings -lazy val typeInfer9 = project.in(file("incompat-30/type-infer-9")).incompat30Settings -lazy val typeInfer10 = project.in(file("incompat-30/type-infer-10")).incompat30Settings + +lazy val typeInfer3 = project.in(file("incompat-3/type-infer-3")).incompat3Settings +lazy val typeInfer4 = project.in(file("incompat-3/type-infer-4")).incompat3Settings +lazy val typeInfer5 = project.in(file("incompat-3/type-infer-5")).incompat3Settings +lazy val typeInfer9 = project.in(file("incompat-3/type-infer-9")).incompat3Settings +lazy val typeInfer10 = project.in(file("incompat-3/type-infer-10")).incompat3Settings /* Other incompatibilities @@ -125,53 +122,53 @@ lazy val otherIncompats = Seq[ProjectReference]( ) // Syntactic incompatibilities -lazy val anonymousTypeParam = project.in(file("incompat-30/anonymous-type-param")).incompat30Settings -lazy val indentation1 = project.in(file("incompat-30/indentation/indentation-1")).incompat30Settings -lazy val restrictedOperator = project.in(file("incompat-30/restricted-operator")).incompat30Settings -lazy val typeParamIdentifier = project.in(file("incompat-30/type-param-identifier")).incompat30Settings +lazy val anonymousTypeParam = project.in(file("incompat-3/anonymous-type-param")).incompat3Settings +lazy val indentation1 = project.in(file("incompat-3/indentation/indentation-1")).incompat3Settings +lazy val restrictedOperator = project.in(file("incompat-3/restricted-operator")).incompat3Settings +lazy val typeParamIdentifier = project.in(file("incompat-3/type-param-identifier")).incompat3Settings // Changed or dropped features -lazy val abstractOverride = project.in(file("incompat-30/abstract-override")).incompat30Settings -lazy val any2stringaddConversion = project.in(file("incompat-30/any2stringadd-conversion")).incompat30Settings -lazy val byNameParamTypeInfer = project.in(file("incompat-30/by-name-param-type-infer")).incompat30Settings -lazy val variance = project.in(file("incompat-30/variance")).incompat30Settings -lazy val earlyInitializer = project.in(file("incompat-30/early-initializer")).incompat30Settings -lazy val existentialType = project.in(file("incompat-30/existential-type")).incompat30Settings -lazy val wildcardArgument = project.in(file("incompat-30/wildcard-argument")).incompat30Settings -lazy val explicitCallToUnapply = project.in(file("incompat-30/explicit-call-to-unapply")).incompat30Settings -lazy val reflectiveCall = project.in(file("incompat-30/reflective-call")).incompat30Settings -lazy val caseClassCompanion = project.in(file("incompat-30/case-class-companion")).incompat30Settings -lazy val patternMatch = project.in(file("incompat-30/pattern-match")).incompat30Settings -lazy val `bean-property` = project.in(file("incompat-30/bean-property")).incompat30Settings -lazy val `infer-return-type` = project.in(file("incompat-30/infer-return-type")).incompat30Settings +lazy val abstractOverride = project.in(file("incompat-3/abstract-override")).incompat3Settings +lazy val any2stringaddConversion = project.in(file("incompat-3/any2stringadd-conversion")).incompat3Settings +lazy val byNameParamTypeInfer = project.in(file("incompat-3/by-name-param-type-infer")).incompat3Settings +lazy val variance = project.in(file("incompat-3/variance")).incompat3Settings +lazy val earlyInitializer = project.in(file("incompat-3/early-initializer")).incompat3Settings +lazy val existentialType = project.in(file("incompat-3/existential-type")).incompat3Settings +lazy val wildcardArgument = project.in(file("incompat-3/wildcard-argument")).incompat3Settings +lazy val explicitCallToUnapply = project.in(file("incompat-3/explicit-call-to-unapply")).incompat3Settings +lazy val reflectiveCall = project.in(file("incompat-3/reflective-call")).incompat3Settings +lazy val caseClassCompanion = project.in(file("incompat-3/case-class-companion")).incompat3Settings +lazy val patternMatch = project.in(file("incompat-3/pattern-match")).incompat3Settings +lazy val `bean-property` = project.in(file("incompat-3/bean-property")).incompat3Settings +lazy val `infer-return-type` = project.in(file("incompat-3/infer-return-type")).incompat3Settings // Contextual abstraction incompatibilities lazy val ambiguousConversion = - project.in(file("incompat-30/ambiguous-conversion")) - .incompat30Settings + project.in(file("incompat-3/ambiguous-conversion")) + .incompat3Settings .settings(scalacOptions += "-language:implicitConversions") lazy val typeOfImplicitDef = - project.in(file("incompat-30/type-of-implicit-def")) - .incompat30Settings + project.in(file("incompat-3/type-of-implicit-def")) + .incompat3Settings .settings(scalafixRewrite := true) -lazy val accessModifier = project.in(file("incompat-30/access-modifier")).incompat30Settings -lazy val viewBound = project.in(file("incompat-30/view-bound")) - .incompat30Settings +lazy val accessModifier = project.in(file("incompat-3/access-modifier")).incompat3Settings +lazy val viewBound = project.in(file("incompat-3/view-bound")) + .incompat3Settings .settings(scalacOptions += "-deprecation") // This one is a runtime incompatibility // It compiles but the runtime behavior is different // In this case Scala 3 throws an `AssertionError` lazy val implicitView = - project.in(file("incompat-30/implicit-view")) - .runtimeIncompat30Settings + project.in(file("incompat-3/implicit-view")) + .runtimeIncompat3Settings .settings(scalacOptions += "-language:implicitConversions") /* Dotty migration rewrites between 3.0 and 3.1 `dotc -source:future-migration -rewrite` */ -lazy val dotty31MigrationRewrites = Seq[ProjectReference]( +lazy val dotty3FutureMigrationRewrites = Seq[ProjectReference]( alphanumericInfix, contextBoundArg, etaExpansion, @@ -183,15 +180,15 @@ lazy val dotty31MigrationRewrites = Seq[ProjectReference]( // This one is not a migration rewrite but a 3.1 deprecation rewrite // `dotc -source:future -deprecation -rewrite` lazy val alphanumericInfix = - project.in(file("incompat-31/alphanumeric-infix")) - .dotty31MigrationRewriteSettings + project.in(file("incompat-3-future/alphanumeric-infix")) + .dotty3FutureMigrationRewriteSettings .settings( scalacOptions -= "-source:future-migration", scalacOptions ++= Seq("-source:future", "-deprecation") ) -lazy val contextBoundArg = project.in(file("incompat-31/context-bound-arg")).dotty31MigrationRewriteSettings -lazy val etaExpansion = project.in(file("incompat-31/eta-expansion")).dotty31MigrationRewriteSettings -lazy val implicitLambdaParam = project.in(file("incompat-31/implicit-lambda-param")).dotty31MigrationRewriteSettings -lazy val patternBinding = project.in(file("incompat-31/pattern-binding")).dotty31MigrationRewriteSettings -lazy val wildcard = new IncompatSettings(project.in(file("incompat-31/wildcard"))).dotty31MigrationRewriteSettings +lazy val contextBoundArg = project.in(file("incompat-3-future/context-bound-arg")).dotty3FutureMigrationRewriteSettings +lazy val etaExpansion = project.in(file("incompat-3-future/eta-expansion")).dotty3FutureMigrationRewriteSettings +lazy val implicitLambdaParam = project.in(file("incompat-3-future/implicit-lambda-param")).dotty3FutureMigrationRewriteSettings +lazy val patternBinding = project.in(file("incompat-3-future/pattern-binding")).dotty3FutureMigrationRewriteSettings +lazy val wildcard = new IncompatSettings(project.in(file("incompat-3-future/wildcard"))).dotty3FutureMigrationRewriteSettings diff --git a/project/IncompatSettings.scala b/project/IncompatSettings.scala index 3ad69d5f..0325658f 100644 --- a/project/IncompatSettings.scala +++ b/project/IncompatSettings.scala @@ -6,8 +6,8 @@ import Versions._ object IncompatSettings { val CompileBackward = Configuration.of("CompileBackward", "compile-bwd") val scala213SourceDir = settingKey[File]("Directory containing the Scala 2.13 sources") - val scala30SourceDir = settingKey[File]("Directory containing the Scala 3.0 sources") - val scala31SourceDir = settingKey[File]("Directory containing the Scala 3.1 sources") + val scala3SourceDir = settingKey[File]("Directory containing the Scala 3 sources") + val scala3FutureSourceDir = settingKey[File]("Directory containing the Scala 3.1 sources") val dottyRewrite = settingKey[Boolean]("Does this incompatibility have a Dotty rewrite?") val scalafixRewrite = settingKey[Boolean]("Does this incompatibility have a Scalafix rewrite?") val rewriteDir = settingKey[File]("Directory where the sources are rewritten by either Dotty or Scalafix") @@ -19,26 +19,26 @@ object IncompatSettings { class IncompatSettings(project: Project) { import IncompatSettings._ - def dotty30MigrationRewriteSettings = project.incompat30Settings.settings(dottyRewrite := true) + def dotty3MigrationRewriteSettings = project.incompat3Settings.settings(dottyRewrite := true) - def dotty31MigrationRewriteSettings = project.incompat31Settings.settings(dottyRewrite := true) + def dotty3FutureMigrationRewriteSettings = project.incompat3FutureSettings.settings(dottyRewrite := true) - def incompat30Settings: Project = project + def incompat3Settings: Project = project .configs(CompileBackward) .settings( inConfig(CompileBackward)(Defaults.configSettings), inConfig(CompileBackward)(scalafixConfigSettings(CompileBackward)), isScala3 := scalaVersion.value.startsWith("3"), - scalaVersion := scala30, - crossScalaVersions := List(scala213, scala30), + scalaVersion := scala3, + crossScalaVersions := List(scala213, scala3), scala213SourceDir := baseDirectory.value / s"src/main/scala-2.13", - scala30SourceDir := baseDirectory.value / s"src/main/scala", + scala3SourceDir := baseDirectory.value / s"src/main/scala", dottyRewrite := false, scalafixRewrite := false, rewriteDir := target.value / s"src-managed/main/scala", - Compile / unmanagedSourceDirectories := Seq(scala30SourceDir.value), + Compile / unmanagedSourceDirectories := Seq(scala3SourceDir.value), // we copy the scala213 sources into the target folder // because it might be rewritten by dotc or scalafix CompileBackward / sourceGenerators += Def.task { @@ -54,7 +54,7 @@ class IncompatSettings(project: Project) { }, // scalafix configuration - semanticdbVersion := "4.4.18", + semanticdbVersion := "4.8.8", semanticdbEnabled := !isScala3.value && scalafixRewrite.value, CompileBackward / scalafixConfig := Some(baseDirectory.value / ".scalafix.conf"), CompileBackward / scalafixOnCompile := !isScala3.value && scalafixRewrite.value, @@ -71,7 +71,7 @@ class IncompatSettings(project: Project) { scalaVersion.value, compileBwd, rewriteDir.value, - scala30SourceDir.value, + scala3SourceDir.value, logger ) else if (isScala3.value && !dottyRewrite.value) @@ -82,7 +82,7 @@ class IncompatSettings(project: Project) { scalaVersion.value, compileBwd, rewriteDir.value, - scala30SourceDir.value, + scala3SourceDir.value, logger ) else @@ -90,7 +90,7 @@ class IncompatSettings(project: Project) { } ) - def runtimeIncompat30Settings = project.incompat30Settings + def runtimeIncompat3Settings = project.incompat3Settings .settings( Test / test := { val logger = streams.value.log @@ -104,27 +104,26 @@ class IncompatSettings(project: Project) { } ) - def incompat31Settings = project + def incompat3FutureSettings = project .configs(CompileBackward) .settings( inConfig(CompileBackward)(Defaults.compileSettings), - scalaVersion := scala30, - scala30SourceDir := baseDirectory.value / s"src/main/scala-3.0", - scala31SourceDir := baseDirectory.value / s"src/main/scala", + scalaVersion := scala3, + scala3SourceDir := baseDirectory.value / s"src/main/scala-3.0", + scala3FutureSourceDir := baseDirectory.value / s"src/main/scala", dottyRewrite := false, rewriteDir := target.value / s"src-managed/main/scala", - Compile / unmanagedSourceDirectories := Seq(scala31SourceDir.value), - // we copy the scala30 sources into the target folder + Compile / unmanagedSourceDirectories := Seq(scala3FutureSourceDir.value), + // we copy the scala3 sources into the target folder // because they might be rewritten by dotc or scalafix CompileBackward / sourceGenerators += Def.task { val _ = (CompileBackward / clean).value // clean to force recompilation and rewrite - copySources(scala30SourceDir.value, rewriteDir.value) + copySources(scala3SourceDir.value, rewriteDir.value) }, CompileBackward / managedClasspath := (Compile / managedClasspath).value, CompileBackward / scalacOptions ++= { - if (dottyRewrite.value) - Seq(s"-source:future-migration", "-rewrite") + if (dottyRewrite.value) Seq(s"-source:future-migration", "-rewrite") else Seq.empty }, Test / test := { @@ -137,7 +136,7 @@ class IncompatSettings(project: Project) { scalaVersion.value, compileBwd, rewriteDir.value, - scala31SourceDir.value, + scala3FutureSourceDir.value, logger ) else diff --git a/project/Versions.scala b/project/Versions.scala index c027d090..3edf1c9b 100644 --- a/project/Versions.scala +++ b/project/Versions.scala @@ -1,9 +1,9 @@ object Versions { - val scala213 = "2.13.6" - val scala30 = "3.0.0" + val scala213 = "2.13.11" + val scala3 = "3.3.0" val sbtDotty = "0.5.3" val osLib = "0.7.7" val sourcecode = "0.2.7" - val scala3Migrate = "0.4.2" + val scala3Migrate = "0.5.1" val munit = "0.7.26" } diff --git a/project/build.properties b/project/build.properties index 10fd9eee..875b706a 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.5.5 +sbt.version=1.9.2 diff --git a/tutorials.sbt b/tutorials.sbt index 7048a1db..2895eb8c 100644 --- a/tutorials.sbt +++ b/tutorials.sbt @@ -3,8 +3,8 @@ import Versions._ lazy val `sbt-migration-tutorial` = project .in(file("tutorials/sbt-migration")) .settings( - scalaVersion := scala30, - crossScalaVersions := Seq(scala213, scala30), + scalaVersion := scala3, + crossScalaVersions := Seq(scala213, scala3), libraryDependencies ++= Seq( "org.typelevel" % "cats-core_2.13" % "2.1.1", "com.lihaoyi" %% "os-lib" % osLib, @@ -36,8 +36,8 @@ lazy val `sbt-migration-tutorial` = project lazy val `macro-cross-building-example` = project .in(file("tutorials/macro-cross-building/example")) .settings( - scalaVersion := scala30, - crossScalaVersions := Seq(scala213, scala30), + scalaVersion := scala3, + crossScalaVersions := Seq(scala213, scala3), libraryDependencies ++= { CrossVersion.partialVersion(scalaVersion.value) match { case Some((2, 13)) => Seq( @@ -54,7 +54,7 @@ lazy val `macro-cross-building-example` = project lazy val `macro-mixing-example` = project .in(file("tutorials/macro-mixing/example")) .settings( - scalaVersion := scala30 + scalaVersion := scala3 ) .dependsOn(`macro-mixing-example-compat`) @@ -70,8 +70,8 @@ lazy val `macro-mixing-example-compat` = project lazy val `macro-mixing-example-test` = project .in(file("tutorials/macro-mixing/example-test")) .settings( - scalaVersion := scala30, - crossScalaVersions := Seq(scala30, scala213), + scalaVersion := scala3, + crossScalaVersions := Seq(scala3, scala213), scalacOptions ++= { CrossVersion.partialVersion(scalaVersion.value) match { case Some((2, 13)) => Seq("-Ytasty-reader")