我正在写一个VS代码扩展,它只在工作区打开时有用。它特别依赖于定义的ExtensionContext.storageUri
(即!== undefined
)和至少一个文件夹是该工作区的一部分。
我希望避免在每次需要与工作区和内容交互时都必须检查工作区和内容是否存在。
看了available activation events后,我不确定实现我所需要的最佳方法。如果有文件存在,也许使用workspaceContains
?
"workspaceContains:**/*"
目前我使用的是onStartupFinished
,它似乎是在打开新工作区时发出的(与仅当VS代码显式退出并重新打开时相反),这很好。但是当一个工作区没有打开时,这意味着我的扩展的activate()
函数将不得不处理这个问题,并使扩展处于活动状态,没有任何功能供用户使用。这感觉不对。当然,除非我抛出一个错误,但我也不确定这是正确的解决方案。
1条答案
按热度按时间gudnpqoy1#
您建议的
activationEvent
模式似乎可以正常工作,并且该扩展只对非空工作空间激活。(2022年11月),VS Code为扩展开发者增加了一个名为隐式激活事件的新功能,这意味着扩展将被激活 * 即使你忘记 * 包括你贡献的一些事件,到activationEvents
属性。最后,不管你 * 没有 * 添加一些命令到activationEvents
。当用户调用它时,扩展将被激活,即使是在一个空的工作区。作为一种替代方法,您可以使用When Clause Contexts来 * disable * 命令,但是您仍然需要添加一些代码/检查才能使其工作。
也就是说,使用当前的API和最新的隐式激活事件特性,我不知道你如何能完成你所需要的。你必须在你的扩展上添加一些检查空工作区的功能。
希望这能帮上忙