TASTy 检查
TASTy 文件包含类的完整类型树,包括源代码位置和文档。这非常适合用于分析或从代码中提取语义信息的工具。
为了避免直接使用 TASTy 文件的麻烦,我们提供了 Inspector
,它加载内容并通过 TASTy 反射 API 公开它。
我们还展示了 TASTyViz,一个用于 tasty 的可视化工具,可用于调试和检查您对 TASTy 的理解。
TASTyViz
TASTyViz 是一个用于以可视方式检查 TASTy 文件的工具。在撰写本文时,它仍处于开发的早期阶段,因此您可以预期功能缺失和用户体验不理想,但它在调试时仍然可能有用。您可以 在这里查看它。
Inspector
Inspector
是一个提供对 TASTy 的 API 访问的工具。
您可以将依赖项添加到您的 sbt 构建中,如下所示
libraryDependencies += "org.scala-lang" %% "scala3-tasty-inspector" % scalaVersion.value
要检查 TASTy 文件的树,可以按以下方式定义一个消费者。
import scala.quoted.*
import scala.tasty.inspector.*
class MyInspector extends Inspector:
def inspect(using Quotes)(tastys: List[Tasty[quotes.type]]): Unit =
import quotes.reflect.*
for tasty <- tastys do
val tree = tasty.ast
// Do something with the tree
然后可以使用以下代码实例化消费者以获取 foo/Bar.tasty
文件的树。
object Test:
def main(args: Array[String]): Unit =
val tastyFiles = List("foo/Bar.tasty")
TastyInspector.inspectTastyFiles(tastyFiles)(new MyInspector)
请注意,如果我们需要在编译后运行主程序(在下面的示例中,定义在名为Test
的对象中),我们需要使编译器可供运行时使用。
scalac -d out Test.scala
scala -with-compiler -classpath out Test
模板项目
使用 sbt 版本 1.1.5+
,执行以下操作:
sbt new scala/scala3-tasty-inspector.g8
在您想要克隆模板的文件夹中。
本文将介绍以下内容: