如何从语言服务器端检索 rootPath(或任何其他客户端信息)?

How to retrieve the rootPath (or any other client side info) from language server side?

我正在根据示例 "language server" (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;
} );

有没有更好的方法来做到这一点?

其实很简单。 rootPath 在初始化时提供给语言服务器,在 "connection.onInitialize".

的参数中
connection.onInitialize(
(params) : InitializeResult => {
    connection.console.log("Initialization : " + params.rootPath);
});