Skip to content

Commit 36c9ba0

Browse files
Implement languageServer.enable setting migration with fallback logic
Co-authored-by: TwitchBronBron <[email protected]>
1 parent b37e4d1 commit 36c9ba0

File tree

3 files changed

+78
-2
lines changed

3 files changed

+78
-2
lines changed

package.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1887,6 +1887,13 @@
18871887
"scope": "resource"
18881888
},
18891889
"brightscript.enableLanguageServer": {
1890+
"type": "boolean",
1891+
"description": "Enable the Language Server, which includes things like syntax checking, intellisense, completions, etc.",
1892+
"default": true,
1893+
"scope": "resource",
1894+
"deprecationMessage": "Use 'brightscript.languageServer.enable' instead. This setting will be removed in a future version."
1895+
},
1896+
"brightscript.languageServer.enable": {
18901897
"type": "boolean",
18911898
"description": "Enable the Language Server, which includes things like syntax checking, intellisense, completions, etc.",
18921899
"default": true,

src/LanguageServerManager.spec.ts

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -554,4 +554,55 @@ describe('LanguageServerManager', () => {
554554
expect(client.outputChannel.appendLine.callCount).to.eql(1);
555555
});
556556
});
557+
558+
describe('isLanguageServerEnabledInSettings', () => {
559+
beforeEach(() => {
560+
// Clear configuration before each test
561+
vscode.workspace._configuration = {};
562+
});
563+
564+
it('returns true when new setting is true', () => {
565+
vscode.workspace._configuration['brightscript.languageServer.enable'] = true;
566+
vscode.workspace._configuration['brightscript.enableLanguageServer'] = false;
567+
568+
expect(languageServerManager.isLanguageServerEnabledInSettings()).to.be.true;
569+
});
570+
571+
it('returns false when new setting is false', () => {
572+
vscode.workspace._configuration['brightscript.languageServer.enable'] = false;
573+
vscode.workspace._configuration['brightscript.enableLanguageServer'] = true;
574+
575+
expect(languageServerManager.isLanguageServerEnabledInSettings()).to.be.false;
576+
});
577+
578+
it('falls back to old setting when new setting is undefined', () => {
579+
vscode.workspace._configuration['brightscript.enableLanguageServer'] = true;
580+
581+
expect(languageServerManager.isLanguageServerEnabledInSettings()).to.be.true;
582+
});
583+
584+
it('falls back to old setting false when new setting is undefined', () => {
585+
vscode.workspace._configuration['brightscript.enableLanguageServer'] = false;
586+
587+
expect(languageServerManager.isLanguageServerEnabledInSettings()).to.be.false;
588+
});
589+
590+
it('returns default true when both settings are undefined', () => {
591+
expect(languageServerManager.isLanguageServerEnabledInSettings()).to.be.true;
592+
});
593+
594+
it('prioritizes new setting over old setting when both are defined', () => {
595+
vscode.workspace._configuration['brightscript.languageServer.enable'] = false;
596+
vscode.workspace._configuration['brightscript.enableLanguageServer'] = true;
597+
598+
expect(languageServerManager.isLanguageServerEnabledInSettings()).to.be.false;
599+
});
600+
601+
it('prioritizes new setting over old setting when both are true', () => {
602+
vscode.workspace._configuration['brightscript.languageServer.enable'] = true;
603+
vscode.workspace._configuration['brightscript.enableLanguageServer'] = false;
604+
605+
expect(languageServerManager.isLanguageServerEnabledInSettings()).to.be.true;
606+
});
607+
});
557608
});

src/LanguageServerManager.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,12 @@ export class LanguageServerManager {
138138
if (configuration.affectsConfiguration('brightscript.bsdk')) {
139139
await this.syncVersionAndTryRun();
140140
}
141+
142+
//if the language server enable setting changed, restart the language server
143+
if (configuration.affectsConfiguration('brightscript.enableLanguageServer') ||
144+
configuration.affectsConfiguration('brightscript.languageServer.enable')) {
145+
await this.syncVersionAndTryRun();
146+
}
141147
});
142148
await this.syncVersionAndTryRun();
143149
}
@@ -428,8 +434,20 @@ export class LanguageServerManager {
428434

429435
public isLanguageServerEnabledInSettings() {
430436
let settings = vscode.workspace.getConfiguration('brightscript');
431-
let value = settings.enableLanguageServer === false ? false : true;
432-
return value;
437+
438+
// Priority: new setting -> old setting -> default (true)
439+
const newSetting = settings.get<boolean>('languageServer.enable');
440+
if (newSetting !== undefined) {
441+
return newSetting;
442+
}
443+
444+
const oldSetting = settings.get<boolean>('enableLanguageServer');
445+
if (oldSetting !== undefined) {
446+
return oldSetting;
447+
}
448+
449+
// Default to true if neither setting is defined
450+
return true;
433451
}
434452

435453
public async getTranspiledFileContents(pathAbsolute: string) {

0 commit comments

Comments
 (0)