@@ -2,12 +2,14 @@ import {
22 LanguageClient ,
33 ServerOptions ,
44 LanguageClientOptions ,
5+ StreamInfo ,
56} from "vscode-languageclient" ;
67
78import * as vscode from "vscode" ;
89import { spawn } from "child_process" ;
910import { existsSync , mkdir , mkdirSync } from "fs" ;
1011import { basename , dirname } from "path" ;
12+ import * as net from 'net' ;
1113
1214const LanguageID = 'php' ;
1315
@@ -35,21 +37,53 @@ export function deactivate() {
3537 return languageClient . stop ( ) ;
3638}
3739
40+ function getServerOptions ( config ) : ServerOptions
41+ {
42+ let serverOptions ;
43+ if ( ! config . remote . enabled )
44+ {
45+ // launch language server via stdio
46+ serverOptions = {
47+ run : {
48+ command : config . path ,
49+ args : [
50+ "language-server" ,
51+ ...config . launchServerArgs
52+ ]
53+ } ,
54+ debug : {
55+ command : "phpactor" ,
56+ args : [
57+ "language-server" ,
58+ ...config . launchServerArgs
59+ ]
60+ } ,
61+ } ;
62+ }
63+ else {
64+ // credits: https://github.com/itemis/xtext-languageserver-example/blob/master/vscode-extension/src/extension.ts
65+ // launch language server via socket
66+ serverOptions = ( ) => {
67+ let { host, port} = config . remote ;
68+ let socket = net . connect ( {
69+ host,
70+ port
71+ } ) ;
72+
73+ let result = < StreamInfo > {
74+ writer :socket ,
75+ reader :socket
76+ } ;
77+
78+ return Promise . resolve ( result ) ;
79+ }
80+ }
81+
82+ return serverOptions ;
83+ }
84+
3885function createClient ( config : any ) : LanguageClient {
39- let serverOptions : ServerOptions = {
40- run : {
41- command : config . path ,
42- args : [
43- "language-server"
44- ]
45- } ,
46- debug : {
47- command : "phpactor" ,
48- args : [
49- "language-server"
50- ]
51- } ,
52- } ;
86+ let serverOptions = getServerOptions ( config ) ;
5387
5488 let clientOptions : LanguageClientOptions = {
5589 documentSelector : [
0 commit comments