Skip to content

Commit 8aef791

Browse files
committed
Merge branch 'multi-workspace'
2 parents 153b3f3 + ba88d29 commit 8aef791

File tree

3 files changed

+92
-163
lines changed

3 files changed

+92
-163
lines changed

client/out/languageserver.js

Lines changed: 15 additions & 48 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

client/src/languageserver.ts

Lines changed: 15 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -93,20 +93,17 @@ function getOuterMostWorkspaceFolder(folder: WorkspaceFolder): WorkspaceFolder {
9393
class LuaClient {
9494
private context: ExtensionContext;
9595
private documentSelector: DocumentSelector;
96-
private folder: WorkspaceFolder;
9796
protected client: LanguageClient;
98-
constructor(context: ExtensionContext, documentSelector: DocumentSelector, folder: WorkspaceFolder) {
97+
constructor(context: ExtensionContext, documentSelector: DocumentSelector) {
9998
this.context = context;
10099
this.documentSelector = documentSelector;
101-
this.folder = folder;
102100
}
103101

104102
async start() {
105103
// Options to control the language client
106104
let clientOptions: LanguageClientOptions = {
107105
// Register the server for plain text documents
108106
documentSelector: this.documentSelector,
109-
workspaceFolder: this.folder,
110107
progressOnInitialization: true,
111108
markdown: {
112109
isTrusted: true,
@@ -116,7 +113,7 @@ class LuaClient {
116113
}
117114
};
118115

119-
let config = Workspace.getConfiguration(undefined, this.folder);
116+
let config = Workspace.getConfiguration(undefined, vscode.workspace.workspaceFolders?.[0]);
120117
let commandParam: string[] = config.get("Lua.misc.parameters");
121118
let command: string;
122119
let platform: string = os.platform();
@@ -345,68 +342,33 @@ export function activate(context: ExtensionContext) {
345342
return;
346343
}
347344

348-
let uri = document.uri;
349-
let folder = Workspace.getWorkspaceFolder(uri);
350345
// Untitled files go to a default client.
351-
if (folder == null && Workspace.workspaceFolders == null && !defaultClient) {
346+
if (!defaultClient) {
352347
defaultClient = new LuaClient(context, [
353-
{ scheme: 'file', language: 'lua' }
354-
], null);
348+
{ language: 'lua' }
349+
]);
355350
defaultClient.start();
356351
return;
357352
}
358-
359-
// Files outside a folder can't be handled. This might depend on the language.
360-
// Single file languages like JSON might handle files outside the workspace folders.
361-
if (!folder) {
362-
return;
363-
}
364-
// If we have nested workspace folders we only start a server on the outer most workspace folder.
365-
folder = getOuterMostWorkspaceFolder(folder);
366-
367-
if (!clients.has(folder.uri.toString())) {
368-
let pattern: string = folder.uri.fsPath.replace(/(\[|\])/g, '[$1]') + '/**/*';
369-
let client = new LuaClient(context, [
370-
{ scheme: 'file', language: 'lua', pattern: pattern }
371-
], folder);
372-
clients.set(folder.uri.toString(), client);
373-
client.start();
374-
}
375-
}
376-
377-
function didCloseTextDocument(document: TextDocument): void {
378-
let uri = document.uri;
379-
if (clients.has(uri.toString())) {
380-
let client = clients.get(uri.toString());
381-
if (client) {
382-
clients.delete(uri.toString());
383-
client.stop();
384-
}
385-
}
386353
}
387354

388355
Workspace.onDidOpenTextDocument(didOpenTextDocument);
389-
//Workspace.onDidCloseTextDocument(didCloseTextDocument);
390356
Workspace.textDocuments.forEach(didOpenTextDocument);
391-
Workspace.onDidChangeWorkspaceFolders((event) => {
392-
for (let folder of event.removed) {
393-
let client = clients.get(folder.uri.toString());
394-
if (client) {
395-
clients.delete(folder.uri.toString());
396-
client.stop();
397-
}
357+
Workspace.onDidChangeWorkspaceFolders(() => {
358+
if (defaultClient) {
359+
defaultClient.stop();
360+
defaultClient = new LuaClient(context, [
361+
{ language: 'lua' }
362+
]);
363+
defaultClient.start();
398364
}
399365
});
400366
}
401367

402-
export async function deactivate(): Promise<void> {
403-
let promises: Thenable<void>[] = [];
368+
export async function deactivate() {
404369
if (defaultClient) {
405-
promises.push(defaultClient.stop());
406-
}
407-
for (let client of clients.values()) {
408-
promises.push(client.stop());
370+
defaultClient.stop();
371+
defaultClient = null;
409372
}
410-
await Promise.all(promises);
411373
return undefined;
412374
}

0 commit comments

Comments
 (0)