tsl-devkit/memory-bank/architecture.md

4.1 KiB
Raw Permalink Blame History

架构设计

整体架构

graph TB
    Client["fa:fa-desktop 客户端 (VSCode / Vim / ...)"]

    Client -->|"LSP stdio"| Core

    subgraph Server["LSP Server (C++23)"]

        subgraph Core["Core"]
            direction LR
            S["Server"] ~~~ D["Dispatcher"] ~~~ A["AsyncExecutor"]
        end

        subgraph Provider["Provider"]
            direction LR
            P1["Completion"] ~~~ P2["Definition"] ~~~ P3["CodeAction"] ~~~ P4["..."]
        end

        subgraph Manager["Manager"]
            direction LR
            M1["Document"] ~~~ M2["Parser"] ~~~ M3["Symbol"] ~~~ M4["EventBus"]
        end

        subgraph Language["Language"]
            direction LR
            L1["AST"] ~~~ L2["Semantic"] ~~~ L3["Symbol"]
        end

        subgraph Bridge["Bridge"]
            direction LR
            B1["Glaze"] ~~~ B2["Tree-sitter"] ~~~ B3["Taskflow"] ~~~ B4["spdlog"]
        end

        Core --> Provider & Manager
        Provider --> Manager & Language
        Manager --> Language & Bridge
        Language --> Bridge
    end

核心模块

Core - 核心服务

职责:处理 LSP 协议通信,分发请求,管理服务器生命周期

关键文件

  • 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 - 协议聚合模块

关键约束

  • C++ Modules:使用 .cppm 文件,需要 Clang 20+ 或 GCC 15+
  • 异步处理:所有耗时操作必须通过 AsyncExecutor 异步执行
  • 增量解析:使用 Tree-sitter 保证编辑时的响应性能
  • JSON 序列化:使用 Glaze 库实现零拷贝 JSON 解析

扩展点

添加新的 LSP Provider

步骤

  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 中注册

最后更新2026-02-02