Skip to content

Commit 2e7c91f

Browse files
authored
Merge pull request #42 from Rodrigo-Barros/client-socket
Socket connection added to vscodeclient.
2 parents 5f3b477 + 3f4aa31 commit 2e7c91f

File tree

2 files changed

+68
-14
lines changed

2 files changed

+68
-14
lines changed

package.json

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,26 @@
7373
"type": "object",
7474
"default": {},
7575
"description": "Specifies the underlying Phpactor configuration."
76+
},
77+
"phpactor.remote.enabled":{
78+
"type":"boolean",
79+
"default":false,
80+
"description": "Connect to language server via socket instead stdio"
81+
},
82+
"phpactor.remote.host":{
83+
"type":"string",
84+
"default":"127.0.0.1",
85+
"description": "Host that language server is running"
86+
},
87+
"phpactor.remote.port":{
88+
"type":"integer",
89+
"default":9090,
90+
"description": "Port that language server is running"
91+
},
92+
"phpactor.launchServerArgs":{
93+
"type":"array",
94+
"default":[],
95+
"description": "Arguments passeds to language server. Only applies if language server is running in stdio mode"
7696
}
7797
}
7898
}

src/extension.ts

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ import {
22
LanguageClient,
33
ServerOptions,
44
LanguageClientOptions,
5+
StreamInfo,
56
} from "vscode-languageclient";
67

78
import * as vscode from "vscode";
89
import { spawn } from "child_process";
910
import { existsSync, mkdir, mkdirSync } from "fs";
1011
import { basename, dirname } from "path";
12+
import * as net from 'net';
1113

1214
const 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+
3885
function 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

Comments
 (0)