Skip to content

Commit

Permalink
scalafix: add rewrites for Meter
Browse files Browse the repository at this point in the history
  • Loading branch information
iRevive committed Jan 30, 2024
1 parent 588b91f commit 8e1062a
Show file tree
Hide file tree
Showing 3 changed files with 71 additions and 0 deletions.
10 changes: 10 additions & 0 deletions scalafix/input/src/main/scala/example/V0_5_0Rewrites.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ package example
import cats.effect.Async
import cats.effect.LiftIO
import cats.effect.IOLocal
import org.typelevel.otel4s.metrics.Meter
import org.typelevel.otel4s.java._
import org.typelevel.otel4s.java.OtelJava
import org.typelevel.otel4s.java.trace._
Expand Down Expand Up @@ -38,4 +39,13 @@ object Test {

def localCtx[F[_]: LocalContext]: Unit = ???

def meterOps[F[_]: Async](implicit meter: Meter[F]): Unit = {
meter.counter("counter").create
meter.histogram("histogram").withUnit("unit").create
meter.upDownCounter("upDownCounter").create
meter.observableGauge("observableGauge").create(Async[F].pure(Nil))
meter.observableCounter("observableCounter").create(Async[F].pure(Nil))
meter.observableUpDownCounter("observableUpDownCounter").create(Async[F].pure(Nil))
}

}
10 changes: 10 additions & 0 deletions scalafix/output/src/main/scala/example/V0_5_0Rewrites.scala
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ package example
import cats.effect.Async
import cats.effect.LiftIO
import cats.effect.IOLocal
import org.typelevel.otel4s.metrics.Meter
import org.typelevel.otel4s.oteljava._
import org.typelevel.otel4s.oteljava.OtelJava
import org.typelevel.otel4s.oteljava.trace._
Expand Down Expand Up @@ -36,4 +37,13 @@ object Test {

def localCtx[F[_]: LocalContext]: Unit = ???

def meterOps[F[_]: Async](implicit meter: Meter[F]): Unit = {
meter.counter[Long]("counter").create
meter.histogram[Double]("histogram").withUnit("unit").create
meter.upDownCounter[Long]("upDownCounter").create
meter.observableGauge[Double]("observableGauge").create(Async[F].pure(Nil))
meter.observableCounter[Long]("observableCounter").create(Async[F].pure(Nil))
meter.observableUpDownCounter[Long]("observableUpDownCounter").create(Async[F].pure(Nil))
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,58 @@ class V0_5_0Rewrites extends SemanticRule("V0_5_0Rewrites") {

case t @ LocalForIoLocal_M(_: Term.Name) =>
Patch.replaceTree(t, "localForIOLocal")

// meter ops
case MeterOps.Counter(patch) =>
patch

case MeterOps.Histogram(patch) =>
patch

case MeterOps.UpDownCounter(patch) =>
patch

case MeterOps.ObservableGauge(patch) =>
patch

case MeterOps.ObservableCounter(patch) =>
patch

case MeterOps.ObservableUpDownCounter(patch) =>
patch

}.asPatch
}

private object MeterOps {
abstract class MeterOpMatcher(termName: String, tpe: String) {
private val matcher = SymbolMatcher.exact(
s"org/typelevel/otel4s/metrics/Meter#$termName()."
)

def unapply(term: Term)(implicit doc: SemanticDocument): Option[Patch] = {
term match {
case a @ Term.Apply.After_4_6_0(select, arg) if matcher.matches(a) =>
val rewrite = Term.Apply(
Term.ApplyType(select, Type.ArgClause(List(Type.Name(tpe)))),
arg
)

Some(Patch.replaceTree(a, rewrite.toString()))

case _ =>
None
}
}
}

object Counter extends MeterOpMatcher("counter", "Long")
object Histogram extends MeterOpMatcher("histogram", "Double")
object UpDownCounter extends MeterOpMatcher("upDownCounter", "Long")
object ObservableGauge extends MeterOpMatcher("observableGauge", "Double")
object ObservableCounter extends MeterOpMatcher("observableCounter", "Long")
object ObservableUpDownCounter
extends MeterOpMatcher("observableUpDownCounter", "Long")
}

}

0 comments on commit 8e1062a

Please sign in to comment.