Skip to content

Commit 8a98b2f

Browse files
committed
Fix path-only Python project manager defaults
Assisted-by: OpenAI Codex
1 parent f61acdf commit 8a98b2f

3 files changed

Lines changed: 56 additions & 5 deletions

File tree

src/features/settings/settingHelpers.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ export function isDefaultEnvManagerBroken(): boolean {
4141
export function getDefaultEnvManagerSetting(wm: PythonProjectManager, scope?: Uri): string {
4242
const config = workspaceApis.getConfiguration('python-envs', scope);
4343
const settings = getSettings(wm, config, scope);
44-
if (settings && settings.envManager.length > 0) {
44+
if (settings?.envManager) {
4545
return settings.envManager;
4646
}
4747
// Only show the warning once per session
@@ -69,7 +69,7 @@ export function getDefaultPkgManagerSetting(
6969
const config = workspaceApis.getConfiguration('python-envs', scope);
7070

7171
const settings = getSettings(wm, config, scope);
72-
if (settings && settings.packageManager.length > 0) {
72+
if (settings?.packageManager) {
7373
return settings.packageManager;
7474
}
7575

src/internal.api.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -424,8 +424,8 @@ export interface PythonProjectManager extends Disposable {
424424

425425
export interface PythonProjectSettings {
426426
path: string;
427-
envManager: string;
428-
packageManager: string;
427+
envManager?: string;
428+
packageManager?: string;
429429
workspace?: string;
430430
}
431431

src/test/features/settings/settingHelpers.unit.test.ts

Lines changed: 52 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,14 @@ import * as sender from '../../../common/telemetry/sender';
99
import * as workspaceApis from '../../../common/workspace.apis';
1010
import {
1111
addPythonProjectSetting,
12+
getDefaultEnvManagerSetting,
13+
getDefaultPkgManagerSetting,
1214
migrateGlobalDefaultEnvManagerSetting,
1315
setAllManagerSettings,
1416
setEnvironmentManager,
1517
setPackageManager,
1618
} from '../../../features/settings/settingHelpers';
17-
import { PythonProjectsImpl } from '../../../internal.api';
19+
import { PythonProjectManager, PythonProjectsImpl } from '../../../internal.api';
1820
import { MockWorkspaceConfiguration } from '../../mocks/mockWorkspaceConfig';
1921

2022
/**
@@ -25,6 +27,55 @@ function getTestWorkspacePath(): string {
2527
return process.platform === 'win32' ? 'C:\\workspace' : '/workspace';
2628
}
2729

30+
suite('Setting Helpers - Optional Project Managers', () => {
31+
const VENV_MANAGER_ID = 'ms-python.python:venv';
32+
const PIP_MANAGER_ID = 'ms-python.python:pip';
33+
const workspacePath = getTestWorkspacePath();
34+
const workspaceUri = Uri.file(workspacePath);
35+
const projectUri = Uri.joinPath(workspaceUri, 'backend');
36+
const workspaceFolder: WorkspaceFolder = {
37+
uri: workspaceUri,
38+
name: 'workspace',
39+
index: 0,
40+
};
41+
const project = {
42+
name: 'backend',
43+
uri: projectUri,
44+
};
45+
const projectManager = {
46+
get: (uri: Uri) => (uri.fsPath === projectUri.fsPath ? project : undefined),
47+
} as unknown as PythonProjectManager;
48+
49+
teardown(() => {
50+
sinon.restore();
51+
});
52+
53+
function createPathOnlyProjectConfig(): MockWorkspaceConfiguration {
54+
const mockConfig = new MockWorkspaceConfiguration();
55+
(mockConfig as any).get = <T>(key: string, defaultValue?: T): T | undefined => {
56+
if (key === 'pythonProjects') {
57+
return [{ path: 'backend' }] as T;
58+
}
59+
if (key === 'defaultEnvManager') {
60+
return VENV_MANAGER_ID as T;
61+
}
62+
if (key === 'defaultPackageManager') {
63+
return PIP_MANAGER_ID as T;
64+
}
65+
return defaultValue;
66+
};
67+
return mockConfig;
68+
}
69+
70+
test('uses default managers when a pythonProjects entry only specifies path', () => {
71+
sinon.stub(workspaceApis, 'getConfiguration').returns(createPathOnlyProjectConfig());
72+
sinon.stub(workspaceApis, 'getWorkspaceFolder').returns(workspaceFolder);
73+
74+
assert.strictEqual(getDefaultEnvManagerSetting(projectManager, projectUri), VENV_MANAGER_ID);
75+
assert.strictEqual(getDefaultPkgManagerSetting(projectManager, projectUri), PIP_MANAGER_ID);
76+
});
77+
});
78+
2879
/**
2980
* These tests verify that manager edits without a project do not write settings
3081
* and are logged explicitly as ignored global edits.

0 commit comments

Comments
 (0)