Skip to content

Commit 562c6cf

Browse files
authored
Merge pull request #56 from jpogran/start-lang-server-without-wait
(GH-7) Start lang server without wait
2 parents 6012d07 + 0279515 commit 562c6cf

File tree

4 files changed

+94
-19
lines changed

4 files changed

+94
-19
lines changed

client/package.json

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "puppet-vscode",
33
"displayName": "Puppet",
44
"description": "Puppet VSCode extension",
5-
"version": "0.0.3",
5+
"version": "0.0.4",
66
"publisher": "puppet",
77
"license": "Apache 2.0",
88
"icon":"images/Puppet-Logo-Amber-sm.png",
@@ -122,6 +122,7 @@
122122
"devDependencies": {
123123
"typescript": "^2.0.3",
124124
"vscode": "^1.0.0",
125+
"vscode-languageclient": "^3.1.0",
125126
"vsce": "^1.18.0",
126127
"mocha": "^2.3.3",
127128
"gulp": "^3.9.1",
@@ -131,6 +132,8 @@
131132
"@types/mocha": "^2.2.32"
132133
},
133134
"dependencies": {
134-
"vscode-languageclient": "^3.1.0"
135+
"vscode": "^1.0.0",
136+
"vscode-languageclient": "^3.1.0",
137+
"vscode-languageserver": "^3.1.0"
135138
}
136139
}

client/src/extension.ts

Lines changed: 43 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,61 @@
11
'use strict';
22

33
import * as vscode from 'vscode';
4+
import * as path from 'path';
45

5-
import { startLangServerTCP } from '../src/languageserver';
6+
import { startLangServerTCP, createLanguageServerProcess } from '../src/languageserver';
67
import { setupPuppetCommands } from '../src/puppetcommands';
78

89
const langID = 'puppet'; // don't change this
910
var statusBarItem;
1011

1112
export function activate(context: vscode.ExtensionContext) {
12-
let config = vscode.workspace.getConfiguration('puppet');
13+
var myOutputChannel = vscode.window.createOutputChannel('Puppet');
14+
myOutputChannel.show()
1315

14-
var host = config['languageserver']['address']; // '127.0.0.1';
15-
var port = config['languageserver']['port']; // 8081;
16-
var stopOnClientExit = config['languageserver']['stopOnClientExit']; // true;
17-
var timeout = config['languageserver']['timeout']; // 8081;
18-
var preLoadPuppet = config['languageserver']['preLoadPuppet']; // true;
16+
try {
17+
var contextPath = context.asAbsolutePath(path.join('vendor', 'languageserver', 'puppet-languageserver'));
1918

20-
createStatusBarItem();
19+
let config = vscode.workspace.getConfiguration('puppet');
2120

22-
var languageServerClient = startLangServerTCP(host, port, langID, statusBarItem);
23-
context.subscriptions.push(languageServerClient.start());
21+
var host = config['languageserver']['address']; // '127.0.0.1';
22+
var port = config['languageserver']['port']; // 8081;
23+
var stopOnClientExit = config['languageserver']['stopOnClientExit']; // true;
24+
var timeout = config['languageserver']['timeout']; // 10;
25+
var preLoadPuppet = config['languageserver']['preLoadPuppet']; // true;
2426

25-
setupPuppetCommands(langID, languageServerClient, context);
27+
createStatusBarItem();
2628

27-
console.log('Congratulations, your extension "vscode-puppet" is now active!');
29+
var languageServerClient = null
30+
if (host == '127.0.0.1' || host == 'localhost' || host == '') {
31+
var serverProc = createLanguageServerProcess(contextPath, myOutputChannel);
32+
33+
serverProc.stdout.on('data', (data) => {
34+
console.log("OUTPUT: " + data.toString());
35+
myOutputChannel.appendLine("OUTPUT: " + data.toString());
36+
37+
languageServerClient = startLangServerTCP(host, port, langID, statusBarItem, myOutputChannel);
38+
context.subscriptions.push(languageServerClient.start());
39+
});
40+
41+
serverProc.on('close', (exitCode) => {
42+
console.log("SERVER terminated with exit code: " + exitCode);
43+
myOutputChannel.appendLine("SERVER terminated with exit code: " + exitCode);
44+
});
45+
}
46+
else {
47+
languageServerClient = startLangServerTCP(host, port, langID, statusBarItem, myOutputChannel);
48+
context.subscriptions.push(languageServerClient.start());
49+
}
50+
51+
setupPuppetCommands(langID, languageServerClient, context);
52+
53+
console.log('Congratulations, your extension "vscode-puppet" is now active!');
54+
myOutputChannel.appendLine('Congratulations, your extension "vscode-puppet" is now active!');
55+
} catch (e) {
56+
console.log((<Error>e).message);//conversion to Error type
57+
myOutputChannel.appendLine((<Error>e).message);
58+
}
2859
}
2960

3061
// this method is called when your extension is deactivated
@@ -47,4 +78,3 @@ export function createStatusBarItem() {
4778
})
4879
}
4980
}
50-

client/src/languageserver.ts

Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,53 @@
1-
import {
2-
LanguageClient, LanguageClientOptions, ServerOptions
3-
} from 'vscode-languageclient'
41
import * as vscode from 'vscode';
52
import * as net from 'net';
3+
import * as path from 'path';
64
import * as cp from 'child_process';
75
import ChildProcess = cp.ChildProcess;
6+
import {
7+
LanguageClient, LanguageClientOptions, ServerOptions
8+
} from 'vscode-languageclient'
89

910
import * as messages from '../src/messages';
1011

11-
export function startLangServerTCP(host: string, port: number, langID: string, statusBarItem): LanguageClient {
12+
export function createLanguageServerProcess(serverExe: string, myOutputChannel: vscode.OutputChannel) {
13+
myOutputChannel.appendLine('Language server found at: ' + serverExe)
14+
15+
let cmd = '';
16+
let args = [serverExe];
17+
let options = {};
18+
19+
// type Platform = 'aix'
20+
// | 'android'
21+
// | 'darwin'
22+
// | 'freebsd'
23+
// | 'linux'
24+
// | 'openbsd'
25+
// | 'sunos'
26+
// | 'win32';
27+
switch (process.platform) {
28+
case 'win32':
29+
myOutputChannel.appendLine('Windows spawn process does not work at the moment')
30+
vscode.window.showErrorMessage('Windows spawn process does not work at the moment. Functionality will be limited to syntax highlighting');
31+
break;
32+
default:
33+
myOutputChannel.appendLine('Starting language server')
34+
cmd = 'ruby'
35+
options = {
36+
shell: true,
37+
env: process.env,
38+
stdio: 'pipe',
39+
};
40+
}
41+
42+
var proc = cp.spawn(cmd, args, options)
43+
console.log("ProcID = " + proc.pid);
44+
myOutputChannel.appendLine('Language server PID:' + proc.pid)
45+
46+
return proc;
47+
}
48+
49+
export function startLangServerTCP(host: string, port: number, langID: string, statusBarItem, myOutputChannel): LanguageClient {
50+
myOutputChannel.appendLine('Configuring language server options')
1251
let serverOptions: ServerOptions = function () {
1352
return new Promise((resolve, reject) => {
1453
var client = new net.Socket();
@@ -21,13 +60,16 @@ export function startLangServerTCP(host: string, port: number, langID: string, s
2160
});
2261
}
2362

63+
myOutputChannel.appendLine('Configuring language server client options')
2464
let clientOptions: LanguageClientOptions = {
2565
documentSelector: [langID],
2666
}
2767

68+
myOutputChannel.appendLine('Starting language server client')
2869
var title = `tcp lang server (host ${host} port ${port})`;
2970
var languageServerClient = new LanguageClient(title, serverOptions, clientOptions)
3071
languageServerClient.onReady().then(() => {
72+
myOutputChannel.appendLine('Language server client started, setting puppet version')
3173
languageServerClient.sendRequest(messages.PuppetVersionRequest.type).then((versionDetails) => {
3274
statusBarItem.color = "#affc74";
3375
statusBarItem.text = "$(terminal) " + versionDetails.puppetVersion;

puppet-vscode-0.0.3.vsix

-145 KB
Binary file not shown.

0 commit comments

Comments
 (0)