我为专有语言编写了自己的扩展名(使用 LSP -语言服务器协议),并且此扩展名解析了源代码。当解析器采用import "Filename.ext"
之类的字符串(在c ++中为#include "fileName.h"
)时,我必须找到此文件“ Filename.ext”,并采用该文件的正文进行解析。客户端具有“ workspace.findFiles(name);”但它在服务器端不起作用。请告诉我如何在服务器端按文件名获取文件。在客户端上创建一个功能,然后导入到服务器端不起作用。
答案 0 :(得分:0)
在服务器端:
export function GetFileRequest(nameInter:string) {
connection.sendRequest("getFile", nameInter).then( (body : string) => {
if (body != undefined && body.length) pushImports(body);
});
}
在客户端: 在client.start()之后的 functionactivate(context:ExtensionContext)函数中
client.onReady().then(() => {
client.onRequest("getFile", (nameInter : string) : Promise<string> => { return getFile(nameInter); } );
});
和客户端的异步功能:
async function getFile(name):Promise<string>{
let uri:Uri = undefined;
let text:string = undefined;
await workspace.findFiles(name, null, 1).then((value)=> {
if (value.length) {
uri=value[0];
}
});
if (uri!=undefined) {
let textDocument;
await workspace.openTextDocument(uri).then((value)=>textDocument = value);
text = textDocument.getText();
}
return text;
}
此代码将从文件返回文本到服务器端。