微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以通过API访问editorHasDefinitionProvider或类似的上下文标志?

如何解决是否可以通过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 举报,一经查实,本站将立刻删除。