是否可以通过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 (将#修改为@)