在 GitHub 上编辑此页面

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

在您想要克隆模板的文件夹中。

本文将介绍以下内容: