在 VSCode 扩展中注册多个命令

Fel*_*x C 5 visual-studio-code vscode-extensions

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

在文件中package.jsonactivationEvents节点,我在其中定义了扩展将被激活的时间(例如,当通过 执行命令时onCommand)。查看帮助

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

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

"activationEvents": [
    "onCommand:extension.testCommand1",
    "onCommand:extension.testCommand2",
    "onCommand:extension.testCommand3"
],
Run Code Online (Sandbox Code Playgroud)

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

我也在编写一个语言服务器,并希望将所有内容都放在同一个扩展名中。这是可能的还是我需要创建两个额外的扩展(客户端和服务器)?

Lle*_*wey 3

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

"activationEvents": [
    "onLanguage:js",
    "onLanguage:python",
    "onLanguage:ruby"
],
Run Code Online (Sandbox Code Playgroud)

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

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

我个人正在遵循我的语言扩展的 php 服务示例。团队做得很好,功能分离良好且易于理解。您可以在此处查看 php 服务的源代码。