首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Atom包中获取整个树-sitter解析树。

在Atom包中获取整个树-sitter解析树。
EN

Stack Overflow用户
提问于 2019-08-26 19:59:33
回答 2查看 271关注 0票数 1

我正在尝试编写一个Atom包,它需要访问树保姆为Atom在内部生成的解析树。我不熟悉保姆,也不太熟悉Atom包。

在阅读Atom包的一些教程时,我遇到了一个看起来很有希望的页面,它讨论了如何在缓冲区坐标中获取“给定位置的作用域描述符”,以及在同一页上获取当前语法的方法,而不是获取整个解析树的方法。这可以使用Atom环境提供的api吗?否则,我会怎样做呢?也许从包内部对树进行修复(虽然这听起来既比它更有价值,而且效率低下)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-28 05:38:26

对于将来可能需要这样做的其他人,Atom公开了atom.workspace,它可以用于从活动环境中获取各种东西,比如TextEditors、语法等等。在跟踪Atom的源时,我发现在工作区(atom.workspace.grammarRegistry)中可访问的atom.workspace.grammarRegistry对象有一个名为languageModeForGrammarAndBuffer的方法,该方法返回一个TreeSitterLanguageMode对象,而该对象又为树(.tree)提供了一个getter。这种方法需要语法和textBuffer,这两种方法都可以从工作区获得(缓冲区可以从TextEditorRegistry获得)。将所有这些放在一起,从Atom包中获取树的根节点,您可以使用如下所示:

代码语言:javascript
运行
复制
const grammarRegistry = atom.workspace.grammarRegistry;
const grammar = grammarRegistry.treeSitterGrammarsById["source.js"]; // where source.js is the name of the tree-sitter grammar you want
const buffer = atom.workspace.textEditorRegistry.editors.values().next().value.buffer; //assuming you want the first buffer
const root = grammarRegistry.languageModeForGrammarAndBuffer(grammar, buffer).tree.rootNode;
票数 2
EN

Stack Overflow用户

发布于 2020-04-25 20:19:21

在当前版本中,您只需执行editor.getBuffer().getLanguageMode().tree即可。注意,这可能是一个TextMateLanguageMode或TreeSitterLanguageMode,这取决于Tree对语言的支持,以及核心useTreeSitterParsers设置的值。而且,所有这些似乎都没有文档化的API (即稳定的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57664236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档