Skip to content

fix(Log): Graph 后文字自适应贴近以消除留白#35

Merged
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/log-graph-spacing
Jun 30, 2026
Merged

fix(Log): Graph 后文字自适应贴近以消除留白#35
ThreeFish-AI merged 1 commit into
feature/1.x.xfrom
ThreeFish-AI/log-graph-spacing

Conversation

@ThreeFish-AI

Copy link
Copy Markdown
Owner

背景

#34 将 Log 视图升级为 IDEA 风格提交图(Graph DAG)并已合入 feature/1.x.x。用户实测反馈(截图红框标注):Graph 节点与后面的提交文字之间存在大片留白,文字离 Graph 太远,不符合 IDEA「文字紧随 Graph」的观感。

根因

log-webview.ts 渲染时,每行 Graph SVG 的宽度取自「已加载全部提交(1000 条)」的全局 maxLanes

const W = graphPx(); // = model.maxLanes * LANE_W + GUTTER

分支型仓库中,maxLanes 被历史中某处的宽分叉(多 feature 并存)撑大(如 6–8 条 lane),而绝大多数行只占用 1–2 条 lane。这些行仍预留整宽,于是节点(位于 col 0)与文字(位于 graphPx)之间出现大片空白。

修复

本行实际绘制的最右列自适应计算行宽,文字随即向左贴近本行 Graph:

function rowMaxCol(row) { /* node.col + 各 incoming/outgoing/passThrough 的 fromCol/toCol 最大值 */ }
const W = (rowMaxCol(row) + 1) * LANE_W + GUTTER;
  • lane 的 x 坐标仍为全局一致(colX(c) = c*LANE_W + LANE_W/2),故竖线跨行衔接、分支拓扑完全不变;
  • 仅消去「右侧未被本行占用的预留宽度」,文字按各行实际 Graph 宽度左移贴近;
  • 单 lane 行文字最靠左,分叉活跃区文字相应右移——视觉上自然传达分支深度。

验证

  • pnpm run compile(tsc + eslint + esbuild)全绿
  • pnpm test:unit 218/218 通过(engine 未改,仅 webview 内联 JS 行宽计算)
  • 改动范围:src/adapter/webview/log-webview.ts(+3/-2,内联 JS)+ CHANGELOG.md

说明:本环境无 GUI,无法本地 F5 实跑 webview 渲染;改动为内联 JS 的纯行宽计算,且 lane x 坐标全局一致,竖线衔接不变,CI(Lint & Build + Test)覆盖类型/单测/集成冒烟。

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

原实现每行 Graph SVG 宽度取全局 maxLanes(基于已加载全部提交),分支型仓库中仅用 1-2 条 lane 的行仍预留整宽,导致节点与文字间大片留白。改为按「本行实际绘制的最右列」计算行宽,文字随即向左贴近本行 Graph(lane x 坐标仍全局一致,竖线跨行衔接不变)。

🤖 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 a462b87 into feature/1.x.x Jun 30, 2026
5 checks passed
@ThreeFish-AI ThreeFish-AI deleted the ThreeFish-AI/log-graph-spacing branch June 30, 2026 07:35
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