export function activate()

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);
}