расширение vscode.Как я могу получить тело файла по имени файла - PullRequest
0 голосов
/ 13 февраля 2019

Я пишу свое собственное расширение для проприетарного языка (используя LSP - протокол языкового сервера ), и это расширение анализирует исходный код.Когда синтаксический анализатор принимает строку типа import "Filename.ext" (в c ++ это #include "fileName.h"), я должен найти этот файл «Filename.ext» и взять тело этого файла для анализа.На стороне клиента есть "workspace.findFiles (name);"но это не работает на стороне сервера.Пожалуйста скажите мне, как я могу получить файл по имени файла на стороне сервера.Создайте функцию на стороне клиента и импортируйте на сторону сервера не работает .

1 Ответ

0 голосов
/ 14 февраля 2019

На стороне сервера:

export function GetFileRequest(nameInter:string) {
    connection.sendRequest("getFile", nameInter).then( (body : string) => {
        if (body != undefined && body.length) pushImports(body);
    });
}

на стороне клиента: в функция активирована (контекст: ExtensionContext) после client.start ();

    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;
}

Этот код вернет текст из файла на сторону сервера.

...