5

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

在文件package.json中有activationEvents节点,我定义了何时激活扩展(例如,当通过 执行命令时onCommand)。查看帮助

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

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

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

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

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

4

1 回答 1

3

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

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

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

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

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

于 2015-11-19T18:25:17.267 回答