问题描述
我正在写一个依赖于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 (将#修改为@)