This commit is contained in:
+146
-20
@@ -1,43 +1,169 @@
|
||||
# 架构设计
|
||||
|
||||
<!--
|
||||
填写指南:
|
||||
- 【必填】:项目启动前必须填写
|
||||
- 【可选】:按需填写,可随项目发展补充
|
||||
- 小项目可只填核心模块,架构图可后补
|
||||
-->
|
||||
|
||||
## 整体架构
|
||||
|
||||
<!-- 【可选】项目成熟后补充 -->
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph Clients["编辑器客户端"]
|
||||
VSCode["VSCode Extension"]
|
||||
Vim["Vim Plugin"]
|
||||
Other["其他 IDE"]
|
||||
end
|
||||
|
||||
```txt
|
||||
{{ARCHITECTURE_DIAGRAM}}
|
||||
VSCode & Vim & Other -->|"LSP (JSON-RPC over stdio)"| Core
|
||||
|
||||
subgraph Server["LSP Server (C++23)"]
|
||||
subgraph Core["Core Layer"]
|
||||
ServerMain["Server\n主循环"]
|
||||
Dispatcher["Dispatcher\n请求分发"]
|
||||
AsyncExecutor["AsyncExecutor\n异步调度"]
|
||||
ServerMain --- Dispatcher --- AsyncExecutor
|
||||
end
|
||||
|
||||
subgraph Manager["Manager Layer"]
|
||||
DocumentMgr["Document\nManager"]
|
||||
ParserMgr["Parser\nManager"]
|
||||
SymbolMgr["Symbol\nManager"]
|
||||
EventBus["EventBus"]
|
||||
end
|
||||
|
||||
subgraph Provider["Provider Layer"]
|
||||
Completion["Completion"]
|
||||
CodeAction["CodeAction"]
|
||||
CodeLens["CodeLens"]
|
||||
Definition["Definition"]
|
||||
InlayHint["InlayHint"]
|
||||
More["..."]
|
||||
end
|
||||
|
||||
subgraph Language["Language Layer"]
|
||||
AST["AST\n语法树"]
|
||||
Semantic["Semantic\n语义分析"]
|
||||
Symbol["Symbol\n符号表"]
|
||||
end
|
||||
|
||||
subgraph Bridge["Bridge Layer"]
|
||||
Glaze["Glaze"]
|
||||
Spdlog["spdlog"]
|
||||
Taskflow["Taskflow"]
|
||||
TreeSitter["Tree-sitter"]
|
||||
Win32Stdio["win32_stdio"]
|
||||
end
|
||||
|
||||
Core --> Manager
|
||||
Core --> Provider
|
||||
Provider --> Manager
|
||||
Provider --> Language
|
||||
Manager --> Language
|
||||
Language --> Bridge
|
||||
Manager --> Bridge
|
||||
end
|
||||
```
|
||||
|
||||
## 核心模块
|
||||
|
||||
<!-- 【必填】至少列出主要模块 -->
|
||||
### Core - 核心服务
|
||||
|
||||
### {{MODULE_1}}
|
||||
**职责**:处理 LSP 协议通信,分发请求,管理服务器生命周期
|
||||
|
||||
**职责**:{{MODULE_1_DESC}}
|
||||
**关键文件**:
|
||||
|
||||
- `src/core/server.cppm` - 服务器主循环,stdio 读写
|
||||
- `src/core/dispatcher.cppm` - 请求分发器,路由到对应 Provider
|
||||
|
||||
### Manager - 状态管理
|
||||
|
||||
**职责**:管理文档、符号、解析结果等核心状态
|
||||
|
||||
**关键文件**:
|
||||
|
||||
- `src/manager/document.cppm` - 文档管理,维护打开的文件内容
|
||||
- `src/manager/parser.cppm` - 解析管理,维护语法树缓存
|
||||
- `src/manager/symbol.cppm` - 符号管理,维护符号索引
|
||||
- `src/manager/event_bus.cppm` - 事件总线,模块间解耦通信
|
||||
- `src/manager/manager_hub.cppm` - 管理器集线器,统一访问入口
|
||||
|
||||
### Provider - LSP 功能提供者
|
||||
|
||||
**职责**:实现具体的 LSP 功能(补全、跳转、悬停等)
|
||||
|
||||
**关键目录**:
|
||||
|
||||
- `src/provider/completion_item/` - 代码补全
|
||||
- `src/provider/code_action/` - 代码操作
|
||||
- `src/provider/code_lens/` - 代码透镜
|
||||
- `src/provider/text_document/` - 文档相关 (悬停、跳转定义、引用等)
|
||||
- `src/provider/inlay_hint/` - 内联提示
|
||||
- `src/provider/document_link/` - 文档链接
|
||||
- `src/provider/call_hierarchy/` - 调用层次
|
||||
- `src/provider/type_hierarchy/` - 类型层次
|
||||
- `src/provider/workspace_symbol/` - 工作区符号搜索
|
||||
|
||||
### Language - 语言分析
|
||||
|
||||
**职责**:TSL 语言的语法和语义分析
|
||||
|
||||
**关键目录**:
|
||||
|
||||
- `src/language/ast/` - 抽象语法树访问和遍历
|
||||
- `src/language/semantic/` - 语义分析
|
||||
- `src/language/symbol/` - 符号定义和类型
|
||||
- `src/language/keyword/` - 关键字定义
|
||||
|
||||
### Bridge - 第三方库桥接
|
||||
|
||||
**职责**:封装第三方库,提供 C++ Module 接口
|
||||
|
||||
**关键文件**:
|
||||
|
||||
- `src/bridge/glaze.cppm` - JSON 序列化
|
||||
- `src/bridge/spdlog.cppm` - 日志
|
||||
- `src/bridge/taskflow.cppm` - 并行任务
|
||||
- `src/bridge/tree_sitter.cppm` - 语法解析
|
||||
- `src/bridge/win32_stdio.cppm` - Windows stdio 支持
|
||||
|
||||
### Protocol - LSP 协议
|
||||
|
||||
**职责**:定义 LSP 协议的类型和序列化
|
||||
|
||||
**关键文件**:
|
||||
|
||||
- `src/protocol/types.cppm` - 基础类型定义
|
||||
- `src/protocol/protocol.cppm` - 协议聚合模块
|
||||
|
||||
## 关键约束
|
||||
|
||||
<!-- 【可选】 -->
|
||||
|
||||
- {{CONSTRAINT_1}}
|
||||
- **C++ Modules**:使用 `.cppm` 文件,需要 Clang 20+ 或 GCC 15+
|
||||
- **异步处理**:所有耗时操作必须通过 `AsyncExecutor` 异步执行
|
||||
- **增量解析**:使用 Tree-sitter 保证编辑时的响应性能
|
||||
- **JSON 序列化**:使用 Glaze 库实现零拷贝 JSON 解析
|
||||
|
||||
## 扩展点
|
||||
|
||||
<!-- 【可选】大项目建议填写 -->
|
||||
|
||||
### {{EXTENSION_1}}
|
||||
### 添加新的 LSP Provider
|
||||
|
||||
**步骤**:
|
||||
|
||||
1. {{STEP_1}}
|
||||
1. 在 `src/provider/` 下创建新目录
|
||||
2. 继承 `ProviderBase` 基类
|
||||
3. 实现 `handle()` 方法处理请求
|
||||
4. 在 `Dispatcher` 中注册路由
|
||||
|
||||
### 添加新的语义分析
|
||||
|
||||
**步骤**:
|
||||
|
||||
1. 在 `src/language/semantic/` 添加分析模块
|
||||
2. 定义访问 AST 的逻辑
|
||||
3. 在 `SymbolManager` 中集成
|
||||
|
||||
### 添加新的代码补全类型
|
||||
|
||||
**步骤**:
|
||||
|
||||
1. 在 `src/provider/completion_item/` 添加新的补全源
|
||||
2. 实现补全逻辑,返回 `CompletionItem` 列表
|
||||
3. 在主 completion provider 中注册
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user