in src/extension.ts [15:91]
export function activate(context: ExtensionContext) {
function createServer(): Promise<StreamInfo> {
return new Promise((resolve, reject) => {
var server = net.createServer((socket) => {
console.log("Creating server");
resolve({
reader: socket,
writer: socket
});
socket.on('end', () => console.log("Disconnected"));
}).on('error', (err) => {
// handle errors here
throw err;
});
let javaExecutablePath = findJavaExecutable('java');
if (javaExecutablePath == null) {
const messageOptions:MessageOptions = {modal:false};
window.showErrorMessage("Couldn't locate java in $JAVA_HOME or $PATH. ", messageOptions, "Install Java").then(select => {
if(select === "Install Java"){
env.openExternal(Uri.parse('https://' + "www.java.com/ja/download/manual.jsp"))
}else{
window.showErrorMessage("VDM++ language server can't launching.")
}
})
return
}
// grab a random port.
server.listen(() => {
// Start the child java process
let options = { cwd: workspace.rootPath };
let args = [
'-jar',
path.resolve(context.extensionPath, './', 'assets', 'vdmpp-language-server-1.0-SNAPSHOT.jar'),
server.address().port.toString()
]
let process = child_process.spawn(javaExecutablePath, args, options);
// Send raw output to a file
if (!fs.existsSync(context.storagePath))
fs.mkdirSync(context.storagePath);
let logFile = context.storagePath + '/vscode-languageserver-java-example.log';
let logStream = fs.createWriteStream(logFile, { flags: 'w' });
process.stdout.pipe(logStream);
process.stderr.pipe(logStream);
console.log(`Storing log in '${logFile}'`);
});
});
};
// Options to control the language client
let clientOptions: LanguageClientOptions = {
// Register the server for plain text documents
documentSelector: [{ scheme: 'file', language: 'vdmpp' }],
synchronize: {
// Synchronize the setting section 'VdmppLanguageServer' to the server
configurationSection: 'VdmppLanguageServer',
// Notify the server about file changes to '.clientrc files contain in the workspace
fileEvents: workspace.createFileSystemWatcher('**/.vdmpp')
}
}
// Create the language client and start the client.
let disposable = new LanguageClient('VdmppLanguageServer', 'VDM++ Language Server', createServer, clientOptions).start();
// Push the disposable to the context's subscriptions so that the
// client can be deactivated on extension deactivation
context.subscriptions.push(disposable);
}