diff --git a/scalafix-core/shared/src/main/scala/scalafix/internal/rule/Disable.scala b/scalafix-core/shared/src/main/scala/scalafix/internal/rule/Disable.scala index 05ed81cf9..2d4ff8c30 100644 --- a/scalafix-core/shared/src/main/scala/scalafix/internal/rule/Disable.scala +++ b/scalafix-core/shared/src/main/scala/scalafix/internal/rule/Disable.scala @@ -30,21 +30,33 @@ final case class Disable(index: SemanticdbIndex, config: DisableConfig) .getOrElse("disable", "Disable")(DisableConfig.default) .map(Disable(index, _)) - override def check(ctx: RuleCtx): Seq[LintMessage] = - ctx.index.names.collect { - case ResolvedName( - pos, - disabledSymbol(symbol @ Symbol.Global(_, signature)), - false) => { - - val message = - config - .customMessage(symbol) - .getOrElse(s"${signature.name} is disabled") - - errorCategory - .copy(id = signature.name) - .at(message, pos) + override def check(ctx: RuleCtx): Seq[LintMessage] = { + for { + document <- ctx.index.documents.view + ResolvedName( + pos, + disabledSymbol(symbol @ Symbol.Global(_, signature)), + false + ) <- { + document.names.view ++ + document.synthetics.view.flatMap(_.names) + } + } yield { + val (details, caret) = pos.input match { + case synthetic @ Input.Synthetic(_, input, start, end) => + // For synthetics the caret should point to the original position + // but display the inferred code. + s" and it got inferred as `${synthetic.text}`" -> + Position.Range(input, start, end) + case _ => + "" -> pos } + val message = config + .customMessage(symbol) + .getOrElse(s"${signature.name} is disabled$details") + errorCategory + .copy(id = signature.name) + .at(message, caret) } + } } diff --git a/scalafix-tests/input/src/main/scala/test/Disable.scala b/scalafix-tests/input/src/main/scala/test/Disable.scala index 88b356a85..3adbe6c02 100644 --- a/scalafix-tests/input/src/main/scala/test/Disable.scala +++ b/scalafix-tests/input/src/main/scala/test/Disable.scala @@ -13,10 +13,14 @@ Disable.symbols = [ |... |// scalafix:on Option.get""" } + "scala.collection.mutable.ListBuffer" + "scala.Predef.any2stringadd" ] */ package test +import scala.collection.mutable.ListBuffer + case object Disable { case class B() @@ -52,4 +56,9 @@ If you must Option.get, wrap the code block with ... // scalafix:on Option.get */ -} \ No newline at end of file + val l: ListBuffer[Int] = scala.collection.mutable.ListBuffer.empty[Int] // assert: Disable.ListBuffer + List(1) + "any2stringadd" /* assert: Disable.any2stringadd + ^ +any2stringadd is disabled and it got inferred as `scala.Predef.any2stringadd[List[Int]](*)` + */ +}