From 26021f5e462fb9a5633a5f565235a2829fb6132b Mon Sep 17 00:00:00 2001 From: Christopher Vogt Date: Mon, 27 Mar 2017 19:34:48 -0400 Subject: add example showing how to use scalafix to produce cross builds --- examples/cross-rewrite-example/Readme.md | 5 ++ examples/cross-rewrite-example/build/build.scala | 72 ++++++++++++++++++++++ .../cross-rewrite-example/build/build/build.scala | 5 ++ examples/cross-rewrite-example/src/Main.scala | 1 + 4 files changed, 83 insertions(+) create mode 100644 examples/cross-rewrite-example/Readme.md create mode 100644 examples/cross-rewrite-example/build/build.scala create mode 100644 examples/cross-rewrite-example/build/build/build.scala create mode 100644 examples/cross-rewrite-example/src/Main.scala (limited to 'examples/cross-rewrite-example') 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 -- cgit v1.2.3