Select Git revision
extension.ts
-
SeeBasTStick authoredSeeBasTStick authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
extension.ts 2.90 KiB
import {
workspace,
ExtensionContext,
window,
TextEditor,
StatusBarAlignment,
OutputChannel,
} from 'vscode';
import {
LanguageClient,
LanguageClientOptions,
ServerOptions,
StreamInfo
} from 'vscode-languageclient';
import * as net from 'net';
import * as path from 'path'
import { spawn } from 'child_process';
let client: LanguageClient;
let debugChannle: OutputChannel = null;
export function activate(context: ExtensionContext) {
const serverHome = context.asAbsolutePath(path.join('node_modules', 'b-language-server', 'build', 'libs', 'b-language-server-all.jar'))
const javaHome: string = workspace.getConfiguration("common").get("javaHome")
let prc = spawn(javaHome, ['-jar', serverHome])
prc.stdout.on('data', function (data : Buffer) {
let portAsStringWithBrackets : String = data.toString()
let closingBracketPos : number = portAsStringWithBrackets.indexOf(">")
let portNumber : number = parseInt(portAsStringWithBrackets.substring(1, closingBracketPos))
let connectionInfo = {
port: portNumber,
}
let serverOptions: ServerOptions = () => {
let socket = net.connect(connectionInfo);
let result: StreamInfo = {
writer: socket,
reader: socket
};
return Promise.resolve(result);
}
if (debugChannle == null) {
debugChannle = window.createOutputChannel("ProB language server")
}
// Options to control the language client
let clientOptions: LanguageClientOptions = {
// Register the server for B files
documentSelector: [{ scheme: 'file', language: 'classicalb' }, { scheme: 'file', language: 'rmchAddOn' }],
synchronize: {
// Notify the server about file changes to '.clientrc files contained in the workspace
fileEvents: workspace.createFileSystemWatcher('**/.clientrc')
},
outputChannel: debugChannle,