0

サンプルの「言語サーバー」( https://code.visualstudio.com/docs/extensions/example-language-server )に基づいて、言語拡張に取り組んでいます。

サーバー側では、vscode が使用する現在のフォルダーを知る必要があります。クライアント側では、次のように取得されます。

import * as vscode from 'vscode';
[...]
let curFolder : string =  vscode.workspace.rootPath;
[...]

しかし、これをサーバー側で使おうとすると、

  1. TS コンパイラ エラーが発生します:エラー TS2307: モジュール 'vscode' が見つかりません
  2. クライアントが開始されると (クライアントで F5 を使用)、サーバーに接続できません (サーバーで F5 を使用)。

私のサーバーとクライアントの両方のpackage.jsonは次を指定します:

  "devDependencies": {
    "typescript": "^1.8.9",
    "vscode": "^0.11.12"
  }

私の理解では、サーバーは IConnection オブジェクトを介してのみクライアントと通信するため、クライアント側で維持される vscode.* データにはアクセスできません。

サーバー側でこれを使用するための私の現在の回避策:

connection.sendRequest({ method: "getRootPath" })
.then( (rootPath : string) => {
    [...]

クライアント側のこのコード:

languageClient.onRequest({method: "getRootPath"}, (params : any) : string => {
        return vscode.workspace.rootPath;
} );

これを行うより良い方法はありますか?

4

1 に答える 1

0

それは実際には非常に簡単です。rootPath は、「connection.onInitialize」のパラメーターで、初期化時に言語サーバーに提供されます。

connection.onInitialize(
(params) : InitializeResult => {
    connection.console.log("Initialization : " + params.rootPath);
});
于 2016-06-24T14:56:44.650 に答える