diff --git a/src/features/creators/autoFindProjects.ts b/src/features/creators/autoFindProjects.ts index 3c7fd828..d0e27bec 100644 --- a/src/features/creators/autoFindProjects.ts +++ b/src/features/creators/autoFindProjects.ts @@ -1,11 +1,11 @@ import * as path from 'path'; import { Uri } from 'vscode'; -import { showErrorMessage, showQuickPickWithButtons, showWarningMessage } from '../../common/window.apis'; -import { ProjectCreatorString } from '../../common/localize'; import { PythonProject, PythonProjectCreator, PythonProjectCreatorOptions } from '../../api'; -import { PythonProjectManager } from '../../internal.api'; -import { findFiles } from '../../common/workspace.apis'; +import { ProjectCreatorString } from '../../common/localize'; import { traceInfo } from '../../common/logging'; +import { showErrorMessage, showQuickPickWithButtons, showWarningMessage } from '../../common/window.apis'; +import { findFiles } from '../../common/workspace.apis'; +import { PythonProjectManager, PythonProjectsImpl } from '../../internal.api'; function getUniqueUri(uris: Uri[]): { label: string; @@ -96,11 +96,9 @@ export class AutoFindProjects implements PythonProjectCreator { traceInfo('User cancelled project selection.'); return; } - - const projects = projectUris.map((uri) => ({ - name: path.basename(uri.fsPath), - uri, - })) as PythonProject[]; + const projects = projectUris.map( + (uri) => new PythonProjectsImpl(path.basename(uri.fsPath), uri), + ) as PythonProject[]; // Add the projects to the project manager this.pm.add(projects); return projects; diff --git a/src/features/creators/existingProjects.ts b/src/features/creators/existingProjects.ts index b30df92b..e54808d9 100644 --- a/src/features/creators/existingProjects.ts +++ b/src/features/creators/existingProjects.ts @@ -1,11 +1,10 @@ import * as path from 'path'; +import { Uri, window, workspace } from 'vscode'; import { PythonProject, PythonProjectCreator, PythonProjectCreatorOptions } from '../../api'; import { ProjectCreatorString } from '../../common/localize'; +import { traceInfo, traceLog } from '../../common/logging'; import { showOpenDialog, showWarningMessage } from '../../common/window.apis'; -import { PythonProjectManager } from '../../internal.api'; -import { traceInfo } from '../../common/logging'; -import { Uri, window, workspace } from 'vscode'; -import { traceLog } from '../../common/logging'; +import { PythonProjectManager, PythonProjectsImpl } from '../../internal.api'; export class ExistingProjects implements PythonProjectCreator { public readonly name = 'existingProjects'; @@ -90,10 +89,9 @@ export class ExistingProjects implements PythonProjectCreator { } return; } else { - const projects = resultsInWorkspace.map((uri) => ({ - name: path.basename(uri.fsPath), - uri, - })) as PythonProject[]; + const projects = resultsInWorkspace.map( + (uri) => new PythonProjectsImpl(path.basename(uri.fsPath), uri), + ) as PythonProject[]; // Add the projects to the project manager this.pm.add(projects); return projects; diff --git a/src/features/projectManager.ts b/src/features/projectManager.ts index 9b9ebce4..58b477a0 100644 --- a/src/features/projectManager.ts +++ b/src/features/projectManager.ts @@ -113,12 +113,19 @@ export class PythonProjectManagerImpl implements PythonProjectManager { const defaultEnvManager = globalConfig.get('defaultEnvManager', DEFAULT_ENV_MANAGER_ID); const defaultPkgManager = globalConfig.get('defaultPackageManager', DEFAULT_PACKAGE_MANAGER_ID); - _projects.forEach((w) => { - // if the package manager and env manager are not the default ones, then add them to the edits - if (envManagerId !== defaultEnvManager || pkgManagerId !== defaultPkgManager) { - edits.push({ project: w, envManager: envManagerId, packageManager: pkgManagerId }); + _projects.forEach((currProject) => { + const workspaces = getWorkspaceFolders() ?? []; + const isRoot = workspaces.some((w) => w.uri.toString() === currProject.uri.toString()); + if (isRoot) { + // for root projects, add setting if not default + if (envManagerId !== defaultEnvManager || pkgManagerId !== defaultPkgManager) { + edits.push({ project: currProject, envManager: envManagerId, packageManager: pkgManagerId }); + } + } else { + // for non-root projects, always add setting + edits.push({ project: currProject, envManager: envManagerId, packageManager: pkgManagerId }); } - return this._projects.set(w.uri.toString(), w); + return this._projects.set(currProject.uri.toString(), currProject); }); this._onDidChangeProjects.fire(Array.from(this._projects.values()));