模块边界与文件长度维护
字段定义排版
- 接口、对象类型字面量和类的字段每行只定义一个。
- 类型别名、嵌套类型、函数参数和返回值中的内联类型遵循相同规则。
- 含多个字段的定义展开为多行,避免用分号或逗号将多个字段挤在同一行。
- 单字段内联类型可以保留单行;运行时对象初始化不属于本次字段声明排版范围。
- 2026-10-12 已统一调整主进程、渲染层、托管服务、脚本、类型声明及测试中的同类定义。
- 仅修改换行和缩进,保留字段名称、类型、修饰符、可选标记及原有注释。
- 使用语法树扫描确认没有同一声明体中相邻字段共用一行的遗漏,并使用解析器比对修改前后的代码 token 和注释。
- 验证通过:类型检查、lint(含文件长度门禁)及 688 项单元测试;此排版调整无需重启应用或服务。
字段排版后的集中提取安排
-
2026-10-12 合并
format分支时解决 7 个冲突文件。- 保留本地设置持久化、热键事务、Quick Cmd Form 设置入口和逐文档视图状态逻辑,同时应用字段逐行排版。
- 冲突文件经 TypeScript 语法树及注释比对确认与合并前
master逻辑一致。 - 合并后
test/electron-smoke.ts为 1097 行,test/menu.test.ts为 963 行,继续纳入下述独立、集中的测试模块提取安排。 - 类型检查、全仓 lint(含文件长度门禁)和 693 项单元测试通过。
- 快捷键设置(含命令面板)、工作区会话恢复及 Quick Cmd Form 三组 Electron 冒烟测试通过。
-
本次调整后,以下改动文件超过 800 行;它们位于现有长度门禁排除的测试目录。
test/electron-smoke.ts:1088 行。test/menu.test.ts:963 行。
-
后续安排一次独立、集中的测试模块提取,不在本次排版中混入结构调整。
test/electron-smoke.ts按场景准备、窗口访问和场景调度职责整理,复用现有test/smoke/模块。test/menu.test.ts按菜单构造、命令执行和可用性检查分组,保留共享测试替身与断言。- 提取时保留原有覆盖范围、错误处理、注释及测试入口,并运行相关测试验证。
集中提取范围
- 本轮集中处理
src/和server/中超过 500 行的 20 个生产文件。 - 当轮提取后的生产文件均不超过 500 行,给当时的 600 行检查上限预留空间。
- 测试场景和长篇专题文档保留原有组织;未通过删减测试、注释或功能说明缩短文件。
- 保留公开类、函数接口、日志、异常处理和持久化格式。
- 当前
scripts/quality/file-length.mts执行 800 行上限,排除 Markdown、测试目录及指定生成物;下文的 500/600 行和测试长度是对应提取或迁移时的记录,不代表当前门禁。
主进程与托管服务
| 入口 | 提取模块 | 职责 |
|---|---|---|
main/menu.ts |
main/menu-commands.ts |
原生菜单命令、快捷键提示和编辑命令注册 |
main/workspace-manager.ts |
main/workspace-query.ts |
大纲索引、快速打开和历史差异查询 |
main/sync/manager.ts |
main/sync/manager-libraries.ts |
仓库身份、详情、克隆、重命名、删除及缓存清理 |
main/sync/client/local.ts |
main/sync/client/pending-preview.ts |
待推送内容快照与预览有效性检查 |
main/sync/client/files.ts |
main/sync/client/merge.ts |
合并基线、冲突三份文件和自动合并 |
main/sync/client/transfer.ts |
main/sync/client/restore.ts |
整体恢复快照校验、操作锁和恢复检查点 |
server/hosted-sync/store/index.ts |
store/accounts.ts、store/libraries.ts |
账号、设备、会话和仓库管理 |
- 客户端继续由目录入口组合方法分组。
- 工作区管理器、同步管理器和托管存储将提取的方法描述符复制到原有公开类原型。
- 调用者仍使用原来的实例和方法。
- 不增加代理包装,不复制实例状态。
- 原有同步入口的按需加载保持不变。
渲染层
| 入口 | 提取或合并模块 | 职责 |
|---|---|---|
runtime/core.mts |
runtime/editor/lifecycle.mts |
文档激活、编辑器页面和会话保存 |
runtime/editor/view.mts |
runtime/editor/file-actions.mts |
打开、保存、粘贴、图片导入和关闭文档 |
runtime/editor/events.mts |
runtime/surface-events.mts |
应用面板、按钮、菜单和搜索控件事件 |
runtime/editor/differences.mts |
runtime/editor/difference-baseline.mts |
差异定位、基线异步读取与 Git HEAD 刷新 |
runtime/dialogs.mts |
runtime/context-menus.mts |
标签和文件树菜单、键盘导航与树节点渲染 |
runtime/library.mts |
runtime/library-actions.mts |
文件操作、路径复制、搜索、设置与外部变更 |
runtime/favorites.mts |
现有 runtime/favorite-organizer.mts |
收藏整理界面、操作与事件 |
runtime/keyboard.mts |
runtime/keyboard-dispatch.mts |
快捷键服务、上下文、提示和输入法保护 |
runtime/tree-controls.mts |
现有 runtime/publish-export.mts |
按需打开文件打包界面 |
find/controller.mts |
find/matches.mts |
查找匹配导航、替换及预览 DOM 范围映射 |
snippet.mts |
snippets/views.mts、snippets/tab-switcher.mts |
片段列表渲染和 MRU 标签选择器 |
index.html |
dialogs/application.mts |
原有应用对话框标记 |
styles/base.css |
styles/document.css |
文档面板、大纲、预览及相关样式 |
初始化与加载顺序
- Runtime 已统一为 ESM;
renderer.mts显式导入业务模块,并按原有顺序调用初始化函数。 runtime/state.mts集中管理窗口状态,runtime/types.mts共享类型;业务函数使用命名导入。runtime/keyboard.mts集中注册应用命令及默认快捷键。runtime/keyboard-dispatch.mts保留界面辅助函数、服务初始化、上下文、提示和事件分发。- 注册回调仅保存函数,不在注册阶段调用其他模块中的界面辅助函数。
- 所有默认绑定均在创建
KeybindingService前收集完成。
- ESLint 和 TypeScript 逐模块检查 runtime;原有拼接 lint 与 classic 加载机制已移除。
- 启动时同步挂载对话框,然后创建界面辅助对象并初始化 runtime。
- 这些节点在启动时就被查找和绑定事件,因此不改为首次打开时加载。
- 对话框的 ID、结构、属性及 DOM 顺序保持不变。
- 快捷键设置、命令面板、Mermaid、大纲解析和文件打包继续使用原有动态导入。
document.css紧随base.css加载,保持原有规则顺序;独立布局测试也使用相同顺序。
文件树职责收拢(2026-10-11)
runtime/tree-view.mts接收原tree-controls.mts的可见性、遍历和整体渲染逻辑。- 同时接收
context-menus.mts的节点渲染与树内键盘导航,以及dialogs.mts的路径定位和当前文档关联逻辑。 - 全部展开与折叠按钮事件随树视图初始化,不再在
surface-events.mts中注册。
- 同时接收
runtime/tree-difference-form.mts接收原编辑器模块中的差异表单、校验、草稿、持久化转换、状态文案、重置和循环切换逻辑。- 表单字段初始化与事件绑定一起迁入,编辑器模块保留差异展示、基线读取和 Git HEAD 刷新。
tree-controls.mts保留标题控件、筛选应用与设置交互,并接收原全局事件中的弹层外部点击关闭行为。- 原模块保留迁移函数的命名再导出,生产调用者和相关冒烟测试直接引用新所属模块。
- 迁移函数保留原函数正文、注释、错误处理、焦点恢复和仓库切换保护。
- 新模块启动时同步初始化;文件打包仍按需加载。
- 初始化覆盖测试同步检查新增模块,以及编辑器状态、差异表单、树控件和工作区恢复的先后关系。
- 本次涉及的生产文件均不超过 600 行。
test/smoke/renderer/tree-heading.ts仍为 692 行,本次仅更新导入路径。- 继续纳入下文既有的测试模块集中提取安排,保留场景、断言和时序。
- 验证结果:类型检查、全仓 lint 与文件长度检查通过;32 个迁移函数的正文与迁移前一致。
- 模块初始化、文件遍历、组合筛选和时间解析共 16 项相关单元测试通过。
tree-heading、tree-multiselect、keyboard、file-pack、command-palette和workspace-session六组 Electron 冒烟测试通过。- 清理构建遇到
.build目录占用后,使用现有增量构建入口完成编译,再串行运行上述冒烟测试。
验证入口
npm run check:file-length:检查人工维护的生产文件长度。node scripts/run.mts node --test test/module-extraction.test.js:检查 runtime 初始化覆盖和顺序,以及公开类的方法描述符。npm run test:unit:覆盖工作区查询、菜单、同步预览、合并、恢复、账号和仓库事务。npm run test:smoke:覆盖完整 Electron 初始化、编辑、布局、粘贴、片段窗口和文件树交互。npm run pack:验证构建后的应用目录包含提取模块。
本轮验证结果
- 532 项单元测试通过,文件长度检查通过;人工维护的生产文件最长为 498 行。
- Windows 目录打包通过,并逐字节核对新增客户端模块和查找控制器已进入
app.asar。 - 原有注释保留;51 个提取的类方法与修改前的方法正文一致。
- lint 仍受修改前已有的三项规则错误阻塞:收藏排序重置函数未使用、快捷键正则多余转义、链接镜像正则中的控制字符。
- 完整 Electron 冒烟测试在
editorFindVisibleQueryPreservesScroll断言失败;修改前代码在同一环境中也复现了该失败。- 原有测试与查找行为保持不变,不在模块提取中修复这项独立问题。
- 在临时测试副本中仅跳过该断言后,其余完整 Electron 流程通过;临时副本不进入仓库。
全量测试修复后的集中提取安排
ESM renderer 迁移后的集中安排
- 本次修改后仍超过 600 行的测试保留现有场景顺序,纳入下一次统一提取。
test/smoke/renderer/document-outline.ts:611 行,按大纲展示、筛选和导航分组。test/smoke/renderer/tree-heading.ts:692 行,按文件树标题操作、筛选与控件交互分组。
- 提取时复用测试专用的 ESM 访问适配器和现有辅助函数,保留断言、注释、日志与原有时序。
- 这些测试与下列 TypeScript 迁移遗留测试一起安排,避免每次功能修改单独拆分。
- 本次修改的生产文件均未超过 600 行。
TypeScript 迁移后的统一后续工作
-
将本次迁移涉及的以下测试纳入同一次独立模块提取,迁移本身保留现有组织和断言顺序。
test/electron-smoke.ts、test/paste-undo-smoke.ts、test/snippet-window-smoke.ts。test/smoke/renderer/document-outline.ts、test/smoke/renderer/initial-editor-flow.ts、test/smoke/renderer/tree-heading.ts。test/menu.test.ts、test/sync-client.test.ts。
-
按现有场景边界复用
test/helpers/与test/smoke/,保持按需加载、日志、注释、IPC 和剪贴板串行约定。 -
集中提取完成后重新运行严格类型检查、单元测试与全部 Electron 冒烟。
-
package-lock.json是依赖管理生成文件,记录最终行数,但不安排人工拆分。 -
后续单独集中提取
test/electron-smoke.ts、test/paste-undo-smoke.ts与test/smoke/renderer/document-outline.ts的场景模块。 -
本次先保留测试入口、断言顺序、共享剪贴板串行执行、注释与诊断日志。
-
复用现有
test/smoke/renderer/和test/helpers/边界,按场景按需加载,不为每项修复新增模块。 -
2026-10-08 冒烟修复、收集器初始化及错误弹窗场景隔离后的
test/electron-smoke.ts为 1055 行,继续纳入上述独立集中提取安排。 -
2026-10-08 合并冲突解决后,
test/electron-smoke.ts为 1046 行;沿用上述集中提取安排,保留单一收集器初始化及原有专项退出分支。
全项目注释规范后的集中安排
- 2026-10-11 补充文件头、函数定义说明与定义间空行后,以下测试文件超过当前 800 行阈值。
test/electron-smoke.ts:1082 行,保留现有启动、窗口协调与专项退出顺序。test/menu.test.ts:945 行,保留原生菜单替身与各平台命令断言。
- 两个文件一并纳入独立的集中模块提取,不在本次注释调整中逐项拆分。
- 菜单测试按窗口、文件、编辑与快捷键场景整理,复用共用的菜单和窗口替身。
- Electron 冒烟入口复用现有
test/smoke/场景边界,保持共享 IPC、剪贴板和窗口初始化顺序。 - 提取时保留注释、日志、断言及错误处理,完成后运行类型检查、单元测试和相关 Electron 冒烟。
全项目格式整理后的集中安排
- 2026-10-12 按 120 字符行宽整理源码后,以下生产文件超过 800 行。
src/index.html:836 行。src/main/workspace-handlers.ts:804 行。src/renderer/runtime/editor/selection-toolbar.mts:930 行。src/renderer/runtime/keyboard.mts:1104 行。src/renderer/styles/dialogs.css:975 行。src/snippet.mts:965 行。types/markdown-api.d.ts:833 行。
- 将这些文件纳入独立的集中模块提取,按现有功能边界分组并保留运行顺序与公开类型。
- 提取完成后运行文件长度检查、类型检查、单元测试和相关 Electron 冒烟。
