Могу ли я проверить свой сервер LSP без написания расширения?
Я пишу сервер Language Server Protocol (LSP) для использования с neovim, и я хотел бы проверить его на VSCode, чтобы убедиться, что я правильно понял все детали и что я случайно не кодирую какие-либо neovim-isms в мою реализацию.
Текущие документы предлагают мне написать расширение VSCode, которое будет действовать как клиент для моего сервера, но я не очень заинтересован в том, чтобы вкладывать столько усилий в платформу, которую я не буду использовать.
В neovim я могу просто определить команду CLI и тип файла, которому она соответствует, и нажать go:
let g:LanguageClient_serverCommands = {
\ 'rust': ['rustup', 'run', 'nightly', 'rls'],
\ 'javascript': ['/opt/javascript-typescript-langserver/lib/language-server-stdio.js'],
\ }
существует ли нечто подобное в коде Visual Studio?
1 ответ
Для написания языкового клиента в VSCode требуется мало усилий, вот как я это сделал:
export function activate(context: vscode.ExtensionContext) {
// This line of code will only be executed once when your extension is activated
// TODO: Start server exe and communicate with it
let serverExe = <Path_to_server>;
let ServerOptions: ServerOptions = {
run: {command: serverExe, args:['-lsp']},
debug: {command: serverExe, args:['-lsp']}
}
let clientOptions: LanguageClientOptions = {
// Register the server for plain text documents
documentSelector: [
{
pattern: '**/*.txt',
}
],
}
let lspClient = new LanguageClient("Hello LSP", ServerOptions, clientOptions);
// For debugging only
//lspClient.trace = Trace.Verbose;
//add all disposables here
context.subscriptions.push(lspClient.start());
}
Как только клиент запускается, он запускает сервер и начинает диалог инициализации, клиент наблюдает за всеми важными событиями в VSCode (документ открыт / закрыт / изменен, Ctrl+ пробел,...) и отправляет нужные запросы / уведомления на сервер