发布于 2019-08-28 05:38:26
对于将来可能需要这样做的其他人,Atom公开了atom.workspace
,它可以用于从活动环境中获取各种东西,比如TextEditors、语法等等。在跟踪Atom的源时,我发现在工作区(atom.workspace.grammarRegistry
)中可访问的atom.workspace.grammarRegistry
对象有一个名为languageModeForGrammarAndBuffer
的方法,该方法返回一个TreeSitterLanguageMode
对象,而该对象又为树(.tree
)提供了一个getter。这种方法需要语法和textBuffer,这两种方法都可以从工作区获得(缓冲区可以从TextEditorRegistry
获得)。将所有这些放在一起,从Atom包中获取树的根节点,您可以使用如下所示:
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;
发布于 2020-04-25 20:19:21
在当前版本中,您只需执行editor.getBuffer().getLanguageMode().tree
即可。注意,这可能是一个TextMateLanguageMode或TreeSitterLanguageMode,这取决于Tree对语言的支持,以及核心useTreeSitterParsers
设置的值。而且,所有这些似乎都没有文档化的API (即稳定的)。
https://stackoverflow.com/questions/57664236
复制相似问题