如何从语言服务器端检索 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;
[...]
但是如果我尝试在服务器端使用它,
- 我收到 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;
} );
有没有更好的方法来做到这一点?
其实很简单。 rootPath 在初始化时提供给语言服务器,在 "connection.onInitialize".
的参数中
connection.onInitialize(
(params) : InitializeResult => {
connection.console.log("Initialization : " + params.rootPath);
});
我正在根据示例 "language server" (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;
} );
有没有更好的方法来做到这一点?
其实很简单。 rootPath 在初始化时提供给语言服务器,在 "connection.onInitialize".
的参数中connection.onInitialize(
(params) : InitializeResult => {
connection.console.log("Initialization : " + params.rootPath);
});