我想替换 AST 中特定 Term.Name 实例的所有出现。像这样:
tree match {
case t @ Term.Name(n) if (n == "bla") => Term.Apply(Term.Select(t, Term.Name("read")), List())
}
但是,为了实现这一点,我必须检查所有不同类型的语句等,并在这些语句中检查该术语。有没有更简单的方法来替换特定术语的所有出现?
尝试使用Transformer
import scala.meta._
val transformer = new Transformer {
override def apply(tree: Tree): Tree = tree match {
case t @ Term.Name(n) if (n == "bla") => Term.Apply(Term.Select(t, Term.Name("read")), List())
case node => super.apply(node)
}
}
transformer(tree)
https://scalameta.org/docs/trees/guide.html#custom-transformations