Upgrade language-server dep (#16)
* Communicate over TCP socket on Windows * Update language-server deppull/17/merge
parent
2d5bea19b4
commit
081e03daf3
|
@ -2,6 +2,6 @@
|
||||||
"minimum-stability": "dev",
|
"minimum-stability": "dev",
|
||||||
"prefer-stable": true,
|
"prefer-stable": true,
|
||||||
"require": {
|
"require": {
|
||||||
"felixfbecker/language-server": "^2.0"
|
"felixfbecker/language-server": "^2.3.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,6 +5,7 @@ import { spawn, execFile, ChildProcess } from 'child_process';
|
||||||
import * as vscode from 'vscode';
|
import * as vscode from 'vscode';
|
||||||
import { LanguageClient, LanguageClientOptions, StreamInfo } from 'vscode-languageclient';
|
import { LanguageClient, LanguageClientOptions, StreamInfo } from 'vscode-languageclient';
|
||||||
import * as semver from 'semver';
|
import * as semver from 'semver';
|
||||||
|
import * as net from 'net';
|
||||||
|
|
||||||
export function activate(context: vscode.ExtensionContext) {
|
export function activate(context: vscode.ExtensionContext) {
|
||||||
|
|
||||||
|
@ -32,18 +33,40 @@ export function activate(context: vscode.ExtensionContext) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
const serverOptions = (): Promise<ChildProcess | StreamInfo> => {
|
const serverOptions = () => new Promise<ChildProcess | StreamInfo>((resolve, reject) => {
|
||||||
|
function spawnServer(...args: string[]): ChildProcess {
|
||||||
// The server is implemented in PHP
|
// The server is implemented in PHP
|
||||||
const serverPath = context.asAbsolutePath(path.join('vendor', 'felixfbecker', 'language-server', 'bin', 'php-language-server.php'));
|
const serverPath = context.asAbsolutePath(path.join('vendor', 'felixfbecker', 'language-server', 'bin', 'php-language-server.php'));
|
||||||
const childProcess = spawn('php', [serverPath]);
|
const childProcess = spawn('php', [serverPath, ...args]);
|
||||||
childProcess.stderr.on('data', (chunk: Buffer) => {
|
childProcess.stderr.on('data', (chunk: Buffer) => {
|
||||||
console.error(chunk + '');
|
console.error(chunk + '');
|
||||||
});
|
});
|
||||||
childProcess.stdout.on('data', (chunk: Buffer) => {
|
childProcess.stdout.on('data', (chunk: Buffer) => {
|
||||||
console.log(chunk + '');
|
console.log(chunk + '');
|
||||||
});
|
});
|
||||||
return Promise.resolve(childProcess);
|
return childProcess;
|
||||||
};
|
}
|
||||||
|
if (process.platform === 'win32') {
|
||||||
|
// Use a TCP socket on Windows because of blocking STDIO
|
||||||
|
const server = net.createServer(socket => {
|
||||||
|
// 'connection' listener
|
||||||
|
console.log('PHP process connected');
|
||||||
|
socket.on('end', () => {
|
||||||
|
console.log('PHP process disconnected');
|
||||||
|
});
|
||||||
|
server.close();
|
||||||
|
resolve({ reader: socket, writer: socket });
|
||||||
|
});
|
||||||
|
// Listen on random port
|
||||||
|
server.listen(0, '127.0.0.1', () => {
|
||||||
|
const address = '127.0.0.1:' + server.address().port;
|
||||||
|
spawnServer('--tcp', address);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Use STDIO on Linux / Mac
|
||||||
|
resolve(spawnServer());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
// Options to control the language client
|
// Options to control the language client
|
||||||
let clientOptions: LanguageClientOptions = {
|
let clientOptions: LanguageClientOptions = {
|
||||||
|
|
Loading…
Reference in New Issue