1

我正在尝试找到一种方法来获取 Scala 编译器的符号表 (?) 并将所有类型信息转储到特定 SBT 项目中的方法/函数中。我目前的方向是编译器插件,在typer阶段之后立即连接到它。

闲逛了一下,我正在看着根镜并检查info.decls它的场,大致如下:

def newPhase(prev: Phase): Phase =
  new StdPhase(prev) {
    def apply(unit: CompilationUnit): Unit = {
      val decls = global.RootClass.info.decls
      val scalaz = decls.find(_.toString contains "scalaz")
      println(scalaz.get.info.decls.filter(x => !x.hasMeaninglessName))

它转储了很多东西,但是..我仍然得到了很多奇怪的输出,比如class anonfun$reduceUnordered$1 extends ;

想知道我是否朝着正确的方向前进,如果是这样,我应该更多地关注什么才能获得项目中方法的类型签名?

4

1 回答 1

0

你肯定走对了方向。您可以在https://github.com/CANVE/extractor中看到完整的解决方案。正如您所展示的,某些符号是“合成的”,例如在源代码中使用了匿名函数的情况。因此,您可能希望从您提取的任何“数据转储”中抽象出多少这些符号,取决于您希望完成的特定任务。

于 2015-11-24T19:17:49.517 回答