Skip to content

Commit 267007b

Browse files
committed
cleanup cleanup everybody everywhere
1 parent 45675a4 commit 267007b

File tree

3 files changed

+114
-136
lines changed

3 files changed

+114
-136
lines changed

.vscode/settings.json

Lines changed: 101 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
"source.fixAll.eslint": "explicit",
2929
"source.organizeImports.isort": "explicit"
3030
},
31-
"editor.defaultFormatter": "charliermarsh.ruff",
31+
"editor.defaultFormatter": "charliermarsh.ruff"
3232
},
3333
"[rust]": {
3434
"editor.defaultFormatter": "rust-lang.rust-analyzer",
@@ -67,12 +67,106 @@
6767
"git.pullBeforeCheckout": true,
6868
// Open merge editor for resolving conflicts.
6969
"git.mergeEditor": true,
70-
"python.testing.pytestArgs": [
71-
"python_files/tests"
72-
],
70+
"python.testing.pytestArgs": ["python_files/tests"],
7371
"python.testing.unittestEnabled": false,
7472
"python.testing.pytestEnabled": true,
75-
"rust-analyzer.linkedProjects": [
76-
".\\python-env-tools\\Cargo.toml"
77-
]
73+
"rust-analyzer.linkedProjects": [".\\python-env-tools\\Cargo.toml"],
74+
"chat.tools.terminal.autoApprove": {
75+
"cd": true,
76+
"echo": true,
77+
"ls": true,
78+
"pwd": true,
79+
"cat": true,
80+
"head": true,
81+
"tail": true,
82+
"findstr": true,
83+
"wc": true,
84+
"tr": true,
85+
"cut": true,
86+
"cmp": true,
87+
"which": true,
88+
"basename": true,
89+
"dirname": true,
90+
"realpath": true,
91+
"readlink": true,
92+
"stat": true,
93+
"file": true,
94+
"du": true,
95+
"df": true,
96+
"sleep": true,
97+
"nl": true,
98+
"grep": true,
99+
"/^git(\\s+(-C\\s+\\S+|--no-pager))*\\s+status\\b/": true,
100+
"/^git(\\s+(-C\\s+\\S+|--no-pager))*\\s+log\\b/": true,
101+
"/^git(\\s+(-C\\s+\\S+|--no-pager))*\\s+show\\b/": true,
102+
"/^git(\\s+(-C\\s+\\S+|--no-pager))*\\s+diff\\b/": true,
103+
"/^git(\\s+(-C\\s+\\S+|--no-pager))*\\s+ls-files\\b/": true,
104+
"/^git(\\s+(-C\\s+\\S+|--no-pager))*\\s+grep\\b/": true,
105+
"/^git(\\s+(-C\\s+\\S+|--no-pager))*\\s+branch\\b/": true,
106+
"/^git(\\s+(-C\\s+\\S+|--no-pager))*\\s+branch\\b.*-(d|D|m|M|-delete|-force)\\b/": false,
107+
"Get-ChildItem": true,
108+
"Get-Content": true,
109+
"Get-Date": true,
110+
"Get-Random": true,
111+
"Get-Location": true,
112+
"Write-Host": true,
113+
"Write-Output": true,
114+
"Out-String": true,
115+
"Split-Path": true,
116+
"Join-Path": true,
117+
"Start-Sleep": true,
118+
"Where-Object": true,
119+
"/^Select-[a-z0-9]/i": true,
120+
"/^Measure-[a-z0-9]/i": true,
121+
"/^Compare-[a-z0-9]/i": true,
122+
"/^Format-[a-z0-9]/i": true,
123+
"/^Sort-[a-z0-9]/i": true,
124+
"column": true,
125+
"/^column\\b.*-c\\s+[0-9]{4,}/": false,
126+
"date": true,
127+
"/^date\\b.*(-s|--set)\\b/": false,
128+
"find": true,
129+
"/^find\\b.*-(delete|exec|execdir|fprint|fprintf|fls|ok|okdir)\\b/": false,
130+
"rg": true,
131+
"/^rg\\b.*(--pre|--hostname-bin)\\b/": false,
132+
"sed": true,
133+
"/^sed\\b.*(-[a-zA-Z]*(e|i|I|f)[a-zA-Z]*|--expression|--file|--in-place)\\b/": false,
134+
"/^sed\\b.*(/e|/w|;W)/": false,
135+
"sort": true,
136+
"/^sort\\b.*-(o|S)\\b/": false,
137+
"tree": true,
138+
"/^tree\\b.*-o\\b/": false,
139+
"rm": false,
140+
"rmdir": false,
141+
"del": false,
142+
"Remove-Item": false,
143+
"ri": false,
144+
"rd": false,
145+
"erase": false,
146+
"dd": false,
147+
"kill": false,
148+
"ps": false,
149+
"top": false,
150+
"Stop-Process": false,
151+
"spps": false,
152+
"taskkill": false,
153+
"taskkill.exe": false,
154+
"curl": false,
155+
"wget": false,
156+
"Invoke-RestMethod": false,
157+
"Invoke-WebRequest": false,
158+
"irm": false,
159+
"iwr": false,
160+
"chmod": false,
161+
"chown": false,
162+
"Set-ItemProperty": false,
163+
"sp": false,
164+
"Set-Acl": false,
165+
"jq": false,
166+
"xargs": false,
167+
"eval": false,
168+
"Invoke-Expression": false,
169+
"iex": false,
170+
"npx tsc": true
171+
}
78172
}

src/client/testing/testController/common/projectAdapter.ts

Lines changed: 1 addition & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,7 @@
33

44
import { TestItem, Uri } from 'vscode';
55
import { TestProvider } from '../../types';
6-
import {
7-
ITestDiscoveryAdapter,
8-
ITestExecutionAdapter,
9-
ITestResultResolver,
10-
DiscoveredTestPayload,
11-
DiscoveredTestNode,
12-
} from './types';
6+
import { ITestDiscoveryAdapter, ITestExecutionAdapter, ITestResultResolver } from './types';
137
import { PythonEnvironment, PythonProject } from '../../../envExt/types';
148

159
/**
@@ -72,19 +66,6 @@ export interface ProjectAdapter {
7266
*/
7367
resultResolver: ITestResultResolver;
7468

75-
// === DISCOVERY STATE ===
76-
/**
77-
* Raw discovery data before filtering (all discovered tests).
78-
* Cleared after ownership resolution to save memory.
79-
*/
80-
rawDiscoveryData?: DiscoveredTestPayload;
81-
82-
/**
83-
* Filtered tests that this project owns (after API verification).
84-
* This is the tree structure passed to populateTestTree().
85-
*/
86-
ownedTests?: DiscoveredTestNode;
87-
8869
/**
8970
* Absolute paths of nested projects to ignore during discovery.
9071
* Used to pass --ignore flags to pytest or exclusion filters to unittest.
@@ -109,41 +90,3 @@ export interface ProjectAdapter {
10990
*/
11091
projectRootTestItem?: TestItem;
11192
}
112-
113-
/**
114-
* Temporary state used during workspace-wide test discovery.
115-
* Created at the start of discovery and cleared after ownership resolution.
116-
*/
117-
export interface WorkspaceDiscoveryState {
118-
/**
119-
* The workspace being discovered.
120-
*/
121-
workspaceUri: Uri;
122-
123-
/**
124-
* Maps test file paths to the set of projects that discovered them.
125-
* Used to detect overlapping discovery.
126-
*/
127-
fileToProjects: Map<string, Set<ProjectAdapter>>;
128-
129-
/**
130-
* Maps test file paths to their owning project (after API resolution).
131-
* Value is the ProjectAdapter whose pythonProject.uri matches API response.
132-
*/
133-
fileOwnership: Map<string, ProjectAdapter>;
134-
135-
/**
136-
* Progress tracking for parallel discovery.
137-
*/
138-
projectsCompleted: Set<string>;
139-
140-
/**
141-
* Total number of projects in this workspace.
142-
*/
143-
totalProjects: number;
144-
145-
/**
146-
* Whether all projects have completed discovery.
147-
*/
148-
isComplete: boolean;
149-
}

src/client/testing/testController/controller.ts

Lines changed: 12 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ import { ITestDebugLauncher } from '../common/types';
5353
import { PythonResultResolver } from './common/resultResolver';
5454
import { onDidSaveTextDocument } from '../../common/vscodeApis/workspaceApis';
5555
import { IEnvironmentVariablesProvider } from '../../common/variables/types';
56-
import { ProjectAdapter, WorkspaceDiscoveryState } from './common/projectAdapter';
56+
import { ProjectAdapter } from './common/projectAdapter';
5757
import { getProjectId, createProjectDisplayName } from './common/projectUtils';
5858
import { PythonProject, PythonEnvironment } from '../../envExt/types';
5959
import { getEnvExtApi, useEnvExtension } from '../../envExt/api.internal';
@@ -83,9 +83,6 @@ export class PythonTestController implements ITestController, IExtensionSingleAc
8383
// Note: Project URI strings match Python Environments extension's Map<string, PythonProject> keys
8484
private readonly workspaceProjects: Map<Uri, Map<string, ProjectAdapter>> = new Map();
8585

86-
// Temporary state for tracking overlaps during discovery (created/destroyed per refresh)
87-
private readonly workspaceDiscoveryState: Map<Uri, WorkspaceDiscoveryState> = new Map();
88-
8986
// TODO: Phase 3-4 - Add these maps when implementing execution:
9087
// - vsIdToProject: Map<string, ProjectAdapter> - Fast lookup for test execution
9188
// - fileUriToProject: Map<string, ProjectAdapter> - File watching and change detection
@@ -640,17 +637,6 @@ export class PythonTestController implements ITestController, IExtensionSingleAc
640637
const projects = Array.from(projectsMap.values());
641638
traceInfo(`[test-by-project] Starting discovery for ${projects.length} project(s) in workspace`);
642639

643-
// Initialize discovery state for overlap tracking
644-
const discoveryState: WorkspaceDiscoveryState = {
645-
workspaceUri,
646-
fileToProjects: new Map(),
647-
fileOwnership: new Map(),
648-
projectsCompleted: new Set(),
649-
totalProjects: projects.length,
650-
isComplete: false,
651-
};
652-
this.workspaceDiscoveryState.set(workspaceUri, discoveryState);
653-
654640
try {
655641
// PHASE 3: Compute nested project relationships BEFORE discovery
656642
const projectIgnores = this.computeNestedProjectIgnores(workspaceUri);
@@ -669,38 +655,26 @@ export class PythonTestController implements ITestController, IExtensionSingleAc
669655
}
670656
}
671657

658+
// Track completion for progress logging
659+
const projectsCompleted = new Set<string>();
660+
672661
// Run discovery for all projects in parallel (now with ignore lists populated)
673662
// Each project will populate TestItems independently via existing flow
674-
await Promise.all(projects.map((project) => this.discoverProject(project, discoveryState)));
663+
await Promise.all(projects.map((project) => this.discoverProject(project, projectsCompleted)));
675664

676-
// Mark discovery complete
677-
discoveryState.isComplete = true;
678665
traceInfo(
679-
`[test-by-project] Discovery complete: ${discoveryState.projectsCompleted.size}/${projects.length} projects succeeded`,
680-
);
681-
682-
// Log overlap information for debugging
683-
const overlappingFiles = Array.from(discoveryState.fileToProjects.entries()).filter(
684-
([, projects]) => projects.size > 1,
666+
`[test-by-project] Discovery complete: ${projectsCompleted.size}/${projects.length} projects succeeded`,
685667
);
686-
if (overlappingFiles.length > 0) {
687-
traceInfo(`[test-by-project] Found ${overlappingFiles.length} file(s) discovered by multiple projects`);
688-
}
689-
690-
// TODO: Phase 3 - Resolve overlaps and rebuild test tree with proper ownership
691-
// await this.resolveOverlapsAndAssignTests(workspaceUri);
692-
} finally {
693-
// Clean up temporary discovery state
694-
this.workspaceDiscoveryState.delete(workspaceUri);
668+
} catch (error) {
669+
traceError(`[test-by-project] Discovery failed for workspace ${workspaceUri.fsPath}:`, error);
695670
}
696671
}
697672

698673
/**
699-
* Phase 2: Runs test discovery for a single project.
674+
* Runs test discovery for a single project.
700675
* Uses the existing discovery flow which populates TestItems automatically.
701-
* Tracks which files were discovered for overlap detection in Phase 3.
702676
*/
703-
private async discoverProject(project: ProjectAdapter, discoveryState: WorkspaceDiscoveryState): Promise<void> {
677+
private async discoverProject(project: ProjectAdapter, projectsCompleted: Set<string>): Promise<void> {
704678
try {
705679
traceInfo(`[test-by-project] Discovering tests for project: ${project.projectName}`);
706680
project.isDiscovering = true;
@@ -728,51 +702,18 @@ export class PythonTestController implements ITestController, IExtensionSingleAc
728702
project, // Pass project for access to projectUri and other project-specific data
729703
);
730704

731-
// Track which files this project discovered by inspecting created TestItems
732-
// This data will be used in Phase 3 for overlap resolution
733-
this.trackProjectDiscoveredFiles(project, discoveryState);
734-
735705
// Mark project as completed
736-
discoveryState.projectsCompleted.add(project.projectId);
706+
projectsCompleted.add(project.projectId);
737707
traceInfo(`[test-by-project] Project ${project.projectName} discovery completed`);
738708
} catch (error) {
739709
traceError(`[test-by-project] Discovery failed for project ${project.projectName}:`, error);
740710
// Individual project failures don't block others
741-
discoveryState.projectsCompleted.add(project.projectId); // Still mark as completed
711+
projectsCompleted.add(project.projectId); // Still mark as completed
742712
} finally {
743713
project.isDiscovering = false;
744714
}
745715
}
746716

747-
/**
748-
* Tracks which files a project discovered by inspecting its TestItems.
749-
* Populates the fileToProjects map for overlap detection in Phase 3.
750-
*/
751-
private trackProjectDiscoveredFiles(project: ProjectAdapter, discoveryState: WorkspaceDiscoveryState): void {
752-
// Get all test items for this project from its result resolver
753-
const testItems = project.resultResolver.runIdToTestItem;
754-
755-
// Extract unique file paths from test items
756-
const filePaths = new Set<string>();
757-
testItems.forEach((testItem) => {
758-
if (testItem.uri) {
759-
filePaths.add(testItem.uri.fsPath);
760-
}
761-
});
762-
763-
// Track which projects discovered each file
764-
filePaths.forEach((filePath) => {
765-
if (!discoveryState.fileToProjects.has(filePath)) {
766-
discoveryState.fileToProjects.set(filePath, new Set());
767-
}
768-
discoveryState.fileToProjects.get(filePath)!.add(project);
769-
});
770-
771-
traceVerbose(
772-
`[test-by-project] Project ${project.projectName} discovered ${filePaths.size} file(s) with ${testItems.size} test(s)`,
773-
);
774-
}
775-
776717
/**
777718
* Discovers tests for all workspaces in the workspace folders.
778719
*/

0 commit comments

Comments
 (0)