在 VSCode 扩展中注册多个命令

Registration of multiple commands in VSCode extension

我正在尝试了解扩展程序激活例程,也许有人可以帮助我。

在文件 package.json 中有 activationEvents 节点,我在其中定义扩展何时被激活(例如,当通过 onCommand 执行命令时)。 See help

根据示例扩展的代码文档,我了解到该扩展只会在第一次执行命令时激活。

当我在扩展中定义多个命令时会发生什么?我会在 activate 函数中注册所有命令并将它们添加到 activationEvents:

"activationEvents": [
    "onCommand:extension.testCommand1",
    "onCommand:extension.testCommand2",
    "onCommand:extension.testCommand3"
],

activate函数是否只在第一次执行任何命令时调用一次?或者它会在第一次执行 extension.testCommand1extension.testCommand2extension.testCommand3 时调用函数(--> 三次)?

我也在写一个语言服务器,想把所有东西都放在同一个扩展中。这是可能的还是我需要创建两个额外的扩展(客户端和服务器)?

回答你的第一个问题,它只会被调用一次,只有在第一次激活事件发生时。如果您有兴趣自己验证这一点,请将 package.json 中的激活事件设置为:

"activationEvents": [
    "onLanguage:js",
    "onLanguage:python",
    "onLanguage:ruby"
],

然后在你的扩展中的激活方法中设置断点,按F5开始调试,通过命令面板将语言模式更改为js、python、ruby。您会看到断点仅在第一次命中。

关于你的第二个问题,这可能取决于你的语言服务需要做什么。如果你想做一些像打字稿语言服务一样复杂的事情,你可能需要两者。如果你想做一些 lints,提供悬停提示,或更多,但不像打字稿那么复杂,你可以做一个扩展。

我个人在使用 php 服务作为我的语言扩展的例子。该团队做得很好,功能分离良好且易于理解。您可以查看 php 服务的来源 here.