我目前正在为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。
希望有帮助