🔧 chore(playbook): align repo with latest workflow
lsp-server ci / build-and-test (push) Failing after 0s
lsp-server ci / build-and-test (push) Failing after 0s
sync playbook-managed rules and prompts. migrate memory-bank to the new structure and move plans to docs/superpowers/plans. keep product README files untouched.
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
# 当前上下文
|
||||
|
||||
## Current Goal
|
||||
|
||||
- 完成 playbook 强对齐后的收口:沿用新文档架构、主循环和计划路径,
|
||||
后续开发不再使用旧 `memory-bank/architecture.md` /
|
||||
`tech-stack.md` / `docs/plans/`
|
||||
|
||||
## Recent Changes
|
||||
|
||||
- `docs/standards/playbook/` 已通过 subtree 更新到上游最新快照
|
||||
- `playbook.toml` 已对齐新配置形态,并启用了 `CLAUDE.md` 同步
|
||||
- playbook 管理的规则、提示词和 `.agents/` 已重新同步
|
||||
|
||||
## Touched Files
|
||||
|
||||
- `AGENT_RULES.local.md` - 收敛项目私有约束并补充 CIFS/git 注意事项
|
||||
- `memory-bank/` - 迁移到 `project-brief / tech-context / system-patterns / active-context / progress / decisions`
|
||||
- `docs/superpowers/plans/2026-05-24-playbook-strong-alignment.md` -
|
||||
作为新的计划入口
|
||||
|
||||
## Open Questions
|
||||
|
||||
- 暂无功能性阻塞;后续若再次在 CIFS 工作区执行 subtree,
|
||||
继续使用轻量 git stat 配置
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. 后续新增实施计划统一写到 `docs/superpowers/plans/`
|
||||
2. 执行 Plan 时使用 `main_loop.py claim / finish` 回写 `progress.md`
|
||||
3. 下次升级 playbook 仍按 subtree -> playbook sync 的顺序处理
|
||||
|
||||
## Session Notes
|
||||
|
||||
- 产品 README 不属于本轮 playbook 对齐范围,保持不动
|
||||
- 旧 `docs/prompts/coding/review.md` 与
|
||||
`docs/prompts/meta/prompt-generator.md` 已由新架构替代
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-05-24
|
||||
@@ -1,189 +0,0 @@
|
||||
# 架构设计
|
||||
|
||||
## 整体架构
|
||||
|
||||
```mermaid
|
||||
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"]
|
||||
end
|
||||
|
||||
subgraph Scheduler["Scheduler"]
|
||||
direction LR
|
||||
A["AsyncExecutor"]
|
||||
end
|
||||
|
||||
subgraph Codec["Codec"]
|
||||
direction LR
|
||||
C1["Facade"] ~~~ C2["Transformer"]
|
||||
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 & Scheduler
|
||||
Core --> Codec
|
||||
Provider --> Manager & Language
|
||||
Manager --> Language & Bridge
|
||||
Language --> Bridge
|
||||
Scheduler --> Bridge
|
||||
Codec --> Bridge
|
||||
end
|
||||
```
|
||||
|
||||
## 核心模块
|
||||
|
||||
### Core - 核心服务
|
||||
|
||||
**职责**:处理 LSP 协议通信,分发请求,管理服务器生命周期
|
||||
|
||||
**关键文件**:
|
||||
|
||||
- `src/core/server.cppm` - 服务器主循环,stdio 读写
|
||||
- `src/core/dispatcher.cppm` - 请求分发器,路由到对应 Provider
|
||||
- `src/core/bootstrap.cppm` - 服务器启动初始化
|
||||
|
||||
### Scheduler - 异步调度
|
||||
|
||||
**职责**:管理异步任务的执行、取消和生命周期
|
||||
|
||||
**关键文件**:
|
||||
|
||||
- `src/scheduler/async_executor.cppm` - 异步任务执行器,基于 Taskflow 实现
|
||||
|
||||
### Codec - 编解码
|
||||
|
||||
**职责**:封装 JSON 序列化/反序列化,提供统一的 LSP 消息编解码接口
|
||||
|
||||
**关键文件**:
|
||||
|
||||
- `src/codec/facade.cppm` - 序列化门面,`Serialize<T>` / `Deserialize<T>` 统一入口
|
||||
- `src/codec/transformer.cppm` - LSPAny 类型转换
|
||||
- `src/codec/common.cppm` - 公共类型
|
||||
|
||||
### Manager - 状态管理
|
||||
|
||||
**职责**:管理文档、符号、解析结果等核心状态
|
||||
|
||||
**关键文件**:
|
||||
|
||||
- `src/manager/document.cppm` - 文档管理,维护打开的文件内容
|
||||
- `src/manager/parser.cppm` - 解析管理,维护语法树缓存
|
||||
- `src/manager/symbol.cppm` - 符号管理,维护符号索引
|
||||
- `src/manager/event_bus.cppm` - 事件总线,模块间解耦通信
|
||||
- `src/manager/events.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/` - 工作区符号搜索
|
||||
- `src/provider/initialize/`, `src/provider/initialized/`, `src/provider/shutdown/`, `src/provider/exit/` - 生命周期管理
|
||||
- `src/provider/cancel_request/` - 请求取消
|
||||
- `src/provider/workspace/`, `src/provider/window/`, `src/provider/client/` - 协议通道管理
|
||||
- `src/provider/trace/`, `src/provider/telemetry/` - 追踪与遥测
|
||||
|
||||
### 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-03-04
|
||||
@@ -141,4 +141,35 @@ VSCode 扩展作为纯客户端,通过 stdio 与独立的 LSP 服务器进程
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-02-02
|
||||
## ADR-007: 使用 vendored playbook 与主循环维护代理文档
|
||||
|
||||
**日期**: 2026-05-24
|
||||
**状态**: 已采纳
|
||||
|
||||
### 决策
|
||||
|
||||
将 `docs/standards/playbook/` 作为 vendored 快照,通过
|
||||
`git subtree` 升级;仓库内规则、提示词和 `.agents/` 通过
|
||||
`python docs/standards/playbook/scripts/playbook.py -config playbook.toml`
|
||||
同步;后续实施计划统一放到 `docs/superpowers/plans/`,
|
||||
并使用 `main_loop.py claim / finish` 维护 `memory-bank/progress.md`
|
||||
状态块。
|
||||
|
||||
### 理由
|
||||
|
||||
- 需要与 playbook 上游架构保持强对齐,减少手工漂移
|
||||
- 需要把框架管理文件与项目自维护文件分清边界
|
||||
- 需要统一 Plan 留痕和状态流转,避免旧 `docs/plans/`
|
||||
与旧 `plan-status` 机制继续分叉
|
||||
|
||||
### 影响
|
||||
|
||||
- 升级 playbook 时必须先做 subtree,再执行同步脚本
|
||||
- `AGENT_RULES.local.md` 与 `memory-bank/*.md` 仍由项目自行维护
|
||||
- 产品 README 不再承载 playbook 对齐信息
|
||||
- 后续会话应优先读取 `docs/superpowers/plans/` 与新的
|
||||
`workflow-state` / `plan-status` 状态块
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-05-24
|
||||
|
||||
+28
-51
@@ -1,65 +1,42 @@
|
||||
# 项目进度
|
||||
# 当前进展
|
||||
|
||||
## 已完成功能
|
||||
## Current Focus
|
||||
|
||||
### LSP 服务器核心
|
||||
- 已完成 playbook 强对齐;后续开发统一使用新 `memory-bank/` 结构、
|
||||
`docs/superpowers/plans/` 和 `main_loop.py` 状态流转
|
||||
|
||||
- [x] JSON-RPC 通信框架 (stdio)
|
||||
- [x] 请求分发器 (Dispatcher)
|
||||
- [x] 异步任务执行器 (AsyncExecutor)
|
||||
- [x] 文档管理器 (DocumentManager)
|
||||
- [x] 解析管理器 (ParserManager)
|
||||
- [x] 符号管理器 (SymbolManager)
|
||||
- [x] 事件总线 (EventBus)
|
||||
## Recent Changes
|
||||
|
||||
### LSP 功能 (Provider)
|
||||
- vendored `playbook` 快照已通过 subtree 更新并重新同步托管文件
|
||||
- `memory-bank` 已迁移到 `tech-context` / `system-patterns` /
|
||||
`active-context` 新结构
|
||||
- 旧 `docs/prompts/coding/review.md`、
|
||||
`docs/prompts/meta/prompt-generator.md`、
|
||||
`memory-bank/architecture.md`、
|
||||
`memory-bank/tech-stack.md` 已移除
|
||||
|
||||
- [x] `initialize` / `shutdown` / `exit`
|
||||
- [x] `textDocument/didOpen` / `didChange` / `didClose`
|
||||
- [x] `textDocument/completion` - 代码补全
|
||||
- [x] `textDocument/hover` - 悬停信息
|
||||
- [x] `textDocument/definition` - 跳转定义
|
||||
- [x] `textDocument/references` - 查找引用
|
||||
- [x] `textDocument/documentSymbol` - 文档符号
|
||||
- [x] `textDocument/codeAction` - 代码操作
|
||||
- [x] `textDocument/codeLens` - 代码透镜
|
||||
- [x] `textDocument/inlayHint` - 内联提示
|
||||
- [x] `textDocument/documentLink` - 文档链接
|
||||
- [x] `callHierarchy/incomingCalls` / `outgoingCalls`
|
||||
- [x] `typeHierarchy/supertypes` / `subtypes`
|
||||
- [x] `workspace/symbol` - 工作区符号搜索
|
||||
## Next Steps
|
||||
|
||||
### VSCode 扩展
|
||||
1. 新任务先写到 `docs/superpowers/plans/` 再执行
|
||||
2. 进入执行阶段前用 `main_loop.py claim` 领取 Plan
|
||||
3. Playbook 升级保持 subtree + sync 的固定顺序
|
||||
|
||||
- [x] 语法高亮 (TextMate)
|
||||
- [x] 代码片段 (Snippets)
|
||||
- [x] LSP 客户端集成
|
||||
- [x] 扩展打包 (`.vsix`)
|
||||
## Open Risks
|
||||
|
||||
### 构建与部署
|
||||
- CIFS 共享目录上的 git 索引状态可能误报脏工作区,
|
||||
影响 subtree、status 和 stash 类命令
|
||||
|
||||
- [x] CMake 构建系统
|
||||
- [x] Conan 依赖管理
|
||||
- [x] Linux (Clang) 构建
|
||||
- [x] Windows 交叉编译
|
||||
- [x] Gitea CI/CD 流水线
|
||||
## Workflow State
|
||||
|
||||
## 进行中
|
||||
<!-- workflow-state:start -->
|
||||
phase: done
|
||||
plan: docs/superpowers/plans/2026-05-24-playbook-strong-alignment.md
|
||||
executor: executing-plans
|
||||
constraints: karpathy-guidelines,.agents,AGENT_RULES
|
||||
<!-- workflow-state:end -->
|
||||
|
||||
- [ ] 语义高亮 (`textDocument/semanticTokens`)
|
||||
- [ ] 重命名 (`textDocument/rename`)
|
||||
- [ ] 格式化 (`textDocument/formatting`)
|
||||
|
||||
## 待规划
|
||||
|
||||
- [ ] 诊断 (`textDocument/publishDiagnostics`)
|
||||
- [ ] 签名帮助 (`textDocument/signatureHelp`)
|
||||
- [ ] 折叠范围 (`textDocument/foldingRange`)
|
||||
- [ ] 选择范围 (`textDocument/selectionRange`)
|
||||
|
||||
---
|
||||
|
||||
# Plan 状态
|
||||
## Plan Status
|
||||
|
||||
<!-- plan-status:start -->
|
||||
- [x] `2026-05-24-playbook-strong-alignment.md` done
|
||||
<!-- plan-status:end -->
|
||||
|
||||
@@ -2,47 +2,49 @@
|
||||
|
||||
## 项目定位
|
||||
|
||||
**核心目标**:为 TSL (TinySoft Language) 提供完整的 IDE 开发体验
|
||||
**核心目标**:为 TSL 提供稳定、可扩展的语言服务与编辑器集成能力。
|
||||
|
||||
**一句话描述**:基于 LSP 标准的 TSL 语言服务器及编辑器扩展套件
|
||||
**一句话描述**:以 C++23 LSP 服务器为核心,配套 VSCode 与 Vim 支持的
|
||||
TSL 开发套件。
|
||||
|
||||
## 项目边界
|
||||
|
||||
### 做什么
|
||||
|
||||
- 实现 LSP (Language Server Protocol) 服务器,提供标准语言服务
|
||||
- 提供 VSCode 扩展,集成语法高亮、代码补全、诊断等功能
|
||||
- 提供 Vim 语法支持
|
||||
- 支持跨平台运行 (Linux / Windows)
|
||||
- 实现 TSL 的 LSP 服务器,提供补全、跳转、引用、符号等语言能力
|
||||
- 维护 Tree-sitter 解析、AST、语义与符号链路,保障编辑时反馈质量
|
||||
- 提供 VSCode 扩展与 Vim 语法支持,覆盖主要编辑器接入场景
|
||||
- 维护 Linux / Windows 的构建、测试与发布路径
|
||||
|
||||
### 不做什么
|
||||
|
||||
- 不实现 TSL 语言的编译器/解释器
|
||||
- 不实现 TSL 语言的运行时环境
|
||||
- 不提供 TSL 语言的调试功能 (Debugger)
|
||||
- 不实现 TSL 编译器、解释器或运行时
|
||||
- 不实现调试器或独立 IDE 产品
|
||||
- 不把 playbook 同步内容扩展到产品 README 范围
|
||||
|
||||
### 约束条件
|
||||
|
||||
- 必须遵循 LSP 3.17+ 协议标准
|
||||
- LSP 服务器必须支持增量解析以保证响应性能
|
||||
- 必须同时支持 Linux 和 Windows 平台
|
||||
- 对外行为必须保持 LSP 3.17+ 兼容
|
||||
- 解析链路必须支持增量更新,避免编辑场景响应退化
|
||||
- C++ 服务器代码以 C++23 Modules 组织,依赖现代编译器工具链
|
||||
- `docs/standards/playbook/` 作为 vendored 快照维护,更新流程固定
|
||||
|
||||
## 核心概念
|
||||
|
||||
| 术语 | 说明 |
|
||||
| --------------- | ------------------------------------------------ |
|
||||
| **TSL** | TinySoft Language,天软公司的领域特定脚本语言 |
|
||||
| **LSP** | Language Server Protocol,微软定义的语言服务协议 |
|
||||
| **Tree-sitter** | 增量解析框架,用于构建语法树 |
|
||||
| **Provider** | LSP 功能提供者,处理特定类型的请求 |
|
||||
| **Manager** | 管理器,负责文档、符号、解析等核心状态管理 |
|
||||
| 术语 | 说明 |
|
||||
| --- | --- |
|
||||
| **TSL** | TinySoft Language,天软公司的领域脚本语言 |
|
||||
| **LSP** | Language Server Protocol,编辑器与语言服务的标准协议 |
|
||||
| **Tree-sitter** | 增量解析器,用于语法树构建和局部更新 |
|
||||
| **Provider** | 处理具体 LSP 请求的能力模块 |
|
||||
| **Manager** | 管理文档、解析结果、符号等共享状态的核心组件 |
|
||||
|
||||
## 参考资料
|
||||
|
||||
- [LSP 规范](https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/)
|
||||
- [Tree-sitter 文档](https://tree-sitter.github.io/tree-sitter/)
|
||||
- [VSCode 扩展 API](https://code.visualstudio.com/api)
|
||||
- [VSCode Extension API](https://code.visualstudio.com/api)
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-02-02
|
||||
**最后更新**:2026-05-24
|
||||
|
||||
@@ -0,0 +1,77 @@
|
||||
# 系统模式与约束
|
||||
|
||||
## 模块边界
|
||||
|
||||
### Core / Protocol
|
||||
|
||||
- **职责**:处理 stdio 生命周期、LSP 消息路由、协议类型定义与序列化入口
|
||||
- **输入**:编辑器发来的原始 LSP 请求、通知、初始化参数
|
||||
- **输出**:分发后的 provider 调用、协议响应和服务端事件
|
||||
- **不应负责**:语义分析、符号计算、解析缓存管理
|
||||
|
||||
### Provider / Manager
|
||||
|
||||
- **职责**:Provider 负责 capability 级编排;
|
||||
Manager 负责文档、解析结果、符号等共享状态
|
||||
- **输入**:已解析的协议请求、文档状态、语言分析结果
|
||||
- **输出**:LSP 返回值、workspace edit、内部状态更新
|
||||
- **不应负责**:跨层直接操作第三方库细节,或绕过 manager 持久化共享状态
|
||||
|
||||
### Language / Bridge
|
||||
|
||||
- **职责**:Language 负责 AST、语义、符号逻辑;
|
||||
Bridge 负责 Tree-sitter、Glaze、Taskflow、spdlog 等第三方封装
|
||||
- **输入**:语法树、节点访问请求、共享分析上下文
|
||||
- **输出**:AST 结构、语义结论、符号信息、桥接后的库接口
|
||||
- **不应负责**:LSP 协议路由、编辑器生命周期管理
|
||||
|
||||
## 关键数据流
|
||||
|
||||
1. 编辑器请求进入 `core/server.cppm`,由 `dispatcher.cppm`
|
||||
解析 method 并路由到对应 provider
|
||||
2. Provider 通过 `manager/` 获取文档、语法树和符号状态,
|
||||
需要深入分析时再调用 `language/` 能力
|
||||
3. 结果经 `protocol/` 与 `codec/` 序列化后返回客户端;
|
||||
异步任务由 `scheduler/async_executor.cppm` 承载
|
||||
|
||||
## 核心不变量
|
||||
|
||||
- LSP 线协议必须稳定,能力扩展优先新增 provider 而不是改现有报文结构
|
||||
- 文档和解析缓存由 manager 统一持有,其他层不各自维护第二份真相
|
||||
- Tree-sitter 生成物、AST 访问逻辑和测试夹具必须同步演进
|
||||
- Bridge 模块只做库封装,不夹带 TSL 业务分支
|
||||
|
||||
## 常见实现模式
|
||||
|
||||
### 新增 LSP 能力
|
||||
|
||||
- **适用场景**:新增 `textDocument/*`、`workspace/*`、
|
||||
`callHierarchy/*` 等协议能力
|
||||
- **推荐做法**:先补 protocol 类型,再在 `src/provider/`
|
||||
新增或扩展对应 provider,最后在 dispatcher 注册并补测试
|
||||
- **避免事项**:把协议分发、共享状态和语义逻辑揉进一个模块里
|
||||
|
||||
### 调整语法或 AST
|
||||
|
||||
- **适用场景**:关键字、表达式、声明、节点结构发生变化
|
||||
- **推荐做法**:先改 Tree-sitter 与 parser/scanner,同步 AST /
|
||||
semantic / symbol 访问点,再补 `test_tree_sitter`、
|
||||
`test_ast`、相关 provider 测试
|
||||
- **避免事项**:只改生成物不改测试,或只改 AST 不回溯语法源
|
||||
|
||||
## 扩展路径
|
||||
|
||||
1. 协议功能扩展优先从 `src/protocol/`、`src/provider/`、
|
||||
`src/core/dispatcher.cppm` 这一条链路进入
|
||||
2. 语言分析扩展优先从 `src/language/` 进入,
|
||||
需要共享缓存时再通过 `src/manager/` 暴露给 provider
|
||||
|
||||
## 禁止破坏的约束
|
||||
|
||||
- 不破坏现有分层边界,不跨层绕过 manager 直接操作底层解析状态
|
||||
- 不引入与现有 C++23 Modules 组织方式冲突的头文件式拼装
|
||||
- 不在 playbook 对齐任务里修改产品 README 或业务实现
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-05-24
|
||||
@@ -0,0 +1,80 @@
|
||||
# 技术上下文与工具链
|
||||
|
||||
## 核心技术
|
||||
|
||||
- C++23 Modules、CMake、Conan、Ninja:`lsp-server/` 主体工具链
|
||||
- Tree-sitter:TSL 增量解析与语法树生成
|
||||
- Glaze、Taskflow、spdlog:JSON、异步调度与日志基础设施
|
||||
- TypeScript + VSCode API:`vscode/` 扩展
|
||||
- Python 3:playbook 同步、Plan 流程与辅助脚本
|
||||
|
||||
## 项目结构
|
||||
|
||||
```text
|
||||
tsl-devkit/
|
||||
├── lsp-server/ # C++23 LSP 服务器、解析器与测试
|
||||
├── vscode/ # VSCode 扩展
|
||||
├── vim/ # Vim 语法与运行时支持
|
||||
├── docs/standards/playbook/ # vendored playbook 快照
|
||||
├── docs/prompts/ # playbook 管理的提示词入口
|
||||
├── docs/superpowers/plans/ # 实施计划
|
||||
└── memory-bank/ # 项目上下文
|
||||
```
|
||||
|
||||
## 关键入口
|
||||
|
||||
- `lsp-server/src/core/server.cppm` - LSP stdio 主循环
|
||||
- `lsp-server/src/core/dispatcher.cppm` - 请求分发入口
|
||||
- `lsp-server/src/provider/` - 各类 LSP capability 实现
|
||||
- `lsp-server/src/manager/` - 文档、解析、符号等共享状态
|
||||
- `lsp-server/src/language/` - AST、语义、符号分析
|
||||
- `docs/standards/playbook/scripts/playbook.py` - 同步 playbook 管理文件
|
||||
- `docs/standards/playbook/scripts/main_loop.py` - Plan 领取与写回
|
||||
|
||||
## 开发环境
|
||||
|
||||
**必需工具**:
|
||||
|
||||
- Python 3
|
||||
- CMake 4.2+
|
||||
- Conan 2.x
|
||||
- Ninja
|
||||
- Clang 20+ 或 GCC 15+
|
||||
- Node.js 18+
|
||||
|
||||
**运行测试**:
|
||||
|
||||
```bash
|
||||
ctest --test-dir lsp-server/build/clang-linux/Release --output-on-failure
|
||||
npm --prefix vscode run compile
|
||||
```
|
||||
|
||||
**格式化 / Lint**:
|
||||
|
||||
```bash
|
||||
clang-format -i <cpp-files>
|
||||
npx --prefix vscode prettier -w <ts-or-json-files>
|
||||
```
|
||||
|
||||
## 环境与平台差异
|
||||
|
||||
- Linux 是主开发环境;Windows 构建通过 Conan profile + CMake 交叉编译支持
|
||||
- 仓库位于 CIFS 共享目录时,git 索引状态可能不稳定,需要用轻量 stat 配置
|
||||
|
||||
## 依赖与限制
|
||||
|
||||
- Conan 安装和部分构建步骤依赖外网或内网制品源
|
||||
- `docs/standards/playbook/` 不做手工业务改造,只通过 subtree 更新
|
||||
- `vscode/package.json` 目前没有独立 lint 脚本,TS 侧最基本验证是 `npm run compile`
|
||||
|
||||
## 验证约定
|
||||
|
||||
- 文档 / playbook 变更至少要重新运行
|
||||
`python docs/standards/playbook/scripts/playbook.py -config playbook.toml`
|
||||
- 代码改动的验证范围要与影响面匹配,至少覆盖对应模块的构建或测试
|
||||
- 在 CIFS 工作区里,git 校验命令优先加
|
||||
`-c core.trustctime=false -c core.checkStat=minimal`
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-05-24
|
||||
@@ -1,123 +0,0 @@
|
||||
# 技术栈与工具链
|
||||
|
||||
## 核心技术
|
||||
|
||||
**主语言**:C++23 (LSP 服务器) + TypeScript (VSCode 扩展)
|
||||
|
||||
**文件类型**:`.cppm` (C++ Module), `.cc`, `.ts`, `.json`
|
||||
|
||||
## 项目结构
|
||||
|
||||
```text
|
||||
tsl-devkit/
|
||||
├── lsp-server/ # LSP 服务器 (C++23)
|
||||
│ ├── src/ # 源代码
|
||||
│ │ ├── bridge/ # 第三方库桥接
|
||||
│ │ ├── cli/ # 命令行接口
|
||||
│ │ ├── codec/ # 编解码器
|
||||
│ │ ├── core/ # 核心服务
|
||||
│ │ ├── language/ # 语言分析
|
||||
│ │ ├── manager/ # 状态管理器
|
||||
│ │ ├── protocol/ # LSP 协议定义
|
||||
│ │ ├── provider/ # LSP 功能提供者
|
||||
│ │ ├── scheduler/ # 异步调度
|
||||
│ │ ├── tree-sitter/ # 解析器绑定
|
||||
│ │ └── utils/ # 工具函数
|
||||
│ ├── test/ # 单元测试
|
||||
│ └── conan/ # Conan 配置
|
||||
├── vscode/ # VSCode 扩展
|
||||
│ ├── src/ # TypeScript 源码
|
||||
│ ├── syntaxes/ # TextMate 语法
|
||||
│ └── snippets/ # 代码片段
|
||||
├── vim/ # Vim 支持
|
||||
├── test/ # 集成测试用例
|
||||
├── docs/ # 文档
|
||||
│ ├── prompts/ # AI 编码提示
|
||||
│ └── standards/ # 代码标准
|
||||
└── memory-bank/ # 项目上下文
|
||||
```
|
||||
|
||||
## 开发环境
|
||||
|
||||
**必需工具**:
|
||||
|
||||
- CMake 4.2+
|
||||
- Clang 20+ (推荐) 或 GCC 15+
|
||||
- Conan 2.x (包管理)
|
||||
- Node.js 18+ (VSCode 扩展开发)
|
||||
- ninja (构建)
|
||||
|
||||
**构建 LSP 服务器 (Linux)**:
|
||||
|
||||
```bash
|
||||
# 安装依赖
|
||||
CONAN_HOME=/tmp/conan-home conan install lsp-server \
|
||||
-pr:h=lsp-server/conan/profiles/linux-x86_64-clang \
|
||||
-pr:b=lsp-server/conan/profiles/linux-x86_64-clang \
|
||||
-of lsp-server/build/clang-linux --build=missing
|
||||
|
||||
# 配置
|
||||
cmake -S lsp-server -B lsp-server/build/clang-linux/Release \
|
||||
-DCMAKE_TOOLCHAIN_FILE=$PWD/lsp-server/build/clang-linux/Release/generators/conan_toolchain.cmake \
|
||||
-DBUILD_TESTS=ON
|
||||
|
||||
# 构建
|
||||
cmake --build lsp-server/build/clang-linux/Release --target tsl-server
|
||||
```
|
||||
|
||||
**构建 LSP 服务器 (Windows 交叉编译)**:
|
||||
|
||||
```bash
|
||||
CONAN_HOME=/tmp/conan-home conan install lsp-server \
|
||||
-pr:b=lsp-server/conan/profiles/linux-x86_64-clang \
|
||||
-pr:h=lsp-server/conan/profiles/windows-x86_64-clang-cross \
|
||||
-of lsp-server/build/clang-cross --build=missing
|
||||
|
||||
cmake -S lsp-server -B lsp-server/build/clang-cross \
|
||||
-DCMAKE_TOOLCHAIN_FILE=$PWD/lsp-server/build/clang-cross/Release/generators/conan_toolchain.cmake \
|
||||
-DBUILD_TESTS=OFF
|
||||
|
||||
cmake --build lsp-server/build/clang-cross --target tsl-server
|
||||
```
|
||||
|
||||
**运行测试**:
|
||||
|
||||
```bash
|
||||
# C++ 单元测试
|
||||
ctest --test-dir lsp-server/build/clang-linux/Release --output-on-failure
|
||||
|
||||
# VSCode 扩展
|
||||
cd vscode && npm test
|
||||
```
|
||||
|
||||
## 依赖管理
|
||||
|
||||
**C++ 依赖 (Conan)**:
|
||||
|
||||
| 包 | 版本 | 用途 |
|
||||
| ----------- | ------ | ------------------ |
|
||||
| glaze | 6.4.0 | 高性能 JSON 序列化 |
|
||||
| spdlog | 1.17.0 | 日志库 |
|
||||
| fmt | 12.1.0 | 格式化库 |
|
||||
| taskflow | 3.10.0 | 并行任务执行 |
|
||||
| tree-sitter | 0.25.9 | 增量语法解析 |
|
||||
|
||||
**VSCode 扩展依赖 (npm)**:
|
||||
|
||||
| 包 | 用途 |
|
||||
| --------------------- | ---------- |
|
||||
| vscode-languageclient | LSP 客户端 |
|
||||
|
||||
## 测试策略
|
||||
|
||||
**测试类型**:
|
||||
|
||||
- LSP JSON 测试:Python 脚本驱动的协议交互测试 (`run_lsp_json_tests.py`)
|
||||
|
||||
**验证标准**:
|
||||
|
||||
- 所有 LSP JSON 测试通过
|
||||
|
||||
---
|
||||
|
||||
**最后更新**:2026-02-02
|
||||
Reference in New Issue
Block a user