5

拡張機能のアクティブ化ルーチンを理解しようとしていますが、誰かが助けてくれるかもしれません。

ファイルpackage.jsonにはactivationEventsノードがあり、拡張機能がいつアクティブになるかを定義します (たとえば、 を介してコマンドを実行するときonCommand)。ヘルプを見る

サンプル拡張機能のコード ドキュメントから、拡張機能はコマンドの最初の実行時にのみアクティブ化されることがわかりました。

拡張機能で複数のコマンドを定義するとどうなりますか? すべてのコマンドをactivate関数に登録し、次のように追加しますactivationEvents

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

activateコマンドのいずれかが最初に実行されたときに、関数は一度だけ呼び出されますか? それとも、extension.testCommand1, extension.testCommand2and extension.testCommand3(--> 3 回) の最初の実行で関数を呼び出しますか?

私は言語サーバーも作成しており、すべてを同じ拡張機能に入れたいと考えています。これは可能ですか、それとも追加の 2 つの拡張機能 (クライアントとサーバー) を作成する必要がありますか?

4

1 に答える 1

3

最初の質問に答えるために、最初のアクティブ化イベントが発生したときにのみ、1 回だけ呼び出されます。これを自分で確認したい場合は、アクティベーション イベントを次のように設定しますpackage.json

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

次に、拡張機能のアクティブ化メソッドにブレークポイントを設定し、F5 キーを押してデバッグを開始し、コマンド パレットを介して言語モードを js、python、および ruby​​ に変更します。ブレークポイントが最初にヒットしただけであることがわかります。

2 番目の質問については、おそらく言語サービスで何をする必要があるかによって異なります。typescript 言語サービスと同じくらい複雑なことをしたい場合は、両方が必要になるかもしれません。lint やホバー ヒントなどを提供するが、typescript ほど複雑ではないものを作成したい場合は、1 つの拡張機能でそれを行うことができます。

私は個人的に、私の言語拡張機能の php サービスの例に従っています。チームはうまく機能し、機能が適切に分離されており、理解しやすいものになっています。php サービスのソースは、こちらで確認できます。

于 2015-11-19T18:25:17.267 に答える