diff --git a/src/client/languageServer/jediLSExtensionManager.ts b/src/client/languageServer/jediLSExtensionManager.ts index eef146aee4d9..a4836523660f 100644 --- a/src/client/languageServer/jediLSExtensionManager.ts +++ b/src/client/languageServer/jediLSExtensionManager.ts @@ -17,6 +17,7 @@ import { import { IEnvironmentVariablesProvider } from '../common/variables/types'; import { IInterpreterService } from '../interpreter/contracts'; import { IServiceContainer } from '../ioc/types'; +import { traceError } from '../logging'; import { PythonEnvironment } from '../pythonEnvironments/info'; import { LanguageServerCapabilities } from './languageServerCapabilities'; import { ILanguageServerExtensionManager } from './types'; @@ -78,10 +79,13 @@ export class JediLSExtensionManager extends LanguageServerCapabilities } // eslint-disable-next-line class-methods-use-this - canStartLanguageServer(): boolean { - // Return true for now since it's shipped with the extension. + canStartLanguageServer(interpreter: PythonEnvironment | undefined): boolean { + if (!interpreter) { + traceError('Unable to start Jedi language server as a valid interpreter is not selected'); + return false; + } + // Otherwise return true for now since it's shipped with the extension. // Update this when JediLSP is pulled in a separate extension. - return true; } diff --git a/src/client/languageServer/types.ts b/src/client/languageServer/types.ts index 6fbeca379a86..cab882f78f3e 100644 --- a/src/client/languageServer/types.ts +++ b/src/client/languageServer/types.ts @@ -31,7 +31,7 @@ export interface ILanguageServerCapabilities extends ILanguageServer { export interface ILanguageServerExtensionManager extends ILanguageServerCapabilities { startLanguageServer(resource: Resource, interpreter?: PythonEnvironment): Promise; stopLanguageServer(): Promise; - canStartLanguageServer(): boolean; + canStartLanguageServer(interpreter: PythonEnvironment | undefined): boolean; languageServerNotAvailable(): Promise; dispose(): void; } diff --git a/src/client/languageServer/watcher.ts b/src/client/languageServer/watcher.ts index c41c856d53af..8fb6591b70c8 100644 --- a/src/client/languageServer/watcher.ts +++ b/src/client/languageServer/watcher.ts @@ -180,7 +180,7 @@ export class LanguageServerWatcher const languageServerExtensionManager = this.createLanguageServer(serverType); this.workspaceLanguageServers.set(key, languageServerExtensionManager); - if (languageServerExtensionManager.canStartLanguageServer()) { + if (languageServerExtensionManager.canStartLanguageServer(interpreter)) { // Start the language server. await languageServerExtensionManager.startLanguageServer(lsResource, interpreter); diff --git a/src/test/languageServer/jediLSExtensionManager.unit.test.ts b/src/test/languageServer/jediLSExtensionManager.unit.test.ts index 82fe5a8262b8..5fffef66a92e 100644 --- a/src/test/languageServer/jediLSExtensionManager.unit.test.ts +++ b/src/test/languageServer/jediLSExtensionManager.unit.test.ts @@ -9,6 +9,7 @@ import { IEnvironmentVariablesProvider } from '../../client/common/variables/typ import { IInterpreterService } from '../../client/interpreter/contracts'; import { IServiceContainer } from '../../client/ioc/types'; import { JediLSExtensionManager } from '../../client/languageServer/jediLSExtensionManager'; +import { PythonEnvironment } from '../../client/pythonEnvironments/info'; suite('Language Server - Jedi LS extension manager', () => { let manager: JediLSExtensionManager; @@ -37,9 +38,17 @@ suite('Language Server - Jedi LS extension manager', () => { assert.notStrictEqual(manager.serverProxy, undefined); }); - test('canStartLanguageServer should return true', () => { - const result = manager.canStartLanguageServer(); + test('canStartLanguageServer should return true if an interpreter is passed in', () => { + const result = manager.canStartLanguageServer(({ + path: 'path/to/interpreter', + } as unknown) as PythonEnvironment); assert.strictEqual(result, true); }); + + test('canStartLanguageServer should return false otherwise', () => { + const result = manager.canStartLanguageServer(undefined); + + assert.strictEqual(result, false); + }); });