Skip to content

Commit

Permalink
implement rule (zio#2852)
Browse files Browse the repository at this point in the history
  • Loading branch information
adamgfraser authored Feb 9, 2020
1 parent e8ecdfb commit 2e305bf
Show file tree
Hide file tree
Showing 9 changed files with 116 additions and 0 deletions.
54 changes: 54 additions & 0 deletions scalafix/build.sbt
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
lazy val V = _root_.scalafix.sbt.BuildInfo
inThisBuild(
List(
organization := "dev.zio",
homepage := Some(url("https://zio.dev")),
licenses := List("Apache-2.0" -> url("http://www.apache.org/licenses/LICENSE-2.0")),
developers := List(
Developer(
"jdegoes",
"John De Goes",
"[email protected]",
url("http://degoes.net")
)
),
scalaVersion := V.scala212,
addCompilerPlugin(scalafixSemanticdb),
scalacOptions ++= List(
"-Yrangepos",
"-P:semanticdb:synthetics:on"
)
)
)

skip in publish := true

lazy val rules = project.settings(
moduleName := "scalafix",
libraryDependencies += "ch.epfl.scala" %% "scalafix-core" % V.scalafixVersion
)

lazy val input = project.settings(
skip in publish := true,
libraryDependencies += "dev.zio" %% "zio-test" % "1.0.0-RC17"
)

lazy val output = project.settings(
skip in publish := true
)

lazy val tests = project
.settings(
skip in publish := true,
libraryDependencies += "ch.epfl.scala" % "scalafix-testkit" % V.scalafixVersion % Test cross CrossVersion.full,
compile.in(Compile) :=
compile.in(Compile).dependsOn(compile.in(input, Compile)).value,
scalafixTestkitOutputSourceDirectories :=
sourceDirectories.in(output, Compile).value,
scalafixTestkitInputSourceDirectories :=
sourceDirectories.in(input, Compile).value,
scalafixTestkitInputClasspath :=
fullClasspath.in(input, Compile).value,
)
.dependsOn(rules)
.enablePlugins(ScalafixTestkitPlugin)
14 changes: 14 additions & 0 deletions scalafix/input/src/main/scala/fix/CurriedAssert.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/*
rule = CurriedAssert
*/
package fix

import zio._
import zio.clock._
import zio.test._
import zio.test.Assertion._

object CurriedAssert {
assertM(nanoTime, equalTo(0))
assert(Right(Some(3)), isRight(isSome(isGreaterThan(4))))
}
11 changes: 11 additions & 0 deletions scalafix/output/src/main/scala/fix/CurriedAssert.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package fix

import zio._
import zio.clock._
import zio.test._
import zio.test.Assertion._

object CurriedAssert {
assertM(nanoTime)(equalTo(0))
assert(Right(Some(3)))(isRight(isSome(isGreaterThan(4))))
}
1 change: 1 addition & 0 deletions scalafix/project/build.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sbt.version=1.3.8
1 change: 1 addition & 0 deletions scalafix/project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.9.11")
7 changes: 7 additions & 0 deletions scalafix/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Scalafix rules for zio

To develop rule:
```
sbt ~tests/test
# edit rules/src/main/scala/fix/CurriedAssert.scala
```
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fix.CurriedAssert
20 changes: 20 additions & 0 deletions scalafix/rules/src/main/scala/fix/CurriedAssert.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package fix

import scalafix.v1._
import scala.meta._

class CurriedAssert extends SemanticRule("CurriedAssert") {

val assert = SymbolMatcher.normalized(
"zio.test.package.assert",
"zio.test.package.assertM"
)

override def fix(implicit doc: SemanticDocument): Patch =
doc.tree.collect {
case t @ assert(Term.Apply(name, List(value, assertion))) =>
Patch.replaceTree(t, name + "(" + value + ")(" + assertion + ")")
case _ =>
Patch.empty
}.asPatch
}
7 changes: 7 additions & 0 deletions scalafix/tests/src/test/scala/fix/RuleSuite.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package fix

import scalafix.testkit.SemanticRuleSuite

class RuleSuite extends SemanticRuleSuite() {
runAllTests()
}

0 comments on commit 2e305bf

Please sign in to comment.