@@ -93,20 +93,17 @@ function getOuterMostWorkspaceFolder(folder: WorkspaceFolder): WorkspaceFolder {
9393class 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