Skip to content

Commit b38fa58

Browse files
jakebaileykarthiknadig
authored andcommitted
Ensure languageServer value is valid, send event during activate (microsoft#13064)
1 parent 82fd6f6 commit b38fa58

File tree

3 files changed

+31
-4
lines changed

3 files changed

+31
-4
lines changed

src/client/activation/activationService.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,6 @@ export class LanguageServerExtensionActivationService
188188
// Configuration is non-default, so `languageServer` should be present.
189189
const configurationService = this.serviceContainer.get<IConfigurationService>(IConfigurationService);
190190
const lstType = configurationService.getSettings(this.resource).languageServer;
191-
this.sendTelemetryForChosenLanguageServer(lstType).ignoreErrors();
192191
return lstType === LanguageServerType.Jedi;
193192
}
194193

@@ -253,6 +252,8 @@ export class LanguageServerExtensionActivationService
253252
break;
254253
}
255254

255+
this.sendTelemetryForChosenLanguageServer(serverType).ignoreErrors();
256+
256257
await this.logStartup(serverType);
257258
let server = this.serviceContainer.get<ILanguageServerActivator>(ILanguageServerActivator, serverType);
258259
try {

src/client/common/configSettings.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -231,11 +231,12 @@ export class PythonSettings implements IPythonSettings {
231231
pythonSettings.get<boolean>('autoUpdateLanguageServer', true)
232232
)!;
233233

234-
let ls = pythonSettings.get<LanguageServerType>('languageServer');
235-
if (!ls) {
234+
let ls = pythonSettings.get<LanguageServerType>('languageServer') ?? LanguageServerType.Jedi;
235+
ls = systemVariables.resolveAny(ls);
236+
if (!Object.values(LanguageServerType).includes(ls)) {
236237
ls = LanguageServerType.Jedi;
237238
}
238-
this.languageServer = systemVariables.resolveAny(ls)!;
239+
this.languageServer = ls;
239240

240241
// tslint:disable-next-line:no-backbone-get-set-outside-model no-non-null-assertion
241242
this.jediPath = systemVariables.resolveAny(pythonSettings.get<string>('jediPath'))!;

src/test/common/configSettings/configSettings.unit.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,31 @@ suite('Python Settings', async () => {
193193
config.verifyAll();
194194
});
195195

196+
function testLanguageServer(languageServer: LanguageServerType, expectedValue: LanguageServerType) {
197+
test(languageServer, () => {
198+
expected.pythonPath = 'python3';
199+
expected.languageServer = languageServer;
200+
initializeConfig(expected);
201+
config
202+
.setup((c) => c.get<LanguageServerType>('languageServer'))
203+
.returns(() => expected.languageServer)
204+
.verifiable(TypeMoq.Times.once());
205+
206+
settings.update(config.object);
207+
208+
expect(settings.languageServer).to.be.equal(expectedValue);
209+
config.verifyAll();
210+
});
211+
}
212+
213+
suite('languageServer settings', async () => {
214+
Object.values(LanguageServerType).forEach(async (languageServer) => {
215+
testLanguageServer(languageServer, languageServer);
216+
});
217+
218+
testLanguageServer('invalid' as LanguageServerType, LanguageServerType.Jedi);
219+
});
220+
196221
function testExperiments(enabled: boolean) {
197222
expected.pythonPath = 'python3';
198223
// tslint:disable-next-line:no-any

0 commit comments

Comments
 (0)