在VSCode扩展中注册多个命令

6

我正在尝试理解扩展激活例程,希望有人可以帮助我。

在文件package.json中,有一个activationEvents节点,我在其中定义了扩展何时被激活(例如通过onCommand执行命令)。请参见帮助文档

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

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

"activationEvents": [
    "onCommand:extension.testCommand1",
    "onCommand:extension.testCommand2",
    "onCommand:extension.testCommand3"
],
< p > 当任何一个命令第一次被执行时,activate函数只会被调用一次吗?还是会针对extension.testCommand1extension.testCommand2extension.testCommand3的第一次执行调用三次该函数?

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

1个回答

3

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

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

然后在您的扩展中的激活方法中设置断点,按F5开始调试,并通过命令面板更改语言模式为js、python和ruby。您会发现断点只有第一次命中。
至于您的第二个问题,答案可能取决于您的语言服务需要做什么。如果您想要像typescript语言服务一样复杂的东西,则可能需要两者。如果您想要进行诸如linting、提供悬停提示或更多功能,但不像typescript那样复杂,您可以使用一个扩展程序完成它。
就我个人而言,我正在为我的语言扩展遵循php服务的示例。团队做得很好,功能分离清晰易懂。您可以查看php服务的源代码here

哇,太棒了,感谢分享 PHP 服务的链接,这将对我很有帮助。我正在创建一个非常相似的扩展来支持另一种脚本语言。语言支持本身和代码片段已经完成,还有一个命令可以打开特定命令的在线文档维基,但是自动完成的语言服务和其他一些方面的参考尚未完成。但现在我确信我能够实现缺失的部分,谢谢 :) - Felix C
很高兴能帮助到你 :-) 不知道这是哪种编程语言呢? - Llewey
1
这是SQF,用于为Bohemia Interactive的游戏《Arma》创建修改。 - Felix C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接