如何用 scalameta 递归替换 AST 中所有特定的 Term.Name 表达式?
How to replace all specific Term.Name expressions in an AST recursively with scalameta?
我想替换 AST 中出现的所有特定 Term.Name 实例。
类似于:
tree match {
case t @ Term.Name(n) if (n == "bla") => Term.Apply(Term.Select(t, Term.Name("read")), List())
}
但是,要实现这一点,我将必须检查所有不同类型的语句等,并在这些语句中检查术语。
有没有更简单的方法用 scalameta 来替换所有出现的特定术语?
尝试使用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
我想替换 AST 中出现的所有特定 Term.Name 实例。 类似于:
tree match {
case t @ Term.Name(n) if (n == "bla") => Term.Apply(Term.Select(t, Term.Name("read")), List())
}
但是,要实现这一点,我将必须检查所有不同类型的语句等,并在这些语句中检查术语。 有没有更简单的方法用 scalameta 来替换所有出现的特定术语?
尝试使用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