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

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

The newest version!
package scalafix.internal.rule

import scala.meta._

import scalafix.v1._

class LeakingImplicitClassVal extends SyntacticRule("LeakingImplicitClassVal") {

  override def description: String =
    "Adds 'private' to val parameters of implicit value classes"
  override def isRewrite: Boolean = true

  override def fix(implicit doc: SyntacticDocument): Patch = {
    doc.tree.collect {
      case Defn.Class(
            cMods,
            _,
            _,
            Ctor.Primary(_, _, (Term.Param(pMods, _, _, _) :: Nil) :: Nil),
            Template(_, Init(Type.Name("AnyVal"), _, _) :: Nil, _, _)
          ) if cMods.exists(_.is[Mod.Implicit]) =>
        val optPatch = for {
          anchorMod <- pMods.find(!_.is[Mod.Annot])
          if !pMods.exists(m => m.is[Mod.Private] || m.is[Mod.Protected])
        } yield Patch.addLeft(anchorMod, "private ")
        optPatch.asPatch
    }.asPatch
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy