Skip to content

feat(Branches): 分支视图支持按 / 前缀分组为可折叠文件夹树(平铺⇄树切换);#86

Merged
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/branch-tree-group-by-prefix
Jul 6, 2026
Merged

feat(Branches): 分支视图支持按 / 前缀分组为可折叠文件夹树(平铺⇄树切换);#86
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/branch-tree-group-by-prefix

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

改动内容

为 Branches 视图的 Local / Remote / Tags 三段新增「按 / 前缀分组为可折叠文件夹树」形态,支持与「平铺列表」一键互切(工具栏按钮、按仓库记忆偏好、默认树形)。共享前缀的分支收拢到以前缀命名的文件夹下,叶子仅显示末段后缀(如 bak/2025bak/master-2025-07 → 📁bak2025 / master-2025-07;远程整体收拢为 origin 文件夹并内嵌 feature)。Favorites 段恒平铺并显示完整短名。

动机

对齐 VS Code SCM / GitLens 的分支分组范式,降低大量带前缀分支(feature/*bak/*release/*)场景下的视觉噪音与检索成本;同时消除远程符号引用 origin/HEAD 与分组后 origin 文件夹的同名冲突。

实现要点

  • 纯逻辑引擎 buildRefTree:零 vscode 依赖,复用「变更文件目录树」buildFileTree 的 trie 构建 + compact 折叠范式;叶子携带完整 RawRef(命令定位不受影响),分支感知排序(当前 HEAD → 收藏 → 同档文件夹优先 → 名称数字感知升序 → 稳定),compact 折叠单目录子链(遇含叶子或多子目录即停,对齐 explorer.compactFolders)。含 / 的远程名(fork myorg/repo)经 compact 视觉合并为单文件夹,无需特判。
  • 适配层 branches-tree.ts:新增 BranchFolderNode、按仓库持久化的 grouping 状态、isRemoteHead 过滤(隐藏 origin/HEAD)、sectionNodes / toBranchNodes 桥接;文件夹 TreeItem 默认展开、idfolder:<group>:<path> 隔离令展开态跨刷新稳定。
  • 命令零破坏:文件夹节点用独立 contextValue hyperGit.branchFolder 且不登记任何右键命令;单节点命令与多选批量(经 selectedBranchRefs)均以 kind === 'branch' 守卫,文件夹被安全忽略 —— checkout / delete / rename / merge / rebase / compare / favorite 全部零改动。
  • 切换 UI:原生 TreeView 双命令(hyperGit.branchesGroupByPrefix / hyperGit.branchesFlatten)+ setContext('hyperGit.branchesGrouping') 驱动工具栏按钮互斥显隐;偏好持久化于 workspaceState(键 hyperGit.branchesGrouping:${repoRoot})。
  • 测试:新增 tests/unit/ref-tree.test.ts 共 12 用例,覆盖空输入、单/多前缀收拢、排序档位、compact 折叠边界、远程收拢、去重、空段跳过、count 递归统计。

验证

pnpm typecheck clean;pnpm run test 全绿(unit 12/12 + Extension Development Host 集成冒烟)。完整叙述见 分支前缀分组树

🤖 Generated with Claude Code, CodeX, Gemini
Co-Authored-By: Aurelius Huangthreefish.ai@gmail.com

Local/Remote/Tags 三段支持在平铺与「按 / 前缀分组的文件夹树」间切换:共享前缀的分支
收拢到以前缀命名的可折叠文件夹下、叶子仅显示末段后缀(如 bak/2025、bak/master-2025-07
→ 📁bak → 2025 / master-2025-07;远程整体收拢为 origin 文件夹并内嵌 feature)。

- 新增纯逻辑引擎 buildRefTree(engine/ref/ref-tree.ts,零 vscode 依赖):复用变更文件目录树
  buildFileTree 的 trie 构建 + compact 折叠范式;叶子携完整 RawRef(命令定位不受影响);
  分支感知排序(当前 HEAD → 收藏 → 同档文件夹优先、名称数字感知升序)。含 12 条单测。
- 隐藏 origin/HEAD 符号引用:对齐主流 Git UI,消除 origin 叶子与 origin 文件夹同名冲突,
  远程计数归为真实分支数。
- 工具栏「平铺 ⇄ 树」切换(branchesGroupByPrefix / branchesFlatten,context key 驱动按钮
  互斥),偏好按仓库持久化于 workspaceState(默认树形),文件夹默认展开、展开态跨刷新稳定。
- 文件夹节点用独立 contextValue(hyperGit.branchFolder)且不登记右键命令,多选经
  selectedBranchRefs 只保留 branch 节点,checkout/delete/rename/merge/rebase/compare/
  favorite 与多选批量均零改动、零破坏。
- 文档:CHANGELOG、docs/features/branch-tree-group-by-prefix、knowledge-map、README(EN/zh)。

🤖 Generated with [Claude Code](https://github.com/claude), [CodeX](https://openai.com), [Gemini](https://github.com/apps/gemini-code-assist)
Co-Authored-By: Aurelius Huang<threefish.ai@gmail.com>
@ThreeFish-AI ThreeFish-AI merged commit fd69e5c into feature/1.x.x Jul 6, 2026
5 checks passed
@ThreeFish-AI ThreeFish-AI deleted the ThreeFish-AI/branch-tree-group-by-prefix branch July 6, 2026 10:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant