サンプルの「言語サーバー」( https://code.visualstudio.com/docs/extensions/example-language-server )に基づいて、言語拡張に取り組んでいます。
サーバー側では、vscode が使用する現在のフォルダーを知る必要があります。クライアント側では、次のように取得されます。
import * as vscode from 'vscode';
[...]
let curFolder : string = vscode.workspace.rootPath;
[...]
しかし、これをサーバー側で使おうとすると、
- TS コンパイラ エラーが発生します:エラー TS2307: モジュール 'vscode' が見つかりません
- クライアントが開始されると (クライアントで 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;
} );
これを行うより良い方法はありますか?