chore(lint): parallelize Linux watch directory traversal

Switch BFS to level-by-level Promise.all over readdir calls, replacing
the sequential pop/await loop that triggered no-await-in-loop.
This commit is contained in:
Mohamed Boudra
2026-04-24 03:18:30 +07:00
parent 316253aed6
commit 7e16fd6b4d

View File

@@ -1164,28 +1164,32 @@ export class WorkspaceGitServiceImpl implements WorkspaceGitService {
private async listLinuxWatchDirectories(rootPath: string): Promise<string[]> { private async listLinuxWatchDirectories(rootPath: string): Promise<string[]> {
const directories: string[] = []; const directories: string[] = [];
const pending = [rootPath]; let currentLevel: string[] = [rootPath];
while (pending.length > 0) { while (currentLevel.length > 0) {
const directory = pending.pop(); directories.push(...currentLevel);
if (!directory) { const readResults = await Promise.all(
continue; currentLevel.map(async (directory) => {
} try {
directories.push(directory); return await this.deps.readdir(directory, { withFileTypes: true });
} catch {
let entries; return null;
try { }
entries = await this.deps.readdir(directory, { withFileTypes: true }); }),
} catch { );
continue; const nextLevel: string[] = [];
} for (let i = 0; i < currentLevel.length; i += 1) {
const directory = currentLevel[i];
for (const entry of entries) { const entries = readResults[i];
if (!entry.isDirectory() || entry.name === ".git") { if (!directory || !entries) continue;
continue; for (const entry of entries) {
if (!entry.isDirectory() || entry.name === ".git") {
continue;
}
nextLevel.push(join(directory, entry.name));
} }
pending.push(join(directory, entry.name));
} }
currentLevel = nextLevel;
} }
return directories; return directories;