diff options
-rw-r--r-- | examples/cross-rewrite-example/Readme.md | 5 | ||||
-rw-r--r-- | examples/cross-rewrite-example/build/build.scala | 72 | ||||
-rw-r--r-- | examples/cross-rewrite-example/build/build/build.scala | 5 | ||||
-rw-r--r-- | examples/cross-rewrite-example/src/Main.scala | 1 | ||||
-rw-r--r-- | test/test.scala | 8 |
5 files changed, 91 insertions, 0 deletions
diff --git a/examples/cross-rewrite-example/Readme.md b/examples/cross-rewrite-example/Readme.md new file mode 100644 index 0000000..7d96da0 --- /dev/null +++ b/examples/cross-rewrite-example/Readme.md @@ -0,0 +1,5 @@ +This is an example of how to use scalafix rewrite rules to produce multiple +variants of the same code base for different scala versions, e.g. 2.11.8 and +2.12.1 and against different comparable libraries, e.g. cats and scalaz. + +To package the jars for all combinations run `cbt cross.package`. diff --git a/examples/cross-rewrite-example/build/build.scala b/examples/cross-rewrite-example/build/build.scala new file mode 100644 index 0000000..6d2ffac --- /dev/null +++ b/examples/cross-rewrite-example/build/build.scala @@ -0,0 +1,72 @@ +package cbt_examples_build.cross_rewrite +import cbt._ +import java.io.File +import scala.meta._ +import scalafix.util._ +import scalafix.util.TreePatch._ +import scalafix.util.TokenPatch._ + +class Build(val context: Context) extends BaseBuild{ outer => + override def defaultScalaVersion = "2.11.8" + + def versions = Seq[(String, Seq[Patch])]( + scalaVersion -> Seq(), + "2.12.1" -> Seq( + RemoveGlobalImport( + importer"scala.concurrent.Future" + ), + AddGlobalImport( + importer"scala.util.Try" + ) + ) + ) + def libs = Seq[(String, MavenDependency, Seq[Patch])]( + ( + "scalaz", + ScalaDependency( "org.scalaz", "scalaz-core", "7.2.2" ), + Seq( + ) + ), + ( + "cats", + ScalaDependency( "org.typelevel", "cats", "0.9.0" ), + Seq( + ) + ) + ) + + def cross = versions.flatMap{ case ( v, version_rewrites ) => + libs.map{ + case ( label, dep, lib_rewrites ) => + val d = outer.target / "rewrites" / label ++ "-" ++ v + d.mkdirs + new Build(context) with Scalafix with PackageJars{ + override def groupId = "org.cvogt" + override def artifactId = "cbt-examples-cross-rewrite-" + label + override def version = "0.1" + override def defaultScalaVersion = v + override def dependencies = super.dependencies ++ Resolver( mavenCentral ).bind( dep ) + override def projectDirectory = d + override def scaladoc = None + override def sources = { + val fromTo = lib.autoRelative( outer.sources ).collect{ + case (location, relative) if location.isFile + => location -> projectDirectory / "src" / relative + } + + val to = fromTo.map(_._2) + assert( ( to diff to.distinct ).isEmpty ) + + Scalafix.apply(lib).config( + outer.classpath, + files = fromTo, + patches = lib_rewrites ++ version_rewrites, + allowEmpty = true + ).apply + + to + } + } + } + } +} diff --git a/examples/cross-rewrite-example/build/build/build.scala b/examples/cross-rewrite-example/build/build/build.scala new file mode 100644 index 0000000..404356f --- /dev/null +++ b/examples/cross-rewrite-example/build/build/build.scala @@ -0,0 +1,5 @@ +import cbt._ + +class Build(val context: Context) extends BuildBuild { + override def dependencies = super.dependencies :+ plugins.scalafix +} diff --git a/examples/cross-rewrite-example/src/Main.scala b/examples/cross-rewrite-example/src/Main.scala new file mode 100644 index 0000000..27ea3ff --- /dev/null +++ b/examples/cross-rewrite-example/src/Main.scala @@ -0,0 +1 @@ +import scala.concurrent.Future diff --git a/test/test.scala b/test/test.scala index b97c36e..f3fb7c5 100644 --- a/test/test.scala +++ b/test/test.scala @@ -427,6 +427,14 @@ object Main{ } { + val res = runCbt("../examples/cross-rewrite-example", Seq("cross.exportedClasspath")) + assert(res.exit0) + Seq("cats","scalaz","2.11.8","2.12.1").foreach( + s => assert(res.out contains s, res.out) + ) + } + + { val sourceFile = cbtHome / "examples" / "scalafix-compiler-plugin-example" / "Main.scala" val sourceBefore = sourceFile.readAsString runCbt("../examples/scalafix-compiler-plugin-example", Seq("clean","force")) |