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

scalafix.syntax.package.scala Maven / Gradle / Ivy

package scalafix

import scala.compat.Platform.EOL
import scala.meta._
import scala.meta.internal.scalafix.ScalafixScalametaHacks
import scalafix.internal.util.DenotationOps
import scalafix.internal.util.SymbolOps
import scalafix.util.SymbolMatcher
import scalafix.util.TreeOps
import scalafix.v0.Symbol

package object syntax {
  implicit class XtensionRefSymbolOpt(tree: Tree)(
      implicit index: v0.SemanticdbIndex
  ) {
    def symbol: Option[Symbol] = index.symbol(tree.pos)
    def denotation: Option[v0.Denotation] = index.denotation(tree)
  }
  implicit class XtensionParsedOpt[T](parsed: Parsed[T]) {
    def toOption: Option[T] = parsed match {
      case parsers.Parsed.Success(tree) => Some(tree)
      case _ => None
    }
  }
  implicit class XtensionSymbolSemanticdbIndex(symbol: Symbol)(
      implicit index: v0.SemanticdbIndex
  ) {
    def denotation: Option[v0.Denotation] = index.denotation(symbol)
    def resultType: Option[Type] =
      denotation.flatMap(denot =>
        DenotationOps.resultType(symbol, denot, DenotationOps.defaultDialect)
      )
  }
  implicit class XtensionSymbol(symbol: Symbol) {
    def normalized: Symbol = SymbolOps.normalize(symbol)
  }
  implicit class XtensionDocument(document: v0.Document) {
    def dialect: Dialect = ScalafixScalametaHacks.dialect(document.language)
  }
  implicit class XtensionTreeScalafix(tree: Tree) {
    def matches(matcher: SymbolMatcher): Boolean =
      matcher.matches(tree)
    def parents: Stream[Tree] = TreeOps.parents(tree)
    def input: Input = tree.tokens.headOption.map(_.input).getOrElse(Input.None)
  }
  implicit class XtensionInputScalafix(input: Input) {
    def label: String = input match {
      case inputs.Input.File(path, _) => path.toString()
      case inputs.Input.VirtualFile(label, _) => label
      case _ =>
        s"Input.${input.productPrefix}('<${input.chars.take(10).mkString}...>')"
          .replaceAllLiterally(EOL, "")
    }
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy