修改VS Code Extension中的现有CodeLens

时间:2019-01-14 19:09:09

标签: typescript visual-studio-code vscode-extensions

在VS Code中,如果您的语言扩展提供了该扩展名,则您将获得Codelens,以向您显示函数,变量和其他符号上方的引用计数。像这样:https://i.imgur.com/HXzgjGh.png

我要接管一个项目,而我的首要任务之一就是重组。作为其中的一部分,我希望将引用引入本地/外部,而不必“显示所有引用”。

我经历了扩展API示例,并且一直looking through the API。之后,我构建了一些(几乎没有意义的)扩展,以进一步了解它们的工作方式。我可以插入带有任何所需数据的codelens,但是现在卡住了。似乎没有一种方法可以获取现有的编解码器,或者实际上,无法执行任何操作来访问构建“ i引用”的信息。

我沿途发现的另一个线索:这种工作方式是通过定义符号的语言来完成的。但是,似乎也没有办法遍历它们吗?我可以重新解析所有内容并进行自己的codelens分析,但这将比手动检查范围花费更多时间。它似乎也比必要的复杂。

我希望发生在生成/更改编解码器并将其提供给我时触发的事件。似乎codelens起泡了,我无法访问它。

我的理想是两个人得到两个信息:

  1. 从“ i引用”中获取数字i。
  2. 获取适用的行。

这是否可行或超出了API的范围?我可以重写解析,但是已经有一些信息生成了该信息,所以我希望访问它。

1 个答案:

答案 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返回值),但是它允许我重用实现的内容而不必重新发明轮子。