2017-09-04 55 views
2

我正在寫一個用於neovim的語言服務器協議(LSP)服務器,並且我想對VSCode進行測試以確保我已經掌握了所有的細節,並且我不會意外編碼任何neovim主義進入我的實施。我可以在不寫擴展的情況下測試我的LSP服務器嗎?

當前的文檔建議我應該寫一個VSCode擴展來充當我的服務器的客戶端,但我並不真的有興趣將這麼多精力投入到我不會使用的平臺上。

在neovim我可以定義一個CLI命令和它對應的文件類型和打去:

let g:LanguageClient_serverCommands = { 
    \ 'rust': ['rustup', 'run', 'nightly', 'rls'], 
    \ 'javascript': ['/opt/javascript-typescript-langserver/lib/language-server-stdio.js'], 
    \ } 

確實在Visual Studio代碼類似的東西存在嗎?

+0

您不需要完整的擴展VSCode擴展,但最小的擴展它的LSP客戶端。不幸的是,我不能想到更簡單的方法。 –

回答

0

這需要一點努力譜寫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 +空格...)並將正確的請求/通知發送到服務器

相關問題