# VS Code 文件树实现说明

本文档为外部参考设计说明，概述资源管理器(Explorer)文件树的实现结构、关键模块与数据流转路径，不依赖具体代码文件或内部路径。

## 1. 入口与视图注册

资源管理器视图由视图容器注册，并根据工作区状态(空工作区、单文件夹、多文件夹)切换显示内容。

- 关键点:
  - 视图注册模块负责在合适时机注册/注销“文件树视图”或“空状态视图”。
  - 视图容器负责创建并承载文件树视图实例。

## 2. 树组件与视图层

文件树主体在视图层创建与管理，负责 UI 生命周期、交互与状态恢复。

- 关键点:
  - 视图层创建树组件并绑定数据源、渲染器、过滤器、排序器等。
  - 树组件支持异步加载、压缩目录、键盘导航与可访问性。
  - 视图层负责设置树输入(单根或多根)与恢复/保存视图状态。

## 3. 数据模型

文件树的节点模型定义了树节点结构与文件系统属性。

- 关键点:
  - 根节点集合与工作区绑定，并在工作区变化时更新。
  - 单个节点表示文件或文件夹，包含名称、路径、父子关系、只读属性等。
  - 子节点按需解析，支持延迟加载。
  - 支持文件嵌套(file nesting)与节点合并更新。

## 4. 数据源

树控件通过数据源获取节点及其子节点。

- 关键点:
  - 数据源负责桥接树控件与模型层的子节点解析。
  - 统一处理错误与进度展示，避免阻塞主线程体验。

## 5. 渲染

节点渲染、图标、压缩目录等逻辑在渲染器中处理。

- 关键点:
  - 渲染器负责绘制标签、图标、装饰、计数徽标等。
  - 支持“紧凑文件夹”(compressed folders)显示与重命名输入框。

## 6. 过滤与隐藏规则

过滤逻辑决定哪些节点可见。

- 关键点:
  - 支持用户配置的排除规则与版本控制忽略规则。
  - 当忽略文件发生变化时自动更新过滤结果。
  - 已打开编辑器对应的文件可被提升为可见。

## 7. 排序与拖拽

排序与拖拽由树组件的配置与扩展点提供。

- 排序支持按名称、类型、修改时间与自定义规则。
- 拖拽支持内部移动、跨窗口/外部导入等场景，并配合权限与冲突提示。

## 8. 运行时更新与刷新

文件树通过刷新与文件系统事件保持与磁盘一致。

- 视图层可以触发局部或全量刷新。
- 过滤层监听文件系统变化以更新忽略规则。
- 专用的文件树服务负责协调文件系统事件与模型更新。

## 9. 树控件底层

Explorer 依赖通用树控件能力，提供高性能虚拟滚动、可访问性与异步加载支持。

## 10. 建议阅读顺序(概念层面)

1. 视图注册与容器
2. 视图层与树组件
3. 数据模型
4. 数据源与渲染
5. 文件系统事件与刷新机制

---

如需更细的事件流或具体调用链(例如某个命令如何影响树刷新)，可以指定场景，我可以补充详细追踪说明。
