【问题标题】:How can I activate my VS Code extension only when a workspace is opened?如何仅在工作区打开时激活我的 VS Code 扩展?
【发布时间】:2023-02-14 12:19:03
【问题描述】:

我正在编写一个 VS 代码扩展,它仅在工作区打开时才有用。它特别依赖于定义的ExtensionContext.storageUri(即!== undefined)和至少一个文件夹是该工作区的一部分。

我想避免每次需要与之交互时都必须检查工作区和内容是否存在。

查看available activation events,我不确定实现我需要的最佳方法。如果存在任何文件,也许使用workspaceContains

"workspaceContains:**/*"

目前我正在使用 onStartupFinished,它似乎在打开新工作区时发出(而不是仅在显式退出并重新打开 VS Code 时发出),这很棒。但是,当工作区未打开时,这意味着我的扩展程序的 activate() 函数将必须处理此问题并使扩展程序保持活动状态,而用户无法使用任何功能。感觉不对。除非我当然抛出一个错误,但我也不确定这是正确的解决方案。

【问题讨论】:

  • 在没有打开工作区的情况下使用 VSC 是不会经常发生的情况,只需在 VSC 启动时激活扩展,就可以使用激活*

标签: typescript visual-studio-code vscode-extensions vscode-api


【解决方案1】:

您建议的 activationEvent 模式似乎可以正常工作,并且扩展仅针对非空工作区激活。但是,从 1.74 版本(2022 年 11 月)开始,VS Code 为扩展开发人员添加了一个名为 Implicit Activation Events 的新功能,这意味着该扩展将被激活即使你忘记了将您贡献的一些事件添加到 activationEvents 属性。最后,不管你没加activationEvents的一些命令。当用户调用它时,扩展将被激活,即使是在一个空的工作区。

作为替代方案,您可以使用 When Clause Contexts禁用命令,但您仍然需要添加一些代码/检查才能使其正常工作。

也就是说,使用当前的 API 和最新的隐式激活事件功能,我看不出您如何能够完成您需要的。你将不得不添加一些检查对于您的扩展程序上的空工作区。

希望这可以帮助

【讨论】:

    猜你喜欢
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多