如何解决是否可以通过API访问editorHasDefinitionProvider或类似的上下文标志?
我正在写一个依赖于vscode.executeDeFinitionProvider
命令的扩展。这是相关代码:
const symbolDeFinitions = (await vscode.commands.executeCommand(
'vscode.executeDeFinitionProvider',symbolMeta.uri,symbolMeta.position
)) as vscode.LocationLink[];
在package.json
中,我添加了when
子句,以确保在激活扩展名之前已加载定义提供程序:
"menus": {
"editor/context": [
{
"command": "vscode-ext-gtad.gtad","group": "navigation","when": "editorHasTypeDeFinitionProvider && editorHasDeFinitionProvider && editorTextFocus && !isInEmbeddedEditor"
}
]
},"keybindings": [
{
"command": "vscode-ext-gtad.gtad","key": "undefined","when": "editorHasTypeDeFinitionProvider && editorHasDeFinitionProvider && editorTextFocus && !isInEmbeddedEditor"
}
对于最终用户来说一切都很好。
进行单元测试以运行上面的第一个代码而不激活扩展时,就会出现此问题。测试会碰碰运气,也就是说,symbolDeFinitions
在大多数情况下都是空的,偶尔也包含正确的定义。
这使我怀疑可能是由于测试运行太快,并且在完全加载定义提供程序之前调用了executeCommand
。
因此,我在调用和锁定之前增加了5000ms的延迟。运作100%。但这当然是完全武断和脆弱的。
我真的在这里寻找支票,与when
子句中使用的支票相同,但是可以在脚本中使用。
我最近的是this question。可接受的答案指出了一个问题,即您只能setContext
(在official docs中也一样),而我的问题将由不存在的getContext
解决
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。