-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathextension.ts
99 lines (85 loc) · 2.76 KB
/
extension.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
'use strict';
import * as vscode from 'vscode';
import {
LanguageClient,
LanguageClientOptions,
ServerOptions
} from 'vscode-languageclient/node';
let languageClient: LanguageClient;
let outputChannel: vscode.OutputChannel;
let traceOutputChannel: vscode.OutputChannel;
function startLanguageServer(context: vscode.ExtensionContext) {
const config = vscode.workspace.getConfiguration('JETLSClient');
const juliaExecutable = config.get<string>('juliaExecutablePath', 'julia');
const serverScript = context.asAbsolutePath('runserver.jl');
const serverArgsToRun = ['--startup-file=no', '--project=.', serverScript];
const serverArgsToDebug = ['--startup-file=no', '--project=.', serverScript, '--debug=yes'];
const serverOptions: ServerOptions = {
run: { command: juliaExecutable, args: serverArgsToRun },
debug: { command: juliaExecutable, args: serverArgsToDebug }
};
const clientOptions: LanguageClientOptions = {
// documentSelector: [{ scheme: 'file', language: 'julia' }],
documentSelector: [
{
scheme: 'file',
language: 'julia'
},
{
scheme: 'untitled',
language: 'julia'
}
],
// synchronize: {
// // Notify the server about file changes to '.clientrc files contained in the workspace
// fileEvents: vscode.workspace.createFileSystemWatcher('**/.clientrc'),
// },
outputChannel,
traceOutputChannel,
};
languageClient = new LanguageClient(
'JETLSClient',
'JETLS Language Server',
serverOptions,
clientOptions,
);
languageClient.start();
}
// TODO: "Refresh" the language server when the configuration changes
function restartLanguageServer(context: vscode.ExtensionContext) {
if (languageClient) {
languageClient.stop().then(() => {
languageClient.start();
});
} else {
startLanguageServer(context);
}
}
export function activate(context: vscode.ExtensionContext) {
context.subscriptions.push(vscode.workspace.onDidChangeConfiguration(event => {
if (event.affectsConfiguration('JETLSClient.juliaExecutablePath')) {
restartLanguageServer(context);
};
}));
context.subscriptions.push(
vscode.commands.registerCommand('JETLSClient.restartLanguageServer', () => {
restartLanguageServer(context);
})
);
outputChannel = vscode.window.createOutputChannel('JETLS Language Server');
traceOutputChannel = vscode.window.createOutputChannel('JETLS Language Server (Trace)');
startLanguageServer(context);
}
export function deactivate() {
const promises: Thenable<void>[] = [];
if (languageClient) {
promises.push(languageClient.stop());
}
if (outputChannel) {
outputChannel.dispose();
}
if (traceOutputChannel) {
traceOutputChannel.dispose();
}
return Promise.all(promises);
}