Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 6 additions & 10 deletions src/client/interpreter/configuration/interpreterSelector.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
import { inject, injectable } from 'inversify';
import { ConfigurationTarget, Disposable, QuickPickItem, QuickPickOptions, Uri } from 'vscode';
import { ConfigurationTarget, Disposable, QuickPickOptions, Uri } from 'vscode';
import { IApplicationShell, ICommandManager, IDocumentManager, IWorkspaceService } from '../../common/application/types';
import { Commands } from '../../common/constants';
import { IConfigurationService, IPathUtils } from '../../common/types';
import { IConfigurationService, IPathUtils, Resource } from '../../common/types';
import { IInterpreterService, IShebangCodeLensProvider, PythonInterpreter, WorkspacePythonPath } from '../contracts';
import { IInterpreterComparer, IInterpreterSelector, IPythonPathUpdaterServiceManager } from './types';

export interface IInterpreterQuickPickItem extends QuickPickItem {
path: string;
}
import { IInterpreterComparer, IInterpreterQuickPickItem, IInterpreterSelector, IPythonPathUpdaterServiceManager } from './types';

@injectable()
export class InterpreterSelector implements IInterpreterSelector {
Expand All @@ -34,10 +30,10 @@ export class InterpreterSelector implements IInterpreterSelector {
this.disposables.push(this.commandManager.registerCommand(Commands.Set_ShebangInterpreter, this.setShebangInterpreter.bind(this)));
}

public async getSuggestions(resourceUri?: Uri) {
const interpreters = await this.interpreterManager.getInterpreters(resourceUri);
public async getSuggestions(resource: Resource) {
const interpreters = await this.interpreterManager.getInterpreters(resource);
interpreters.sort(this.interpreterComparer.compare.bind(this.interpreterComparer));
return Promise.all(interpreters.map(item => this.suggestionToQuickPickItem(item, resourceUri)));
return Promise.all(interpreters.map(item => this.suggestionToQuickPickItem(item, resource)));
}
protected async suggestionToQuickPickItem(suggestion: PythonInterpreter, workspaceUri?: Uri): Promise<IInterpreterQuickPickItem> {
const detail = this.pathUtils.getDisplayName(suggestion.path, workspaceUri ? workspaceUri.fsPath : undefined);
Expand Down
8 changes: 7 additions & 1 deletion src/client/interpreter/configuration/types.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import { ConfigurationTarget, Disposable, Uri } from 'vscode';
import { ConfigurationTarget, Disposable, QuickPickItem, Uri } from 'vscode';
import { Resource } from '../../common/types';
import { PythonInterpreter } from '../contracts';

export interface IPythonPathUpdaterService {
Expand All @@ -20,6 +21,11 @@ export interface IPythonPathUpdaterServiceManager {
export const IInterpreterSelector = Symbol('IInterpreterSelector');
export interface IInterpreterSelector extends Disposable {
initialize(): void;
getSuggestions(resource: Resource): Promise<IInterpreterQuickPickItem[]>;
}

export interface IInterpreterQuickPickItem extends QuickPickItem {
path: string;
}

export const IInterpreterComparer = Symbol('IInterpreterComparer');
Expand Down
6 changes: 3 additions & 3 deletions src/test/configuration/interpreterSelector.unit.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import { PathUtils } from '../../client/common/platform/pathUtils';
import { IFileSystem } from '../../client/common/platform/types';
import { IConfigurationService, IPythonSettings } from '../../client/common/types';
import { Architecture } from '../../client/common/utils/platform';
import { IInterpreterQuickPickItem, InterpreterSelector } from '../../client/interpreter/configuration/interpreterSelector';
import { IInterpreterComparer, IPythonPathUpdaterServiceManager } from '../../client/interpreter/configuration/types';
import { InterpreterSelector } from '../../client/interpreter/configuration/interpreterSelector';
import { IInterpreterComparer, IInterpreterQuickPickItem, IPythonPathUpdaterServiceManager } from '../../client/interpreter/configuration/types';
import { IInterpreterService, InterpreterType, IShebangCodeLensProvider, PythonInterpreter } from '../../client/interpreter/contracts';

const info: PythonInterpreter = {
Expand Down Expand Up @@ -107,7 +107,7 @@ suite('Interpreters - selector', () => {
.setup(x => x.getInterpreters(TypeMoq.It.isAny()))
.returns(() => new Promise((resolve) => resolve(initial)));

const actual = await selector.getSuggestions();
const actual = await selector.getSuggestions(undefined);

const expected: InterpreterQuickPickItem[] = [
new InterpreterQuickPickItem('1', 'c:/path1/path1'),
Expand Down