用于从扩展(括号对,函数begin/end,…)获取语言服务器信息的API



我目前正在为VSCode编写扩展,它需要对编辑器中当前显示的代码有一些很好的了解,我想知道是否有一些可用的API可以给我所需的信息(例如从当前的语言服务器),或者如果我必须通过实现所有需要的代码解析等来做繁重的工作。

我需要的详细信息如下:

  • 给出的是代码中的位置(行+ col号)
  • 关于这个职位,我想了解些什么?
    • 在函数内部,如果是,函数从哪里开始&结束?
    • 在字符串中,如果是,字符串从哪里开始&结束?

扩展将提供某种"vim选择灯"。

你只能通过VS Code api实现一半。

在函数内部,如果是,函数从哪里开始&结束?

使用vscode.executeDocumentSymbolProvider命令,您可以从一个文件中收集所有函数,并检查当前位置是否在其中一个函数内。

像这样来检索函数:


const symbolsToFind = [SymbolKind.Function, SymbolKind.Method, SymbolKind.Constructor];
const docSymbols = await commands.executeCommand(
'vscode.executeDocumentSymbolProvider',
window.activeTextEditor.document.uri
) as DocumentSymbol[];
const docSymbolsFunctionsMethods = docSymbols
? docSymbols.filter(symbol => symbolsToFind.includes(symbol.kind))
: undefined;

每个Symbol提供了一个Range,它定义了函数声明和函数体的开始和结束。

请注意,您可能需要递归方法(每个Symbol可以包含其他Symbol)。完整的示例可在我的分隔符上获得。扩展(https://github.com/alefragnani/vscode-separators/blob/b6d515847bbaccf6395b24f9fdf82c373cb24fd7/src/symbols.ts L51)

在字符串中,如果是,字符串从哪里开始&结束?

不幸的是,没有API,因为VS Code不公开语言标记或AST,所以,你必须自己处理它,可能使用regex。

希望有帮助

最新更新