bug(web): Intermediate directory nodes in buildFileTree receive child leaf paths instead of directory paths
維護者通常 1 天內回覆
評估
- 難度
- 2/5
- 預估耗時
- 1-3 小時
- 新手友好度
- 88/100
- Issue 類型
- 缺陷
- 描述清晰度
- 描述清楚
- 活躍度
- 活躍
- 技術堆疊
- typescript
研究方向
從 packages/web/src/features/git/utils.ts 中的 buildFileTree 開始,接著檢查 packages/web/src/app/(app)/browse/components/fileTreePanel.tsx 和 getTree 端點。重現巢狀路徑範例,並驗證中間目錄節點會提供其自身的目錄路徑,包括正確的資料夾展開和 API 輸出。
由索引模型根據 Issue 內容生成。
描述
Describe the Bug
In packages/web/src/features/git/utils.ts, buildFileTree constructs a nested FileTreeNode hierarchy from a flat list of { type, path } objects.
When creating intermediate directory nodes (lines 68-74), the new node's path property is assigned item.path (the full path of the current leaf file being processed), instead of the path of that directory:
// packages/web/src/features/git/utils.ts:67-75
if (!next) {
next = {
name: part,
path: item.path, // <--- Bug: assigns leaf file's path to intermediate directory node
type: nodeType,
children: [],
};
current.children.push(next);
}
Impact
- Broken Folder State & Expansion in UI: In
packages/web/src/app/(app)/browse/components/fileTreePanel.tsx, folder expand/collapse state is tracked viaopenPaths.has(node.path)and route sync viapathParts.slice(0, i + 1).join('/'). Because directory nodes receive the child file's path instead of their own directory path, clicking folders or deep-linking to nested paths causes folder state tracking and auto-expansion to fail. - Public API Corruption: The
getTreeendpoint (/api/git/tree) returnsFileTreeNodewith corrupted directory paths to API consumers.
Reproduction
const flatList = [
{ type: 'blob', path: 'src/components/buttons/PrimaryButton.tsx' }
];
const tree = buildFileTree(flatList);
const srcDir = tree.children[0];
console.log(srcDir.name); // "src"
console.log(srcDir.path); // Expected "src", but Got "src/components/buttons/PrimaryButton.tsx"
Proposed Fix
Reconstruct the directory node's path using parts.slice(0, i + 1).join('/'):
if (!next) {
next = {
name: part,
path: parts.slice(0, i + 1).join('/'),
type: nodeType,
children: [],
};
current.children.push(next);
}
For intermediate directory levels (i < parts.length - 1), this evaluates to the proper directory path (e.g. "src", "src/components"), and for leaf files (i === parts.length - 1), it matches item.path.
- 主要語言
- TypeScript
- 星號
- 3.9k
- 分支
- 374
- 平均合併
- 17 小時 15 分鐘
- 30 天內合併 PR
- 38
環境準備
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
sourcebot-dev/sourcebot 的其他 Issue
-
fix(web): multiline highlight ranges are broken / omitted in LightweightCodeHighlighter可能已有人在做 @riteshvish02 於 6 天前認領。 未關閉
難度 2/5 1-3 小時 新手友好度 82/100
sourcebot-dev/sourcebot#1698 ·
維護者通常 1 天內回覆
-
[bug] Search result hydration performs duplicate repository lookups within the same chunk可能已有人在做 @dipeshbabu 於 12 天前認領。 未關閉bug triage needed
難度 2/5 1-3 小時 新手友好度 84/100
sourcebot-dev/sourcebot#1681 · 1 則留言 ·
維護者通常 1 天內回覆
-
Linux ctags build instructions in CONTRIBUTING.md are missing build dependencies可能已有人在做 @The-AarushiSingh 於 19 天前認領。 未關閉
難度 2/5 1-3 小時 新手友好度 84/100
sourcebot-dev/sourcebot#1633 ·
維護者通常 1 天內回覆
-
Generic Git URL configs keep percent-encoded repo names可能已有人在做 @Tyagiquamar 於 19 天前認領。 未關閉bug
難度 2/5 1-3 小時 新手友好度 78/100
sourcebot-dev/sourcebot#1384 · 4 則留言 ·
維護者通常 1 天內回覆
-
MCP ask_codebase rejects explicit languageModel: getLanguageModelKey includes displayName which the MCP schema doesn't expose可能已有人在做 @pranav718 於 36 天前認領。 未關閉ask_sb bug
難度 2/5 1-3 小時 新手友好度 76/100
sourcebot-dev/sourcebot#1137 · 4 則留言 ·
維護者通常 1 天內回覆
查看 sourcebot-dev/sourcebot 的全部 Issue
相似的 Issue
-
難度 2/5 1-3 小時 新手友好度 85/100
umbraco/Umbraco-CMS-MCP-Dev#512 ·
維護者通常 1 天內回覆
-
bug
難度 2/5 1-3 小時 新手友好度 72/100
wimpysworld/sidra#290 ·
維護者通常 1 天內回覆
-
defuFn invokes function values for inherited default properties可能已有人在做 @xiehuanyi 今天認領。 未關閉
難度 1/5 1 小時以內 新手友好度 85/100
-
feature request good first issue
難度 2/5 1-3 小時 新手友好度 85/100
TabularisDB/tabularis#853 ·
維護者通常 1 天內回覆
-
難度 2/5 1 小時以內 新手友好度 85/100
capricorn86/happy-dom#2474 ·
維護者通常 2 天內回覆