在VS Code中,如果您的语言扩展提供了该扩展名,则您将获得Codelens,以向您显示函数,变量和其他符号上方的引用计数。像这样:https://i.imgur.com/HXzgjGh.png
我要接管一个项目,而我的首要任务之一就是重组。作为其中的一部分,我希望将引用引入本地/外部,而不必“显示所有引用”。
我经历了扩展API示例,并且一直looking through the API。之后,我构建了一些(几乎没有意义的)扩展,以进一步了解它们的工作方式。我可以插入带有任何所需数据的codelens,但是现在卡住了。似乎没有一种方法可以获取现有的编解码器,或者实际上,无法执行任何操作来访问构建“ i引用”的信息。
我沿途发现的另一个线索:这种工作方式是通过定义符号的语言来完成的。但是,似乎也没有办法遍历它们吗?我可以重新解析所有内容并进行自己的codelens分析,但这将比手动检查范围花费更多时间。它似乎也比必要的复杂。
我希望发生在生成/更改编解码器并将其提供给我时触发的事件。似乎codelens起泡了,我无法访问它。
我的理想是两个人得到两个信息:
这是否可行或超出了API的范围?我可以重写解析,但是已经有一些信息生成了该信息,所以我希望访问它。
答案 0 :(得分:0)
最终,我找到了自己问题的答案。即the built in commands。事实证明,您可以使用两个命令(在这里将其转换为函数)来获取文档符号并执行引用提供程序:
async function getSymbols(document: TextDocument): Promise<SymbolInformation[]>
{
return await commands.executeCommand<SymbolInformation[]>('vscode.executeDocumentSymbolProvider',
document.uri) || [];
}
async function getReferences(location: Location): Promise<Location[]>
{
return await commands.executeCommand<Location[]>('vscode.executeReferenceProvider',
location.uri,
new Position(
location.range.start.line,
location.range.start.character)) || [];
}
我稍后将这两个链接链接到一个涉及某些条件的单独函数调用中。
这不完全是我想要做的(获取codelens返回值),但是它允许我重用实现的内容而不必重新发明轮子。