From 7e16fd6b4d9e862e8b2b17e116bd8a8ff0f83145 Mon Sep 17 00:00:00 2001 From: Mohamed Boudra Date: Fri, 24 Apr 2026 03:18:30 +0700 Subject: [PATCH] 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. --- .../src/server/workspace-git-service.ts | 42 ++++++++++--------- 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/packages/server/src/server/workspace-git-service.ts b/packages/server/src/server/workspace-git-service.ts index d53941d1a..6cde51460 100644 --- a/packages/server/src/server/workspace-git-service.ts +++ b/packages/server/src/server/workspace-git-service.ts @@ -1164,28 +1164,32 @@ export class WorkspaceGitServiceImpl implements WorkspaceGitService { private async listLinuxWatchDirectories(rootPath: string): Promise { const directories: string[] = []; - const pending = [rootPath]; + let currentLevel: string[] = [rootPath]; - while (pending.length > 0) { - const directory = pending.pop(); - if (!directory) { - continue; - } - directories.push(directory); - - let entries; - try { - entries = await this.deps.readdir(directory, { withFileTypes: true }); - } catch { - continue; - } - - for (const entry of entries) { - if (!entry.isDirectory() || entry.name === ".git") { - continue; + while (currentLevel.length > 0) { + directories.push(...currentLevel); + const readResults = await Promise.all( + currentLevel.map(async (directory) => { + try { + return await this.deps.readdir(directory, { withFileTypes: true }); + } catch { + return null; + } + }), + ); + const nextLevel: string[] = []; + for (let i = 0; i < currentLevel.length; i += 1) { + const directory = currentLevel[i]; + const entries = readResults[i]; + if (!directory || !entries) 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;