Skip to content

Commit d34d28d

Browse files
committed
Generate sbt project from g8 template
1 parent d01e217 commit d34d28d

File tree

14 files changed

+221
-0
lines changed

14 files changed

+221
-0
lines changed

.idea/codeStyles/Project.xml

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/codeStyles/codeStyleConfig.xml

Lines changed: 5 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
# scalafix-utils
2+
23
Utilities for writing Scalafix rules

build.sbt

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
import _root_.scalafix.sbt.{BuildInfo => ScalafixBuildInfo}
2+
3+
lazy val rulesCrossVersions = Seq(ScalafixBuildInfo.scala213, ScalafixBuildInfo.scala212, ScalafixBuildInfo.scala211)
4+
lazy val scala3Version = "3.0.1"
5+
6+
inThisBuild(
7+
List(
8+
organization := "nz.co.bottech",
9+
homepage := Some(url("https://github.com/BotTech/scalafix-utils")),
10+
licenses := List(
11+
"MIT" -> url("https://github.com/BotTech/scalafix-utils/blob/main/LICENSE")
12+
),
13+
developers := List(
14+
Developer(
15+
"steinybot",
16+
"Jason Pickens",
17+
18+
url("https://github.com/steinybot")
19+
)
20+
),
21+
semanticdbEnabled := true,
22+
semanticdbVersion := scalafixSemanticdb.revision
23+
)
24+
)
25+
26+
lazy val `scalafix-utils` = (project in file("."))
27+
.aggregate(
28+
rules.projectRefs ++
29+
input.projectRefs ++
30+
output.projectRefs ++
31+
tests.projectRefs: _*
32+
)
33+
.settings(
34+
publish / skip := true
35+
)
36+
37+
lazy val rules = projectMatrix
38+
.settings(
39+
moduleName := "scalafix",
40+
libraryDependencies += "ch.epfl.scala" %% "scalafix-core" % ScalafixBuildInfo.scalafixVersion
41+
)
42+
.defaultAxes(VirtualAxis.jvm)
43+
.jvmPlatform(rulesCrossVersions)
44+
45+
lazy val input = projectMatrix
46+
.settings(
47+
publish / skip := true
48+
)
49+
.defaultAxes(VirtualAxis.jvm)
50+
.jvmPlatform(scalaVersions = rulesCrossVersions :+ scala3Version)
51+
52+
lazy val output = projectMatrix
53+
.settings(
54+
publish / skip := true
55+
)
56+
.defaultAxes(VirtualAxis.jvm)
57+
.jvmPlatform(scalaVersions = rulesCrossVersions :+ scala3Version)
58+
59+
lazy val testsAggregate = Project("tests", file("target/testsAggregate"))
60+
.aggregate(tests.projectRefs: _*)
61+
.settings(
62+
publish / skip := true
63+
)
64+
65+
lazy val tests = projectMatrix
66+
.settings(
67+
publish / skip := true,
68+
scalafixTestkitOutputSourceDirectories :=
69+
TargetAxis
70+
.resolve(output, Compile / unmanagedSourceDirectories)
71+
.value,
72+
scalafixTestkitInputSourceDirectories :=
73+
TargetAxis
74+
.resolve(input, Compile / unmanagedSourceDirectories)
75+
.value,
76+
scalafixTestkitInputClasspath :=
77+
TargetAxis.resolve(input, Compile / fullClasspath).value,
78+
scalafixTestkitInputScalacOptions :=
79+
TargetAxis.resolve(input, Compile / scalacOptions).value,
80+
scalafixTestkitInputScalaVersion :=
81+
TargetAxis.resolve(input, Compile / scalaVersion).value
82+
)
83+
.defaultAxes(
84+
rulesCrossVersions.map(VirtualAxis.scalaABIVersion) :+ VirtualAxis.jvm: _*
85+
)
86+
.jvmPlatform(
87+
scalaVersions = Seq(ScalafixBuildInfo.scala212),
88+
axisValues = Seq(TargetAxis(scala3Version)),
89+
settings = Seq()
90+
)
91+
.jvmPlatform(
92+
scalaVersions = Seq(ScalafixBuildInfo.scala213),
93+
axisValues = Seq(TargetAxis(ScalafixBuildInfo.scala213)),
94+
settings = Seq()
95+
)
96+
.jvmPlatform(
97+
scalaVersions = Seq(ScalafixBuildInfo.scala212),
98+
axisValues = Seq(TargetAxis(ScalafixBuildInfo.scala212)),
99+
settings = Seq()
100+
)
101+
.jvmPlatform(
102+
scalaVersions = Seq(ScalafixBuildInfo.scala211),
103+
axisValues = Seq(TargetAxis(ScalafixBuildInfo.scala211)),
104+
settings = Seq()
105+
)
106+
.dependsOn(rules)
107+
.enablePlugins(ScalafixTestkitPlugin)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*
2+
rule = Scalafixutils
3+
*/
4+
package fix
5+
6+
object ScalafixutilsSignificantIndentation:
7+
val a = 1
8+
// Add code that needs fixing here.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*
2+
rule = Scalafixutils
3+
*/
4+
package fix
5+
6+
object Scalafixutils {
7+
// Add code that needs fixing here.
8+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package fix
2+
3+
object ScalafixutilsSignificantIndentation:
4+
val a = 1
5+
// Add code that needs fixing here.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package fix
2+
3+
object Scalafixutils {
4+
// Add code that needs fixing here.
5+
}

project/TargetAxis.scala

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import sbt._
2+
import sbt.internal.ProjectMatrix
3+
import sbtprojectmatrix.ProjectMatrixPlugin.autoImport._
4+
5+
/** Use on ProjectMatrix rows to tag an affinity to a custom scalaVersion */
6+
case class TargetAxis(scalaVersion: String) extends VirtualAxis.WeakAxis {
7+
8+
private val scalaBinaryVersion = CrossVersion.binaryScalaVersion(scalaVersion)
9+
10+
override val idSuffix = s"Target${scalaBinaryVersion.replace('.', '_')}"
11+
override val directorySuffix = s"target$scalaBinaryVersion"
12+
}
13+
14+
object TargetAxis {
15+
16+
private def targetScalaVersion(virtualAxes: Seq[VirtualAxis]): String =
17+
virtualAxes.collectFirst { case a: TargetAxis => a.scalaVersion }.get
18+
19+
/** When invoked on a ProjectMatrix with a TargetAxis, lookup the project
20+
* generated by `matrix` with a scalaVersion matching the one declared in
21+
* that TargetAxis, and resolve `key`.
22+
*/
23+
def resolve[T](
24+
matrix: ProjectMatrix,
25+
key: TaskKey[T]
26+
): Def.Initialize[Task[T]] =
27+
Def.taskDyn {
28+
val sv = targetScalaVersion(virtualAxes.value)
29+
val project = matrix.finder().apply(sv)
30+
Def.task((project / key).value)
31+
}
32+
33+
/** When invoked on a ProjectMatrix with a TargetAxis, lookup the project
34+
* generated by `matrix` with a scalaVersion matching the one declared in
35+
* that TargetAxis, and resolve `key`.
36+
*/
37+
def resolve[T](
38+
matrix: ProjectMatrix,
39+
key: SettingKey[T]
40+
): Def.Initialize[T] =
41+
Def.settingDyn {
42+
val sv = targetScalaVersion(virtualAxes.value)
43+
val project = matrix.finder().apply(sv)
44+
Def.setting((project / key).value)
45+
}
46+
47+
}

project/build.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
sbt.version=1.8.2

project/plugins.sbt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
resolvers += Resolver.sonatypeRepo("releases")
2+
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.10.4")
3+
addSbtPlugin("com.eed3si9n" % "sbt-projectmatrix" % "0.9.0")
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fix.Scalafixutils
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package fix
2+
3+
import scalafix.v1._
4+
import scala.meta._
5+
6+
class Scalafixutils extends SemanticRule("Scalafixutils") {
7+
8+
override def fix(implicit doc: SemanticDocument): Patch = {
9+
println("Tree.syntax: " + doc.tree.syntax)
10+
println("Tree.structure: " + doc.tree.structure)
11+
println("Tree.structureLabeled: " + doc.tree.structureLabeled)
12+
Patch.empty
13+
}
14+
15+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package fix
2+
3+
import scalafix.testkit._
4+
import org.scalatest.FunSuiteLike
5+
6+
class RuleSuite extends AbstractSemanticRuleSuite with FunSuiteLike {
7+
runAllTests()
8+
}

0 commit comments

Comments
 (0)