Repository navigation
Issue 136
- 类型:缺陷修复
- 状态:已实现,验收完成,待 PR 合并
- Issue:https://github.com/ShaoClean/Alune/issues/136
- PR:https://github.com/ShaoClean/Alune/pull/167
- 最近更新:2026-10-02(北京时间)
- 代码基线:development /
038af66 - 实现提交:893e180
- 验证版本:Alune 0.6.0 开发版,macOS 15.5 arm64,Electron 44.2.0;网页为 Chromium / Ego Lite。
在运行中的真实组件页面同时展示 example.ts 文件预览与 Git patch。默认浅色 Catppuccin Latte 下,文件预览背景为 rgb(239, 241, 245)、有 19 个语法 token;Diff 背景仍为 rgb(251, 252, 254)、语法 token 为 0。证据为下方修复前截图。复现版本为上述基线。
CodeView 已解析代码主题、字体和字号,而 DiffViewer 的 Git patch 分支直接输出字符串,统一/分栏使用全局 --code、--text 和 --diff-*。完整文本分支也使用应用变量。PR/MR 的 PullRequestPatch 是另一套独立渲染器,同样没有接入主题和语法高亮。
-
useCodeTheme复用既有resolveCodeTheme和codeAppearanceStyle,文件预览、文本 Diff、PR/MR 文件和评论上下文共同订阅同一偏好。浅深色分别选择,字体/字号即时应用。 - 主题 CSS 仅施加于文本展示节点。图片 Diff、外围工具栏、应用主题不受影响。行号列随字号及最大行号调整宽度。
- 共享惰性加载的 Prism。Git patch 按文件和差异块分别还原旧/新侧文本,整块 tokenization 后分行,保留块内多行注释与字符串。多文件提交按文件路径切换语言;PR/MR 无文件头的 patch 使用条目或评论中的路径。
- 完整文本对比保留原库折叠、统一/分栏和行内差异;使用仅由可信 token 映射生成、对源文本转义的 HTML 适配器,让语法和行内标记共存。没有新增依赖。针对原库的实体二次解码行为,将源文本中的
&隔离在独立安全 span 中;真实renderWordDiff回归确认"/ 等字面量及恶意标签文本不截断、不执行。 - 可导入 VS Code 的
diffEditor.insertedLineBackground、removedLineBackground、insertedTextBackground、removedTextBackground。未提供时用所选主题的 inserted/deleted 色与代码背景按 12%(整行)/26%(行内)混合。增删仍有+/-标记,普通代码保留语法色。 - 自定义主题新增可选
diff字段,旧偏好无需迁移;损坏或缺失主题继续回退到对应 Catppuccin 默认值。未知语言、过大 patch(256 Ki 字符)及高亮异常保留纯文本。
- 文件预览与文本 Diff 共享即时生效的主题:网页导入浅色、桌面导入深色,均比较实际背景、关键字、行号和字号;内置 Latte/Frappé/Macchiato/Mocha 均运行验证。
- 统一、分栏、全屏、改动、提交历史单文件/全部文件、PR/MR 文件/评论渲染器接入;PR/MR 行号及 Shift 连续多行选择保留。
- 浅深色及系统外观切换正确;自定义颜色、缺少 diff 色的回退、主题损坏/缺失的回退覆盖运行和单元测试。
- 增删标记、语法色与行内标记保持,截图完成视觉核验。
- 全新 Electron 进程从稳定 workspace 偏好恢复导入主题和字号;网页重新加载、文件切换和仓库 Diff 重新加载保持选择。
- 本地与真实 SSH 数据流均通过;文件预览的滚动、选区、未知/大文件回退通过;图片 Diff 正常解码且没有代码主题属性。
| 命令/场景 | 实际结果 |
|---|---|
npm run desktop:build |
共享包、SSH、服务端、网页 TypeScript/Vite、Electron staging 均通过;原有大 bundle 提示保留 |
npm test -w web |
226 项通过,含新增 6 项主题/patch/转义/持久化、Git 中文路径测试 |
npm run desktop:test:unit |
45 项通过 |
npm run test:code-appearance -w desktop |
本地及 SSH 的 TS/Python/JSON、未知/大文件、系统主题切换、行号、选区及滚动保持通过 |
npm run desktop:test:diff-theme |
真实临时 Git + SSH,改动与历史、统一/分栏/全屏、图片、导入主题,以及第二次 Electron 进程启动通过 |
node apps/web/tests/diff-theme-server.cjs + 浏览器 |
生产 Nest 后端、SQLite、Git、本地/SSH 连接,使用设置 UI 导入主题并验证 Diff |
Vite /tests/diff-theme-fixture.html + 浏览器 |
同页对照文件预览、Git patch、完整文本及 PR/MR 评论;折叠/行内标记、全屏/Esc、多行选择和主题切换 |
早期独立执行 Web 构建时尚未构建新工作树的 @alune/shared,报缺失依赖;改用根目录构建后通过。既有文件阅读验收最初被仓库“未配置远程”通知抢走选区,已修正测试先关闭通知,再验证 token DOM 身份、选区和滚动;本地/SSH 重跑通过。这两项不作为成功记录掩盖。网页验收期间重建 Vite 资源导致旧页请求的高亮 chunk 返回 404,页面保留主题和纯文本;刷新到最新构建后再次验证高亮和持久化通过。
修复前,同一 Latte 设置下预览与 Diff 背景、高亮不同:

修复后,Frappé 主题及 18px 字号:

真实网页本地仓库的导入浅色主题:

桌面 SSH 的导入深色主题:

全屏分栏及 PR/MR 多行选择:

完整文本对比中的语法与行内变化标记:

Git patch 未携带的块外语法上下文无法恢复;兼容范围沿用 Prism 与既有 VS Code scope 映射。自定义主题自身提供的低对比颜色按原设置保留。Windows/Linux 没有做本次桌面人工视觉验收;本次实际桌面系统为 macOS arm64。SSH 为本机启动的真实 SSH/SFTP 服务,不是外部生产服务器。PR/MR 验收使用本地 fixture,不向外部托管平台提交评论。
代码可通过 revert 本 PR 回退;Wiki 独立维护。主仓库只保存运行说明及可复跑测试,截图和验收记录保存在本页。
设计文档首页 · Alune 品牌说明 · 维护约定 · 代码仓库