All Downloads are FREE. Search and download functionalities are using the official Maven repository.

scalafix.internal.rule.DottyVolatileLazyVal.scala Maven / Gradle / Ivy

package scalafix.internal.rule

import scala.meta._
import scalafix.Patch
import scalafix.rule.Rule
import scalafix.rule.RuleCtx
import scalafix.rule.RuleName

case object DottyVolatileLazyVal
    extends Rule(
      RuleName("DottyVolatileLazyVal")
        .withDeprecatedName(
          name = "VolatileLazyVal",
          message = "Use DottyVolatileLazyVal instead.",
          since = "0.5.0")) {
  override def description: String =
    "Rewrite all lazy vals to Dotty's volatile ones for safe publishing (default semantics of pre-Dotty Scala)"
  private object NonVolatileLazyVal {
    def unapply(defn: Defn.Val): Option[Token] = {
      defn.mods.collectFirst {
        case x if x.syntax == "@volatile" =>
          None
        case x if x.syntax == "lazy" =>
          Some(defn.mods.head.tokens.head)
      }
    }.flatten
  }
  override def fix(ctx: RuleCtx): Patch = {
    ctx.tree.collect {
      case NonVolatileLazyVal(tok) =>
        ctx.addLeft(tok, s"@volatile ")
    }.asPatch
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy