Sep*_*eed 4 typescript language-server-protocol
我是这个主题的新手,所以很有可能我弄错了一些关键术语。我想将打字稿文件解析为其组件符号。举一个我想象出来的非常粗略的例子,见下文:
// some ts file
export function yell(output: string) {
alert(output + "!!");
}
Run Code Online (Sandbox Code Playgroud)
会创建这样的东西:
{
symbols: [
{ type: "comment", text: "// some ts file" },
"\n",
{ type: "module", text: "export" },
" ",
{ type: "function", symbols: [
{ type: "name", text: "yell" },
... it goes on
]}
]
}
Run Code Online (Sandbox Code Playgroud)
我很确定这个符号化/标记化是语言服务器初始化阶段的一部分,试图从这个问题中收集信息(https://github.com/Microsoft/language-server-protocol/issues/33)。
但是我通读了有关 initialize ( https://microsoft.github.io/language-server-protocol/specification#initialize )的文档,但找不到 (ctrl-f) 任何有关返回的符号或令牌的信息。
不久前,我在摩纳哥工作,我知道语言服务器的重点主要是标准化代码的标记化和链接/导航,所以我很确定这是适合它的工具。但是文档非常密集,似乎更侧重于代码交互而不是代码解析。
如何使用语言服务器协议将 TS 解析为符号?
编辑:值得一提的是,如果这本身就是一个项目:我不是在寻找这个或任何东西的完整代码。只是对发生的事情的某种粗略概述,也许还有一些相关文档的链接/摘录。
编辑 2:我在这里发现了一个非常相似的问题(TypeScript: get syntax tree),但它没有提到语言服务器,而且似乎是在它们之前的时间出现的。
编辑 3:看来我正在寻找的正确术语是 AST。在网上找到了一个非常酷的 TypeScript 工具(https://ts-ast-viewer.com/)
事实证明,语言服务器不公开 AST(抽象语法树)。
我发现了这个问题,引用如下:
我可以看到 AST 如何在这里提供帮助,但目前没有计划通过 LSP 公开 AST。LSP 的整个想法是不这样做,因为它使跨语言和工具的标准化变得非常困难
https://github.com/Microsoft/language-server-protocol/issues/258
幸运的是,打字稿确实提供了一些方法来做到这一点(https://github.com/microsoft/TypeScript/wiki/Using-the-Compiler-API#using-the-type-checker)。
一旦我想出这种替代方法,我会更新。
| 归档时间: |
|
| 查看次数: |
283 次 |
| 最近记录: |