Skip to content

Commit 58e6409

Browse files
author
Kartik Raj
authored
Do not attempt to launch Jedi language server in case when selected Python interpreter is invalid (#19449)
* Do not attempt to launch Jedi server in case when selected Python interpreter is invalid * Improve logging * Oops
1 parent 4044efb commit 58e6409

File tree

4 files changed

+20
-7
lines changed

4 files changed

+20
-7
lines changed

src/client/languageServer/jediLSExtensionManager.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import {
1717
import { IEnvironmentVariablesProvider } from '../common/variables/types';
1818
import { IInterpreterService } from '../interpreter/contracts';
1919
import { IServiceContainer } from '../ioc/types';
20+
import { traceError } from '../logging';
2021
import { PythonEnvironment } from '../pythonEnvironments/info';
2122
import { LanguageServerCapabilities } from './languageServerCapabilities';
2223
import { ILanguageServerExtensionManager } from './types';
@@ -78,10 +79,13 @@ export class JediLSExtensionManager extends LanguageServerCapabilities
7879
}
7980

8081
// eslint-disable-next-line class-methods-use-this
81-
canStartLanguageServer(): boolean {
82-
// Return true for now since it's shipped with the extension.
82+
canStartLanguageServer(interpreter: PythonEnvironment | undefined): boolean {
83+
if (!interpreter) {
84+
traceError('Unable to start Jedi language server as a valid interpreter is not selected');
85+
return false;
86+
}
87+
// Otherwise return true for now since it's shipped with the extension.
8388
// Update this when JediLSP is pulled in a separate extension.
84-
8589
return true;
8690
}
8791

src/client/languageServer/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ export interface ILanguageServerCapabilities extends ILanguageServer {
3131
export interface ILanguageServerExtensionManager extends ILanguageServerCapabilities {
3232
startLanguageServer(resource: Resource, interpreter?: PythonEnvironment): Promise<void>;
3333
stopLanguageServer(): Promise<void>;
34-
canStartLanguageServer(): boolean;
34+
canStartLanguageServer(interpreter: PythonEnvironment | undefined): boolean;
3535
languageServerNotAvailable(): Promise<void>;
3636
dispose(): void;
3737
}

src/client/languageServer/watcher.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ export class LanguageServerWatcher
180180
const languageServerExtensionManager = this.createLanguageServer(serverType);
181181
this.workspaceLanguageServers.set(key, languageServerExtensionManager);
182182

183-
if (languageServerExtensionManager.canStartLanguageServer()) {
183+
if (languageServerExtensionManager.canStartLanguageServer(interpreter)) {
184184
// Start the language server.
185185
await languageServerExtensionManager.startLanguageServer(lsResource, interpreter);
186186

src/test/languageServer/jediLSExtensionManager.unit.test.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { IEnvironmentVariablesProvider } from '../../client/common/variables/typ
99
import { IInterpreterService } from '../../client/interpreter/contracts';
1010
import { IServiceContainer } from '../../client/ioc/types';
1111
import { JediLSExtensionManager } from '../../client/languageServer/jediLSExtensionManager';
12+
import { PythonEnvironment } from '../../client/pythonEnvironments/info';
1213

1314
suite('Language Server - Jedi LS extension manager', () => {
1415
let manager: JediLSExtensionManager;
@@ -37,9 +38,17 @@ suite('Language Server - Jedi LS extension manager', () => {
3738
assert.notStrictEqual(manager.serverProxy, undefined);
3839
});
3940

40-
test('canStartLanguageServer should return true', () => {
41-
const result = manager.canStartLanguageServer();
41+
test('canStartLanguageServer should return true if an interpreter is passed in', () => {
42+
const result = manager.canStartLanguageServer(({
43+
path: 'path/to/interpreter',
44+
} as unknown) as PythonEnvironment);
4245

4346
assert.strictEqual(result, true);
4447
});
48+
49+
test('canStartLanguageServer should return false otherwise', () => {
50+
const result = manager.canStartLanguageServer(undefined);
51+
52+
assert.strictEqual(result, false);
53+
});
4554
});

0 commit comments

Comments
 (0)