Skip to content

Commit

Permalink
WIP unit3: all changes applied so far
Browse files Browse the repository at this point in the history
This is the commit message scalacenter#2:

WIP unit3 to show code, not working
unit3 munit dep: exclude 2.13 and include munit_3 instead

WIP unit3 fixed some unit3 compilation errors, many  errors, all similar, on unit2* to fix

This is the commit message scalacenter#2:

fixed compilation error unit SaveExpect class ()

unit2Target2 fix with scalatest version to 3.2.0, but this shouldn't be bumped as per comment(breaking clients via eviction)

fix unit2Target2 by reintroducing scalatest 3.2.0 in unit libs for scala2 versions

unit3 fix Test/compilation errors

unit3 test RuleDecoderSuite: removed scalafix.v1.Rule rules not available in scala3: explicitResultTypes and ProcedureSintax

unit3 moved test ScalafixArgumentsSuite to scala-2, cause it depends on semanticdb-scalac_3.1.3

unit3 changed CliGitDiffSuite.'works on Patch' to not use ProcedureSyntaxRule cause not available for scala3

Revert "unit3 moved test ScalafixArgumentsSuite to scala-2, cause it depends on semanticdb-scalac_3.1.3"

This reverts commit 7bad87b.

unit3 ScalafixArgumentSuite compat/semanticdb split, version 2 pr comments applied

unit3 unmanagedresources folders for cross compilation, scalafmt and scalafixAll applied

unit3 introduced CompatSemanticdb for scala3 with semanticdb new options, fixed one unit test
  • Loading branch information
rvacaru authored and bjaglin committed Sep 23, 2022
1 parent e08e1cb commit 9a837de
Show file tree
Hide file tree
Showing 22 changed files with 202 additions and 244 deletions.
41 changes: 29 additions & 12 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -211,10 +211,7 @@ lazy val testkit = projectMatrix
isFullCrossVersion,
libraryDependencies += googleDiff,
libraryDependencies ++= {
if (!isScala3.value)
Seq(scalatest)
else
Seq("org.scalatest" %% "scalatest" % scalatest3V)
scalatestDeps.value
}
)
.defaultAxes(VirtualAxis.jvm)
Expand All @@ -231,14 +228,29 @@ lazy val unit = projectMatrix
testFrameworks += new TestFramework("munit.Framework"),
buildInfoPackage := "scalafix.tests",
buildInfoObject := "BuildInfo",
libraryDependencies ++= List(
jgit,
coursier,
scalatest.withRevision(
"3.2.13"
), // make sure testkit clients can use recent 3.x versions
scalametaTeskit
),
libraryDependencies ++= {
if (!isScala3.value) {
List(
jgit,
coursier,
scalametaTeskit,
scalatest.withRevision(
"3.2.13"
)
)
} else {
List(
jgit,
coursier
.exclude("org.scala-lang.modules", "scala-xml_2.13"),
scalametaTeskit
.exclude("com.lihaoyi", "sourcecode_2.13")
.exclude("org.scala-lang.modules", "scala-collection-compat_2.13")
.exclude("org.scalameta", "munit_2.13"),
("org.scalameta" %% "munit" % "0.7.29")
) ++ scalatestDeps.value,
}
},
Compile / compile / compileInputs := {
(Compile / compile / compileInputs)
.dependsOn(
Expand Down Expand Up @@ -329,6 +341,11 @@ lazy val unit = projectMatrix
}
)
.defaultAxes(VirtualAxis.jvm)
.jvmPlatform(
scalaVersions = Seq(scala3),
axisValues = Seq(TargetAxis(scala3)),
settings = Seq()
)
.jvmPlatform(
scalaVersions = Seq(scala212),
axisValues = Seq(TargetAxis(scala3)),
Expand Down
12 changes: 7 additions & 5 deletions project/Dependencies.scala
Original file line number Diff line number Diff line change
Expand Up @@ -34,13 +34,14 @@ object Dependencies {
val scalaXmlV = "2.1.0"
val scalaXml211V = "1.3.0" // scala-xml stops publishing for scala 2.11
val scalametaV = "4.5.13"
val scalatestV = "3.0.8" // don't bump, to avoid forcing breaking changes on clients via eviction
val scalatest3V = "3.2.13"
val scalatestMinV = "3.0.8" // don't bump, to avoid forcing breaking changes on clients via eviction
val scalatestLatestV = "3.2.13"

val bijectionCore = "com.twitter" %% "bijection-core" % bijectionCoreV
val collectionCompat = "org.scala-lang.modules" %% "scala-collection-compat" % collectionCompatV
val commonText = "org.apache.commons" % "commons-text" % commontTextV
val coursier = "io.get-coursier" %% "coursier" % coursierV
val coursier = ("io.get-coursier" %% "coursier" % coursierV)
.cross(CrossVersion.for3Use2_13)
val coursierInterfaces = "io.get-coursier" % "interface" % coursierInterfaceV
val googleDiff = "com.googlecode.java-diff-utils" % "diffutils" % googleDiffV
val java8Compat = "org.scala-lang.modules" %% "scala-java8-compat" % java8CompatV
Expand All @@ -57,8 +58,9 @@ object Dependencies {
// https://github.com/scalameta/scalameta/issues/2485
val scalameta = ("org.scalameta" %% "scalameta" % scalametaV)
.cross(CrossVersion.for3Use2_13)
val scalametaTeskit = "org.scalameta" %% "testkit" % scalametaV
val scalatest = "org.scalatest" %% "scalatest" % scalatestV
val scalametaTeskit = ("org.scalameta" %% "testkit" % scalametaV)
.cross(CrossVersion.for3Use2_13)
val scalatest = "org.scalatest" %% "scalatest" % scalatestMinV
val semanticdbScalacCore = "org.scalameta" % "semanticdb-scalac-core" % scalametaV cross CrossVersion.full

private def previousVersions(scalaVersion: String): List[String] = {
Expand Down
15 changes: 14 additions & 1 deletion project/ScalafixBuild.scala
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,11 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
lazy val buildInfoSettingsForRules: Seq[Def.Setting[_]] = Seq(
buildInfoObject := "RulesBuildInfo"
)

lazy val scalatestDeps = Def.setting {
if (isScala3.value) Seq(scalatest.withRevision(scalatestLatestV))
else Seq(scalatest)
}
}

import autoImport._
Expand All @@ -144,7 +149,8 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
"rules3/compile" ::
"reflect3/compile" ::
"cli3/compile" ::
"testkit3/compile" :: // TODO replace core rules and reflect with unit3 in the end
"testkit3/compile" ::
"unit3Target3/compile" :: // TODO replace core rules and reflect with unit3 in the end
s
},
commands += Command.command("ci-213") { s =>
Expand Down Expand Up @@ -228,6 +234,13 @@ object ScalafixBuild extends AutoPlugin with GhpagesKeys {
case _ => Seq()
}
},
Compile / unmanagedResourceDirectories ++= {
val resourceParentDir = (Compile / resourceDirectory).value.getParentFile
CrossVersion.partialVersion(scalaVersion.value) match {
case Some((major, _)) => Seq(resourceParentDir / s"resources-${major}")
case _ => Seq()
}
},
// Don't package sources & docs when publishing locally as it adds a significant
// overhead when testing because of publishLocalTransitive. Tweaking publishArtifact
// would more readable, but it would also affect remote (sonatype) publishing.
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
scalafix.internal.rule.DisableSyntax
# scalafix.internal.rule.ExplicitResultTypes # comment out once scala-3 ExplicitResultTypes is implemented
scalafix.internal.rule.NoAutoTupling
scalafix.internal.rule.NoValInForComprehension
scalafix.internal.rule.RedundantSyntax
scalafix.internal.rule.RemoveUnused
scalafix.internal.rule.LeakingImplicitClassVal
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class ExplicitSynthetic() extends SemanticRule("ExplicitSynthetic") {
Patch.addRight(t, ".apply")
}
}
patches.flatten.asPatch + Patch.replaceTree(q"a", "b")
patches.flatten.asPatch + Patch.replaceTree(Term.Name("a"), "b")
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package banana.rule
import scala.meta._
import scala.meta.contrib._

import scalafix.XtensionOptionPatch
import scalafix.XtensionSeqPatch
import scalafix.patch.Patch
import scalafix.util.SymbolMatcher
import scalafix.v0
Expand All @@ -11,7 +13,12 @@ import scalafix.v1
case class FqnRule(index: v0.SemanticdbIndex)
extends v0.SemanticRule(index, "FqnRule") {
override def fix(ctx: v0.RuleCtx): Patch =
ctx.addGlobalImport(importer"scala.collection.immutable") + {
ctx.addGlobalImport(
Importer(
Term.Select(Term.Name("scala"), Term.Name("collection")),
List(Importee.Name(Name("immutable")))
)
) + {
val fqnRule = SymbolMatcher.exact(v0.Symbol("test/FqnRule."))
ctx.tree.collect { case fqnRule(t: Term.Name) =>
ctx.addLeft(t, "/* matched */ ")
Expand Down
10 changes: 7 additions & 3 deletions scalafix-tests/unit/src/main/scala/scalafix/test/NoNull.scala
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package scalafix.test

import scala.meta._
import scala.meta.Lit
import scala.meta.XtensionCollectionLikeUI

import scalafix.v0._
import scalafix.lint.Diagnostic
import scalafix.v0.LintCategory
import scalafix.v0.Rule
import scalafix.v0.RuleCtx

object NoNull extends Rule("NoNull") {
val error: LintCategory = LintCategory.error("Nulls are not allowed.")

override def check(ctx: RuleCtx): List[Diagnostic] = ctx.tree.collect {
case nil @ q"null" => error.at(nil.pos)
case nil @ Lit.Null() => error.at(nil.pos)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package scalafix.tests.util.compat

import java.nio.file.Path

import scala.tools.nsc.Main
object CompatSemanticdb {

def scalacOptions(src: Path, target: Path): Array[String] = {
Array[String](
s"-P:semanticdb:targetroot:$target"
) ++ scalacOptions(src)
}

def scalacOptions(src: Path): Array[String] = {
Array[String](
s"-Xplugin:${SemanticdbPlugin.semanticdbPluginPath()}",
"-Xplugin-require:semanticdb",
s"-P:semanticdb:sourceroot:$src"
)
}

def runScalac(scalacOptions: Seq[String]): Unit = {
Main.process(scalacOptions.toArray)
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package scalafix.tests.util
package scalafix.tests.util.compat

import java.nio.file.Paths

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package scalafix.tests.util.compat

import java.nio.file.Path
import dotty.tools.dotc.Main

object CompatSemanticdb {

def scalacOptions(src: Path, target: Path): Array[String] = {
Array[String](
s"-semanticdb-target:$target"
) ++ scalacOptions(src)
}

def scalacOptions(src: Path): Array[String] = {
Array[String](
"-Xsemanticdb",
"-Xplugin-require:semanticdb" // ,
// s"-P:semanticdb:sourceroot:$src"
)
}

def runScalac(scalacOptions: Seq[String]): Unit = {
Main.process(scalacOptions.toArray)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -233,19 +233,19 @@ class CliGitDiffSuite extends AnyFunSuite with DiffAssertions {

val bar1 =
"""|object B {
| def bar() {}
| def bar() { println(s"Foo") }
|}
|""".stripMargin

val bar2 =
"""|object B {
| def bar(): Unit = {}
| def bar() { println("Foo") }
|}
|""".stripMargin

fs.add(code, foo1)
git.add(code)
fs.add(confFile, "rules = ProcedureSyntax")
fs.add(confFile, "rules = RedundantSyntax")
git.add(confFile)
git.commit()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import scalafix.internal.reflect.RuleCompilerClasspath
import scalafix.test.StringFS
import scalafix.testkit.DiffAssertions
import scalafix.tests.util.ScalaVersions
import scalafix.tests.util.SemanticdbPlugin
import scalafix.tests.util.compat.CompatSemanticdb
import scalafix.{interfaces => i}

class ScalafixImplSuite extends AnyFunSuite with DiffAssertions {
Expand Down Expand Up @@ -122,13 +122,13 @@ class ScalafixImplSuite extends AnyFunSuite with DiffAssertions {
// if a non empty list of rules is provided, rules from config file are ignored
val args2 = api
.newArguments()
.withRules(List("ProcedureSyntax").asJava)
.withRules(List("RedundantSyntax").asJava)
.withConfig(Optional.empty())
.withWorkingDirectory(cwd.toNIO)
args2.validate()
assert(
args2.rulesThatWillRun().asScala.toList.map(_.name()) == List(
"ProcedureSyntax"
"RedundantSyntax"
)
)

Expand Down Expand Up @@ -182,16 +182,13 @@ class ScalafixImplSuite extends AnyFunSuite with DiffAssertions {
)
val scalacOptions = Array[String](
"-Yrangepos",
s"-Xplugin:${SemanticdbPlugin.semanticdbPluginPath()}",
"-Xplugin-require:semanticdb",
"-classpath",
scalaLibrary.toString,
s"-P:semanticdb:sourceroot:$src",
"-d",
d.toString,
semicolon.toString,
excluded.toString
)
) ++ CompatSemanticdb.scalacOptions(src)
val compileSucceeded = scala.tools.nsc.Main.process(scalacOptions)
val buf = List.newBuilder[ScalafixDiagnostic]
val callback = new ScalafixMainCallback {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package scalafix.tests.core

import scala.meta._
import scala.meta.contrib._
import scala.meta.contrib.equality.Structurally.StructuralEq

import scalafix.syntax._

Expand All @@ -13,19 +14,19 @@ class DenotationOpsSuite extends BaseSemanticSuite("DenotationOpsTest") {
for {
symbol <- t.symbol
resultType <- symbol.resultType
} yield assert(resultType isEqual t"Boolean")
} yield assert(resultType isEqual Type.Name("Boolean"))

case t @ Pat.Var(Name("y")) =>
for {
symbol <- t.symbol
resultType <- symbol.resultType
} yield assert(resultType isEqual t"List[String]")
} yield assert(resultType isEqual Type.Name("List[String]"))

case t: Defn.Def if t.name.value == "m" =>
for {
symbol <- t.symbol
resultType <- symbol.resultType
} yield assert(resultType isEqual t"List[String]")
} yield assert(resultType isEqual Type.Name("List[String]"))
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package scalafix.tests.core
import scala.meta._

import org.scalatest.funsuite.AnyFunSuiteLike
import scalafix.XtensionSeqPatch
import scalafix.internal.tests.utils.SkipWindows
import scalafix.patch.Patch
import scalafix.testkit.AbstractSyntacticRuleSuite
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import java.nio.file.Paths

import scala.meta.Source
import scala.meta.Tree
import scala.meta.XtensionParseInputLike
import scala.meta.contrib.AssociatedComments
import scala.meta.inputs.Input

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import scala.meta.internal.prettyprinters.TreeSyntax
import scala.meta.tokens.Token.Ident

import org.scalatest.funsuite.AnyFunSuiteLike
import scalafix.XtensionSeqPatch
import scalafix.internal.patch.PatchInternals
import scalafix.internal.tests.utils.SkipWindows
import scalafix.patch.Patch
Expand Down Expand Up @@ -94,7 +95,13 @@ class PatchSuite extends AbstractSyntacticRuleSuite with AnyFunSuiteLike {

case object AddGlobalImporter extends SyntacticRule("addGlobalImporter") {
override def fix(implicit doc: SyntacticDocument): Patch = {
Patch.addGlobalImport(importer"scala.collection.{mutable => _}")
Patch.addGlobalImport(
Importer(
Term.Select(Term.Name("scala"), Term.Name("collection")),
List(Importee.Unimport(Name.Indeterminate("mutable")))
)
)
// (importer"scala.collection.{mutable => _}")
}
}
check(
Expand Down
Loading

0 comments on commit 9a837de

Please sign in to comment.