
scalafix.internal.rule.LeakingImplicitClassVal.scala Maven / Gradle / Ivy
package scalafix.internal.rule
import scala.meta.quasiquotes.XtensionQuasiquoteInit
import scala.meta.{Ctor, Defn, Mod, Template, Term}
import scalafix.rule.RuleCtx
import scalafix.{Patch, Rule}
case object LeakingImplicitClassVal extends Rule("LeakingImplicitClassVal") {
override def description: String =
"Add private access modifier to val parameters of implicit value classes in order to prevent public access"
override def fix(ctx: RuleCtx): Patch = {
ctx.tree.collect {
case Defn.Class(
cMods,
_,
_,
Ctor.Primary(_, _, (Term.Param(pMods, _, _, _) :: Nil) :: Nil),
Template(_, init"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 ctx.addLeft(anchorMod, "private ")
optPatch.asPatch
}.asPatch
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy