diff --git a/src/client/activation/activationService.ts b/src/client/activation/activationService.ts index f825a5235dc5..7ceca31a7a66 100644 --- a/src/client/activation/activationService.ts +++ b/src/client/activation/activationService.ts @@ -188,7 +188,6 @@ export class LanguageServerExtensionActivationService // Configuration is non-default, so `languageServer` should be present. const configurationService = this.serviceContainer.get(IConfigurationService); const lstType = configurationService.getSettings(this.resource).languageServer; - this.sendTelemetryForChosenLanguageServer(lstType).ignoreErrors(); return lstType === LanguageServerType.Jedi; } @@ -253,6 +252,8 @@ export class LanguageServerExtensionActivationService break; } + this.sendTelemetryForChosenLanguageServer(serverType).ignoreErrors(); + await this.logStartup(serverType); let server = this.serviceContainer.get(ILanguageServerActivator, serverType); try { diff --git a/src/client/common/configSettings.ts b/src/client/common/configSettings.ts index 57c865fccfa2..d0066f58b378 100644 --- a/src/client/common/configSettings.ts +++ b/src/client/common/configSettings.ts @@ -231,11 +231,12 @@ export class PythonSettings implements IPythonSettings { pythonSettings.get('autoUpdateLanguageServer', true) )!; - let ls = pythonSettings.get('languageServer'); - if (!ls) { + let ls = pythonSettings.get('languageServer') ?? LanguageServerType.Jedi; + ls = systemVariables.resolveAny(ls); + if (!Object.values(LanguageServerType).includes(ls)) { ls = LanguageServerType.Jedi; } - this.languageServer = systemVariables.resolveAny(ls)!; + this.languageServer = ls; // tslint:disable-next-line:no-backbone-get-set-outside-model no-non-null-assertion this.jediPath = systemVariables.resolveAny(pythonSettings.get('jediPath'))!; diff --git a/src/test/common/configSettings/configSettings.unit.test.ts b/src/test/common/configSettings/configSettings.unit.test.ts index 757824b8a833..6a6cbc07cf91 100644 --- a/src/test/common/configSettings/configSettings.unit.test.ts +++ b/src/test/common/configSettings/configSettings.unit.test.ts @@ -193,6 +193,31 @@ suite('Python Settings', async () => { config.verifyAll(); }); + function testLanguageServer(languageServer: LanguageServerType, expectedValue: LanguageServerType) { + test(languageServer, () => { + expected.pythonPath = 'python3'; + expected.languageServer = languageServer; + initializeConfig(expected); + config + .setup((c) => c.get('languageServer')) + .returns(() => expected.languageServer) + .verifiable(TypeMoq.Times.once()); + + settings.update(config.object); + + expect(settings.languageServer).to.be.equal(expectedValue); + config.verifyAll(); + }); + } + + suite('languageServer settings', async () => { + Object.values(LanguageServerType).forEach(async (languageServer) => { + testLanguageServer(languageServer, languageServer); + }); + + testLanguageServer('invalid' as LanguageServerType, LanguageServerType.Jedi); + }); + function testExperiments(enabled: boolean) { expected.pythonPath = 'python3'; // tslint:disable-next-line:no-any