From 923fd231e0b2c22c0c60379da91066c0f544e83c Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Sat, 18 Mar 2017 15:42:33 +0300 Subject: Add scalafix plugin with example project and tests --- examples/scalafix-example/.scalafix.conf | 9 ++++++++ examples/scalafix-example/Main.scala | 9 ++++++++ examples/scalafix-example/build/build.scala | 3 +++ examples/scalafix-example/build/build/build.scala | 5 ++++ plugins/scalafix/Scalafix.scala | 28 +++++++++++++++++++++++ plugins/scalafix/build/build.scala | 12 ++++++++++ stage2/BuildBuild.scala | 1 + test/test.scala | 15 ++++++++++++ 8 files changed, 82 insertions(+) create mode 100644 examples/scalafix-example/.scalafix.conf create mode 100644 examples/scalafix-example/Main.scala create mode 100644 examples/scalafix-example/build/build.scala create mode 100644 examples/scalafix-example/build/build/build.scala create mode 100644 plugins/scalafix/Scalafix.scala create mode 100644 plugins/scalafix/build/build.scala diff --git a/examples/scalafix-example/.scalafix.conf b/examples/scalafix-example/.scalafix.conf new file mode 100644 index 0000000..dbb79d7 --- /dev/null +++ b/examples/scalafix-example/.scalafix.conf @@ -0,0 +1,9 @@ +rewrites = [ + ProcedureSyntax + ExplicitImplicit + VolatileLazyVal +] + +patches.addGlobalImports = [ + "scala.collection.immutable" +] diff --git a/examples/scalafix-example/Main.scala b/examples/scalafix-example/Main.scala new file mode 100644 index 0000000..c82c77b --- /dev/null +++ b/examples/scalafix-example/Main.scala @@ -0,0 +1,9 @@ +object Main{ + lazy val x = 1 + 1 + + implicit def toString(i :Int) = i.toString + + def main( args: Array[String] ){ + println("Hello world!") + } +} diff --git a/examples/scalafix-example/build/build.scala b/examples/scalafix-example/build/build.scala new file mode 100644 index 0000000..776d1e0 --- /dev/null +++ b/examples/scalafix-example/build/build.scala @@ -0,0 +1,3 @@ +import cbt._ + +class Build(val context: Context) extends BaseBuild with Scalafix diff --git a/examples/scalafix-example/build/build/build.scala b/examples/scalafix-example/build/build/build.scala new file mode 100644 index 0000000..404356f --- /dev/null +++ b/examples/scalafix-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/plugins/scalafix/Scalafix.scala b/plugins/scalafix/Scalafix.scala new file mode 100644 index 0000000..cf808d7 --- /dev/null +++ b/plugins/scalafix/Scalafix.scala @@ -0,0 +1,28 @@ +package cbt + +import cbt._ +import java.nio.file.Files._ +import java.nio.file._ +import java.io.File + +trait Scalafix extends BaseBuild { + def scalafixVersion = "0.3.1" + + override def scalacOptions = super.scalacOptions ++ + Scalafix.scalacOptions(projectDirectory.toPath, + Resolver( mavenCentral, sonatypeReleases ).bindOne( + ScalaDependency( "ch.epfl.scala", "scalafix-nsc", scalafixVersion ) + ).jar) +} + +object Scalafix { + def scalacOptions( rootPath: Path, nscJar: File ) = + Seq( + "-Xplugin:" ++ nscJar.string, + "-Yrangepos" + ) ++ configOption(rootPath) + + def configOption( rootPath: Path ) = + Some( rootPath.resolve(".scalafix.conf").toAbsolutePath ) + .filter(isRegularFile(_)).map("-P:scalafix:" ++ _.toString).toSeq +} diff --git a/plugins/scalafix/build/build.scala b/plugins/scalafix/build/build.scala new file mode 100644 index 0000000..b25b54d --- /dev/null +++ b/plugins/scalafix/build/build.scala @@ -0,0 +1,12 @@ +package scalafix_build + +import cbt._ + +class Build(val context: Context) extends Plugin { + override def dependencies = ( + super.dependencies ++ + Resolver( mavenCentral, sonatypeReleases ).bind( + ScalaDependency( "ch.epfl.scala", "scalafix-nsc", "0.3.1" ) + ) + ) +} diff --git a/stage2/BuildBuild.scala b/stage2/BuildBuild.scala index 7be4714..9b48e15 100644 --- a/stage2/BuildBuild.scala +++ b/stage2/BuildBuild.scala @@ -26,6 +26,7 @@ class plugins(implicit context: Context){ final lazy val sonatypeRelease = plugin( "sonatype-release" ) final lazy val uberJar = plugin( "uber-jar" ) final lazy val wartremover = plugin( "wartremover" ) + final lazy val scalafix = plugin( "scalafix" ) } trait BuildBuildWithoutEssentials extends BaseBuild{ object plugins extends plugins diff --git a/test/test.scala b/test/test.scala index c49d1e5..245b925 100644 --- a/test/test.scala +++ b/test/test.scala @@ -220,6 +220,7 @@ object Main{ compile("../plugins/scalatest") compile("../plugins/wartremover") compile("../plugins/uber-jar") + compile("../plugins/scalafix") compile("../examples/scalafmt-example") compile("../examples/scalariform-example") compile("../examples/scalatest-example") @@ -231,6 +232,7 @@ object Main{ } compile("../examples/multi-standalone-example") compile("../examples/multi-combined-example") + compile("../examples/scalafix-example") if(sys.props("java.version").startsWith("1.7")){ System.err.println("\nskipping dotty tests on Java 7") } else { @@ -381,6 +383,19 @@ object Main{ assert(res.out.contains("via parent.parent: true 2"), res.out) } + { + val sourceFile = cbtHome / "examples" / "scalafix-example" / "Main.scala" + val sourceBefore = sourceFile.readAsString + val res = runCbt("../examples/scalafix-example", Seq("compile")) + assert(res.exit0) + val sourceAfter = sourceFile.readAsString + assert(sourceAfter contains "@volatile") + assert(sourceAfter contains ": Unit") + assert(sourceAfter contains ": String ") + assert(sourceAfter contains "import scala.collection.immutable") + lib.write(sourceFile, sourceBefore) + } + System.err.println(" DONE!") System.err.println( successes.toString ++ " succeeded, "++ failures.toString ++ " failed" ) if(failures > 0) System.exit(1) else System.exit(0) -- cgit v1.2.3