Uninote
Uninote
用户根目录
brdr
common
programming
docs
tests
后端试题
问题讨论

文件树模块职责与依赖

返回文档导航 · 技术架构 · 模块提取记录

范围与阅读约定

  • 按当前源码梳理,包含文件树视图与差异表单收拢,以及打包按钮处理迁入 tree-controls.mts 后的结构。
  • 下文 runtime/、sidebar/ 等路径相对于 src/renderer/。
  • 依赖方向 A → B 表示 A 导入并使用 B。
  • 图只展示主要业务依赖,省略共享状态、类型和通用辅助模块;这些依赖另列于表中。
  • 静态导入、动态加载和注入回调分别说明,命名再导出不视为原文件仍拥有实现。

文件职责

树运行时

文件 当前职责 主要接口或交互
runtime/tree-controls.mts 标题按钮状态、筛选应用与持久化、设置菜单、筛选弹层、打包入口及仓库操作回调 updateTreeHeadingControls、applyTreeFileSelection、rememberFileTimeFilters、toggleEmptyDirectories、toggleFileTreeLink;连接 treeFileFilters;按需打开打包界面
runtime/tree-view.mts 树可见性缓存、目录路径收集、节点与整树渲染、树内键盘导航、文件遍历、目录展开折叠、路径定位和当前文档关联 currentFileFilterResult、renderTreeNodes、renderFileTree、navigateSelectedTreeFile、locateWorkspacePathInTree、revealActiveDocumentInTree;绑定全部展开与折叠按钮
runtime/tree-difference-form.mts 差异表单字段初始化、草稿、显隐、校验、选项存取转换、状态文案、重置和循环切换 prepareFileDifferenceForm、readFileDifferenceForm、restoreFileDifferenceSelection、cycleFileDifferenceMode;绑定差异选择、时间输入和日历事件
runtime/tree-selection.mts 单选与多选、范围选择、选中状态绘制与刷新协调、焦点入口、复制剪切意图、删除操作 selectTreeEntry、reconcileTreeSelection、focusFileTree、selectedTreeEntries、trashSelectedEntry
runtime/tree-drag-drop.mts 拖放目标校验、复制或移动判断、反馈、批量转移、树剪贴板和粘贴 canDropTreeEntries、dropTreeEntries、setTreeClipboard、pasteSelectedEntry
runtime/tree-history.mts 文件树操作历史、撤销重做、回收站恢复与路径变更协调 recordTreeHistory、stepTreeHistory;复用现有文件操作、脏文档保护和选择恢复

UI、算法与相邻业务

文件 当前职责 与树运行时的关系
sidebar/file-filter-diff.mts 一次性创建完整“文件筛选与差异”弹层标记,组装公共筛选控件 由 dependencies.mts 创建,返回的对象由 tree-controls 通过 connect() 连接仓库回调
sidebar/file-filter-ui.mts 公共筛选控件、预设操作、修改时间输入、校验与日历行为;提供差异时间字段模板 文件树弹层和打包界面共同复用
sidebar/file-filter.mts 文件规则匹配、预设操作、时间选择解析入口和匹配树路径计算 runtime 经 dependencies.mts 使用;公共筛选 UI 和打包直接导入
sidebar/file-time-filter.mts 预设、日期、时长和本地时间点解析,文件修改时间判断 file-filter.mts 直接导入;runtime 经 dependencies.mts 命名导出使用
sidebar/file-tree-navigation.mts 无 DOM 的文件遍历和前后文件计算 tree-view 经 dependencies.mts 命名导出使用
sidebar/filter-types.mts 筛选规则、预设、时间选择和回调类型 类型依赖,不承担运行时协调
sidebar/file-pack.mts 打包界面、勾选树、大小统计、内容读取与拼接,以及打包筛选和查询流程 由 tree-controls 动态导入;仓库读写、预设保存及通知通过参数回调提供
runtime/editor/differences.mts 编辑器差异视图、差异块选择和文档差异模式呈现,初始化差异运行状态 基线模块调用它刷新视图;原表单函数仅保留命名再导出
runtime/editor/difference-baseline.mts 基线读取、请求保护、编辑器高亮刷新、差异定位与 Git HEAD 轮询 表单和树控件调用 setFileDifference;完成后刷新树标题及编辑器差异视图
runtime/sync/file-tree-diff.mts 整个文件树的历史差异对话框、比较请求、结果列表和定位 树控件发起比较;差异结果通过 tree-view 定位文件
runtime/context-menus.mts 标签及树菜单内容、可用性、快捷键提示、显示和焦点返回 查询 tree-view 的可遍历文件;树节点调用其菜单显示接口
runtime/publish-export.mts 文档导出与站点导出 打包按钮已迁出,不再导入树控件或树视图

状态、装配与外部入口

文件 当前职责
src/renderer.mts 显式导入各 runtime 模块并按顺序初始化
runtime/state.mts / runtime/types.mts 共享窗口状态、DOM 引用和运行时类型;本次收拢继续共用这些状态
runtime/core.mts 获取主要 DOM 引用、初始化基础状态、仓库 UI 状态合并与持久化、标题按钮提示
dependencies.mts 创建 treeFileFilters,导出共享 UI 对象及筛选、时间和导航算法
runtime/workspace.mts 恢复仓库 UI 状态、筛选时间和差异选项,应用快照并刷新树
runtime/keyboard.mts 注册命令与快捷键;展开折叠、筛选、设置和打包命令经按钮点击进入已有处理,文件遍历与差异循环调用所属模块
runtime/surface-events.mts 全局面板及菜单事件分发,包括调用树文件遍历;树展开折叠按钮和筛选弹层外部关闭事件已迁出
runtime/editor/lifecycle.mts 文档激活时调用 revealActiveDocumentInTree;树控件打包回调使用其会话保存接口
runtime/shell.mts 在 runtime 注册完成后启动异步恢复,读取初始工作区并通过工作区模块激活文档
runtime/sync/library.mts 同步版本等入口通过 locateWorkspacePathInTree 定位树中文件
src/index.html / styles/tree.css 树标题按钮、设置菜单的静态标记,以及树和筛选弹层样式;完整筛选弹层由 UI 模块创建

主要文件依赖

视图、控件和差异

以下箭头均为静态运行时导入,双向箭头表示双方直接导入对方。

flowchart LR
  C["runtime/tree-controls.mts"] <--> V["runtime/tree-view.mts"]
  C <--> F["runtime/tree-difference-form.mts"]
  C <--> B["runtime/editor/difference-baseline.mts"]
  F --> B
  B --> E["runtime/editor/differences.mts"]
  V <--> S["runtime/tree-selection.mts"]
  V <--> M["runtime/context-menus.mts"]
  C --> M
  C <--> W["runtime/workspace.mts"]
  V <--> W
  W --> F
  C <--> D["runtime/sync/file-tree-diff.mts"]
  D --> V
调用方 被调用方 依赖原因
tree-controls tree-view 读取匹配计数与目录状态,应用筛选后刷新树,启用关联后定位当前文档
tree-view tree-controls 整树渲染后更新标题按钮及筛选状态
tree-controls tree-difference-form 打开弹层时准备表单,提交时读取及校验差异选项,保存或重置选项
tree-difference-form tree-controls 调整弹层位置、打开日历、循环选项后持久化文件筛选与差异选择
tree-controls / tree-difference-form editor/difference-baseline 提交或循环切换时应用差异基线
editor/difference-baseline tree-controls / editor/differences 基线变化后刷新标题状态、差异视图和编辑器高亮
tree-view tree-selection 渲染前协调选中项,节点事件更新选择,刷新后恢复焦点
tree-selection tree-view 查询可见节点、匹配结果和当前树按钮顺序
tree-view / context-menus 对方 树节点打开菜单;菜单根据可遍历文件判断前后文件动作可用性
tree-controls / tree-view workspace 筛选应用工作区快照;树定位查询条目
workspace tree-controls / tree-view / tree-difference-form 切库时关闭弹层、恢复差异选项并刷新树
tree-controls / sync/file-tree-diff 对方 控件打开整树比较;比较界面关闭树弹层并复用日历入口

文件转移与操作历史

flowchart LR
  V["tree-view.mts"] <--> S["tree-selection.mts"]
  S <--> T["tree-drag-drop.mts"]
  S <--> H["tree-history.mts"]
  T <--> H
  T --> V
  S --> W["workspace.mts"]
  T --> W
  H --> W
  S --> A["library-actions.mts"]
  T --> A
  H --> A
  • tree-selection 使用转移模块记录剪贴板意图,删除后记录历史。
  • tree-drag-drop 完成转移后恢复选择与焦点、刷新树并记录历史。
  • tree-history 使用转移模块的父路径辅助函数,复用选择模块的计时、选择和焦点恢复接口。
  • 三者都通过现有工作区和文件操作模块协调快照、路径重定位及脏文档保护。
  • 图省略各模块对通用对话框、编辑器文件操作和 dependencies.mts 的 ESM 导入。

UI 组装、公共算法与按需打包

flowchart TD
  DEP["dependencies.mts"] --> SURFACE["sidebar/file-filter-diff.mts"]
  SURFACE --> UI["sidebar/file-filter-ui.mts"]
  UI --> FILTER["sidebar/file-filter.mts"]
  FILTER --> TIME["sidebar/file-time-filter.mts"]
  DEP --> FILTER
  DEP --> TIME
  DEP --> NAV["sidebar/file-tree-navigation.mts"]
  C["runtime/tree-controls.mts"] --> DEP
  V["runtime/tree-view.mts"] --> DEP
  F["runtime/tree-difference-form.mts"] --> DEP
  C -. "动态 import" .-> PACK["sidebar/file-pack.mts"]
  PACK --> UI
  PACK --> FILTER
  • dependencies.mts 创建 treeFileFilters,tree-controls 随后通过 connect() 注入仓库状态、预设保存、筛选应用和通知回调。
  • file-pack.mts 只在打包按钮触发时加载。
    • tree-controls 传入文件树快照、可见性函数、当前筛选、共享预设及仓库读写回调。
    • 打包模块调用这些回调完成操作,不直接导入 runtime 模块。
  • 公共算法和公共筛选 UI 未直接导入树运行时,继续支持文件树与打包界面复用。

初始化和主要执行路径

初始化顺序

  1. initializeDependencies() 创建完整筛选 UI;initializeCore() 获取 DOM 引用并准备基础状态。
  2. 编辑器差异模块初始化差异状态与缓存;基线模块注册 Git HEAD 刷新。
  3. initializeTreeView() 初始化可见性缓存,绑定全部展开和折叠。
  4. initializeTreeDifferenceForm() 初始化差异表单字段、草稿和控件事件。
  5. initializeTreeControls() 连接筛选业务回调,绑定标题控件、筛选弹层、设置和打包入口。
  6. 随后注册拖放、工作区、操作历史、全局事件和命令服务等模块。
  7. 最后 initializeShell() 启动异步 initialize(),读取初始工作区,再通过工作区模块恢复仓库状态、激活文档并渲染。
  • 上述顺序只列与本主题有关的步骤,其他 runtime 初始化仍穿插其间。
  • 事件回调在用户操作或异步事件触发时读取共享状态,注册阶段不主动执行树渲染或基线切换。

应用筛选与差异

  1. 公共筛选 UI 读取筛选草稿,差异表单读取并校验基线选择。
  2. tree-controls 编译文件规则、刷新工作区快照、应用文件规则和修改时间筛选。
  3. tree-view 根据匹配结果重绘树、协调选择并恢复焦点。
  4. 基线模块应用差异选择,清理旧高亮并刷新编辑器差异。
  5. tree-controls 保存筛选和差异选项,关闭弹层并按原行为恢复焦点。

定位文件与打包

  • 定位由 tree-view 查询目标、展开父目录、选择条目并最小滚动树容器。
    • 编辑器激活、同步版本和整树差异结果均复用此入口。
  • 打包由 tree-controls 动态加载界面,并注入仓库操作。
    • 异步读写保留仓库路径校验,避免切库后操作落到另一个仓库。

当前边界与仍保留的耦合

  • 本次优化收拢的是职责归属;runtime 仍通过共享状态及相互调用协作,并非单向分层。
  • 树视图与标题控件、差异表单与筛选持久化、基线切换与标题刷新、视图与选择均存在直接双向依赖。
  • 选择、拖放与历史之间也保留双向依赖,工作区恢复与树模块形成更大的调用环。
  • 原 tree-controls.mts、context-menus.mts、dialogs.mts 和编辑器差异模块保留迁移接口的命名再导出。
    • 再导出会继续产生 ESM 模块依赖,但实现和内部调用已迁到所属模块。
    • 上图没有单独展开这些再导出边。
  • 后续若要进一步解除循环,可集中评估标题状态刷新、表单持久化和操作协调边界。
    • 应先确认具体维护成本,再决定是否提取职责或调整回调方向。
    • 当前记录不增加新抽象,也不改变代码和初始化行为。

deepseek-qa

file-tree-test-cases

点赞(0) 阅读(5) 举报
目录
标题