API 用于从扩展中获取语言服务器信息(括号对,函数 begin/end,...)
API for getting language server info from extension (bracket pairs, function begin/end, ...)
我目前正在为 VSCode 写一个扩展,它需要对编辑器中当前显示的代码有一些很好的了解,我想知道是否有一些 API 可以给我所需的信息(例如来自当前语言服务器的信息),或者如果我必须通过实施所有需要的代码解析等来完成繁重的工作
我需要的详细信息如下:
- 给出的是代码中的位置(行 + 列号)
- 关于给定的职位,我想知道的是:
- pos 是否在函数内部?如果是,函数从哪里开始和结束?
- pos 是否在字符串中?如果是,字符串从哪里开始和结束?
该扩展程序将提供某种“vim 选择灯”。
你只能通过 VS Code APIs.
获得其中的一半
Is pos inside a function and if so, where does the function start & end?
使用 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)。我的 Separators 扩展程序 (https://github.com/alefragnani/vscode-separators/blob/b6d515847bbaccf6395b24f9fdf82c373cb24fd7/src/symbols.ts#L51)
上提供了完整示例
Is pos inside a string and if so, where does the string start & end?
不幸的是,没有 API,因为 VS Code 不公开语言标记或 AST。所以,你将不得不自己处理它,也许使用正则表达式。
希望对您有所帮助
我目前正在为 VSCode 写一个扩展,它需要对编辑器中当前显示的代码有一些很好的了解,我想知道是否有一些 API 可以给我所需的信息(例如来自当前语言服务器的信息),或者如果我必须通过实施所有需要的代码解析等来完成繁重的工作
我需要的详细信息如下:
- 给出的是代码中的位置(行 + 列号)
- 关于给定的职位,我想知道的是:
- pos 是否在函数内部?如果是,函数从哪里开始和结束?
- pos 是否在字符串中?如果是,字符串从哪里开始和结束?
该扩展程序将提供某种“vim 选择灯”。
你只能通过 VS Code APIs.
获得其中的一半Is pos inside a function and if so, where does the function start & end?
使用 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)。我的 Separators 扩展程序 (https://github.com/alefragnani/vscode-separators/blob/b6d515847bbaccf6395b24f9fdf82c373cb24fd7/src/symbols.ts#L51)
上提供了完整示例Is pos inside a string and if so, where does the string start & end?
不幸的是,没有 API,因为 VS Code 不公开语言标记或 AST。所以,你将不得不自己处理它,也许使用正则表达式。
希望对您有所帮助