TASTy Inspection
libraryDependencies += "org.scala-lang" %% "scala3-tasty-inspector" % scalaVersion.value
TASTy файлы содержат полное типизированное дерево класса, включая исходные позиции и документацию.
Это идеально подходит для инструментов, которые анализируют или извлекают семантическую информацию из кода.
Чтобы избежать хлопот при работе напрямую с TASTy файлом,
предоставляется файл Inspector
, который загружает содержимое и предоставляет его через TASTy reflect API.
Проверка TASTy файлов
Для просмотра деревьев 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)
Обратите внимание, что если нужно запустить main
(в приведенном ниже примере, определенном в объекте с именем Test
) после компиляции,
нужно сделать компилятор доступным для среды выполнения:
scalac -d out Test.scala
scala -with-compiler -classpath out Test
Шаблон проекта
Используя версию sbt 1.1.5+
, выполните:
sbt new scala/scala3-tasty-inspector.g8
в папке, куда вы хотите клонировать шаблон.
Ссылки: