如何在 VSCode 中获取 Java 抽象语法树?

Bla*_*ank 5 java abstract-syntax-tree visual-studio-code vscode-extensions language-server-protocol

我希望我的扩展能够读取 .java 文件的 Java AST 以进一步保存所选代码段的节点名称(例如,“ClassDeclaration”)。例如,如果您选择“public”,AST 会告诉您它是一个“修饰符”,然后我想将节点名称“修饰符”保存为变量中的字符串。

首先我需要 Java AST。

我首先查看了 VSCode 市场,但没有适用于 Java 的 AST 扩展(但您会发现一些适用于其他语言,如 TypeScript)。我得到的结果是 Java 扩展包,其中包含许多有用的 Java 扩展,但没有一个明确与 AST 相关。由于有来自 Red Hat 的调试器和语言支持,我很确定他们使用 AST 来使他们的扩展工作,所以我查看了他们的来源,试图找到这一点,但没有成功。我唯一知道的是他们引用了 Eclipse JDT“包”,但我不明白如何。答案可能就在那里,但代码对我来说很复杂。

我尝试的另一种方法是从 TypeScript AST 中获取源代码(git 链接:https : //github.com/krizzdewizz/vscode-typescript-ast-explorer)并尝试编写我自己的 Java AST 扩展(当然是在 TypeScript 中) ,但我很快意识到他使用了 TypeScript 特定的 node_modules。我去找了一个 Java 并想出了这个 npm 包:https ://www.npmjs.com/package/java-ast 。我不确定这是否有用,但我也不知道如何使用它(是的,有一个例子,我尝试过,但正如你所知,我对此很陌生)。

如果有人能进一步帮助我,我将不胜感激。