From 9e509fae9ee486a796a6c549cade5cc1650e2071 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sun, 1 Jun 2025 09:30:16 +0200 Subject: [PATCH] Add function to get relevant files based on size and gitignore rules --- main.js | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/main.js b/main.js index a7ae609..e3775fd 100644 --- a/main.js +++ b/main.js @@ -2054,6 +2054,37 @@ ipcMain.on('show-tree-context-menu', (event, { absPath, relPath, root, type }) = if (content && content.length > 1500) score += 2; return score; } + + function getRelevantFiles(dir, maxSize = 100*1024, ig = null, base = null) { + base = base || dir; + if (!ig) ig = getGitignoreFilter(base); + let files = []; + function walk(current) { + for (const f of fs.readdirSync(current)) { + const full = path.join(current, f); + const rel = path.relative(base, full); + if (ig && ig.ignores(rel)) continue; + if (fs.statSync(full).isDirectory()) { + if (f.startsWith('.')) continue; + walk(full); + } else if (isTextFile(full)) { + const content = fs.readFileSync(full, 'utf8').slice(0, 3000); // reicht für scoring + files.push({ f: full, rel, s: fs.statSync(full).size, score: getFileRelevanceScore(full, rel, content) }); + } + } + } + walk(dir); + files.sort((a, b) => b.score - a.score || a.s - b.s); + // Limit by maxSize + let sum = 0, selected = []; + for (let {f,s} of files) { + if (sum + s > maxSize) break; + selected.push(f); + sum += s; + } + return selected; + } +