1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
package cbt
import java.io.File
import scala.meta._
import scala.meta.semantic.v1._
import scala.meta.{ Symbol => _, _ }
import scalafix._, rewrite._, config._, util._
import org.scalameta.{logger => scalametaLogger}
import cbt._
trait Scalafix extends Scalameta{
def scalafix = Scalafix.apply( lib ).config(
classpath,
sourceFiles zip sourceFiles
)
}
object Scalafix{
case class apply( lib: Lib ){
case class config(
classpath: ClassPath,
files: Seq[(File,File)],
patches: Seq[Patch] = Seq(),
rewrites: Seq[ Rewrite[ScalafixMirror] ] = Seq(),
allowEmpty: Boolean = false
){
def mirror =
Mirror(
classpath.string,
files.map(_._1).mkString(File.pathSeparator)
)
def context(file: File): ( RewriteCtx[Mirror], RewriteCtx[ScalafixMirror] ) = (
scalafix.rewrite.RewriteCtx(
mirror.dialect(file).parse[Source].get, ScalafixConfig(), mirror
),
scalafix.rewrite.RewriteCtx(
mirror.dialect(file).parse[Source].get, ScalafixConfig(), ScalafixMirror.fromMirror( mirror )
)
)
def apply: Unit = {
require(
allowEmpty || rewrites.nonEmpty || patches.nonEmpty,
"You need to provide some rewrites via: `override def scalafix = super.scalafix.copy( rewrites = Seq(...) )`"
)
files.foreach{ case (from, to) =>
implicit val ( ctx, ctx2 ) = context(from)
lib.writeIfChanged(
to,
Patch(
(
patches
++ rewrites.flatMap(
_.rewrite( ctx2 ).to
)
).to
)
)
}
}
}
}
}
|