| |
| |
| |
| |
|
|
| import * as path from 'path'; |
| import { workspace, commands, ExtensionContext, OutputChannel } from 'vscode'; |
| import { WebSocket } from 'ws'; |
|
|
| import { |
| LanguageClient, |
| LanguageClientOptions, |
| ServerOptions, |
| TransportKind |
| } from 'vscode-languageclient/node'; |
|
|
| let client: LanguageClient; |
|
|
| export async function activate(context: ExtensionContext) { |
| const socketPort = workspace.getConfiguration('languageServerExample').get('port', 7000); |
| let socket: WebSocket | null = null; |
|
|
| commands.registerCommand('languageServerExample.startStreaming', () => { |
| |
| socket = new WebSocket(`ws://localhost:${socketPort}`); |
| }); |
|
|
| |
| const serverModule = context.asAbsolutePath( |
| path.join('server', 'out', 'server.js') |
| ); |
|
|
| |
| |
| const serverOptions: ServerOptions = { |
| run: { module: serverModule, transport: TransportKind.ipc }, |
| debug: { |
| module: serverModule, |
| transport: TransportKind.ipc, |
| } |
| }; |
|
|
| |
| let log = ''; |
| const websocketOutputChannel: OutputChannel = { |
| name: 'websocket', |
| |
| append(value: string) { |
| log += value; |
| console.log(value); |
| }, |
| appendLine(value: string) { |
| log += value; |
| |
| if (socket && socket.readyState === WebSocket.OPEN) { |
| socket.send(log); |
| } |
| log = ''; |
| }, |
| clear() { }, |
| show() { }, |
| hide() { }, |
| dispose() { }, |
| replace() { } |
| }; |
|
|
| |
| const clientOptions: LanguageClientOptions = { |
| |
| documentSelector: [{ scheme: 'file', language: 'plaintext' }], |
| synchronize: { |
| |
| fileEvents: workspace.createFileSystemWatcher('**/.clientrc') |
| }, |
| |
| outputChannel: websocketOutputChannel |
| }; |
|
|
| |
| client = new LanguageClient( |
| 'languageServerExample', |
| 'Language Server Example', |
| serverOptions, |
| clientOptions |
| ); |
|
|
| |
| await client.start(); |
| } |
|
|
| export function deactivate(): Thenable<void> { |
| if (!client) { |
| return undefined; |
| } |
| return client.stop(); |
| } |
|
|