🔧 chore(repo): refresh local rules and ast defaults
add repository-local agent rules and refresh the architecture notes for the current lsp layering. register the AST self-test in CTest, initialize a few AST defaults, and bump glaze to the newer conan package version. verify: `cmake --build lsp-server/build/clang-linux/Release --target test_ast` verify: `ctest --test-dir lsp-server/build/clang-linux/Release -R test_ast_unit --output-on-failure` passes known issue: `ctest --test-dir lsp-server/build/clang-linux/Release -R test_ast_script --output-on-failure` still fails on `/home/csh/windows_share/tsf/funcext/Common/Tree/TTree.tsf` due to invalid TSF syntax (`FConfig &= v` missing trailing `;`).
This commit is contained in:
parent
32e1eb09db
commit
a9958f36fe
|
|
@ -0,0 +1,104 @@
|
||||||
|
# AGENT_RULES.local
|
||||||
|
|
||||||
|
目的:记录 tsl-devkit 项目私有规则,优先级高于 `AGENT_RULES.md`。
|
||||||
|
|
||||||
|
## 架构参考
|
||||||
|
|
||||||
|
理解项目结构前,必须阅读 `memory-bank/architecture.md`,重点关注:
|
||||||
|
|
||||||
|
- Core / Manager / Provider / Language / Bridge 分层边界
|
||||||
|
- LSP 请求从 `Dispatcher` 到 Provider 的调用链
|
||||||
|
- Tree-sitter + AST + Semantic 的分析链路
|
||||||
|
- C++23 Modules 与构建约束
|
||||||
|
|
||||||
|
涉及协议与能力面时,还需同步阅读:
|
||||||
|
|
||||||
|
- `memory-bank/project-brief.md`
|
||||||
|
- `memory-bank/tech-stack.md`
|
||||||
|
|
||||||
|
## 代码/架构约束
|
||||||
|
|
||||||
|
- 禁止无需求变更 LSP 协议对外行为:`method` 字符串、协议字段命名、响应结构保持兼容
|
||||||
|
- 禁止破坏现有分层:Provider 不直接承载 Manager/Language 的底层实现细节
|
||||||
|
- 换行符必须遵循 `.gitattributes` 规则,以该文件中的配置为准
|
||||||
|
- 禁止提交构建产物和临时文件:`lsp-server/build/**`、运行日志、临时脚本输出
|
||||||
|
- `docs/standards/playbook/` 为 vendored 快照;更新优先使用 subtree + 同步脚本,不做无依据手改
|
||||||
|
|
||||||
|
## Tree-sitter / AST 变更规则
|
||||||
|
|
||||||
|
新增或修改语法/解析链路时:
|
||||||
|
|
||||||
|
1. 优先修改语法源和解析逻辑(如 `grammar.js`、AST 反序列化逻辑)
|
||||||
|
2. `lsp-server/src/tree-sitter/` 与 `lsp-server/test/test_tree_sitter/src/` 下同名 parser/scanner 文件必须保持一致
|
||||||
|
3. 修改 AST 节点结构时,同步更新 `types/deserializer/debug_printer/test` 路径
|
||||||
|
4. 对行为变更补最小复现测试(优先 `test_ast --self-test` 或对应目录单测)
|
||||||
|
5. 汇报中必须写清“语法层问题 / AST 层问题 / 语义层问题”归因
|
||||||
|
|
||||||
|
## 项目特有提示词
|
||||||
|
|
||||||
|
执行以下任务时必须先读取对应提示词:
|
||||||
|
|
||||||
|
| 任务类型 | 提示词路径 |
|
||||||
|
| --- | --- |
|
||||||
|
| 需求澄清 | `docs/prompts/coding/clarify.md` |
|
||||||
|
| 代码复盘/评审总结 | `docs/prompts/coding/review.md` |
|
||||||
|
| 代理行为/工作模式 | `docs/prompts/system/agent-behavior.md` |
|
||||||
|
| 生成新提示词 | `docs/prompts/meta/prompt-generator.md` |
|
||||||
|
|
||||||
|
## 测试与验证规则
|
||||||
|
|
||||||
|
- 执行测试前,若构建目录不可用,先按“标准构建命令”完成依赖安装与编译
|
||||||
|
- AST/解析改动至少执行:
|
||||||
|
- `ctest --test-dir lsp-server/build/clang-linux/Release -R test_ast_unit --output-on-failure`
|
||||||
|
- `ctest --test-dir lsp-server/build/clang-linux/Release -R test_ast_script --output-on-failure`
|
||||||
|
- Provider/协议改动至少执行:
|
||||||
|
- `ctest --test-dir lsp-server/build/clang-linux/Release -R test_provider --output-on-failure`
|
||||||
|
- `ctest --test-dir lsp-server/build/clang-linux/Release -R test_lsp_json --output-on-failure`
|
||||||
|
- 语义/符号改动至少执行:
|
||||||
|
- `ctest --test-dir lsp-server/build/clang-linux/Release -R test_semantic --output-on-failure`
|
||||||
|
- `ctest --test-dir lsp-server/build/clang-linux/Release -R test_symbol --output-on-failure`
|
||||||
|
- 若存在已知失败项,必须在汇报中标注失败文件、最小复现结果、是否与本次改动相关
|
||||||
|
|
||||||
|
## 标准构建命令(Linux / Clang)
|
||||||
|
|
||||||
|
默认构建目录:`lsp-server/build/clang-linux/Release`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1) 安装依赖(Conan)
|
||||||
|
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/Release \
|
||||||
|
--build=missing
|
||||||
|
|
||||||
|
# 2) 配置(CMake + Ninja)
|
||||||
|
cmake -S lsp-server -B lsp-server/build/clang-linux/Release -G Ninja \
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=$PWD/lsp-server/build/clang-linux/Release/generators/conan_toolchain.cmake \
|
||||||
|
-DBUILD_TESTS=ON
|
||||||
|
|
||||||
|
# 3) 编译
|
||||||
|
cmake --build lsp-server/build/clang-linux/Release
|
||||||
|
```
|
||||||
|
|
||||||
|
常用目标编译:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cmake --build lsp-server/build/clang-linux/Release --target tsl-server
|
||||||
|
cmake --build lsp-server/build/clang-linux/Release --target test_ast
|
||||||
|
```
|
||||||
|
|
||||||
|
## Git 提交规则
|
||||||
|
|
||||||
|
- 提交首行必须使用 `:emoji: type(scope): subject` 格式
|
||||||
|
- `emoji` 与 `type` 映射以 `docs/standards/playbook/docs/common/commit_message.md` 为准
|
||||||
|
- `subject` 使用英文(建议现在时/祈使句,不加句号)
|
||||||
|
- 不允许中文提交标题;中文说明放在 commit body
|
||||||
|
|
||||||
|
## 紧急处理
|
||||||
|
|
||||||
|
- 构建/测试环境异常(例如 Conan 缓存、CMake 缓存、路径映射问题)优先记录可复现命令与原始报错
|
||||||
|
- 若遇到跨环境阻塞,按 `AGENT_RULES.md` 的 `blocked: env:<环境>:<Task列表>` 规范记录并继续主循环
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**最后更新**:2026-03-05
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
[requires]
|
[requires]
|
||||||
glaze/6.4.0
|
glaze/7.0.2
|
||||||
spdlog/1.17.0
|
spdlog/1.17.0
|
||||||
fmt/12.1.0
|
fmt/12.1.0
|
||||||
taskflow/3.10.0
|
taskflow/3.10.0
|
||||||
|
|
|
||||||
|
|
@ -1210,7 +1210,7 @@ export namespace lsp::language::ast
|
||||||
std::string name;
|
std::string name;
|
||||||
std::vector<std::unique_ptr<Parameter>> parameters;
|
std::vector<std::unique_ptr<Parameter>> parameters;
|
||||||
std::optional<TypeAnnotation> return_type;
|
std::optional<TypeAnnotation> return_type;
|
||||||
bool is_overload;
|
bool is_overload = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
class FunctionDefinition : public Statement
|
class FunctionDefinition : public Statement
|
||||||
|
|
@ -1369,7 +1369,7 @@ export namespace lsp::language::ast
|
||||||
void Accept(ASTVisitor& visitor) override { visitor.VisitConditionalBlock(*this); }
|
void Accept(ASTVisitor& visitor) override { visitor.VisitConditionalBlock(*this); }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ConditionalCompilationType type;
|
ConditionalCompilationType type = ConditionalCompilationType::kIfDef;
|
||||||
std::string name;
|
std::string name;
|
||||||
Location location;
|
Location location;
|
||||||
std::vector<StatementPtr> consequence;
|
std::vector<StatementPtr> consequence;
|
||||||
|
|
@ -1383,7 +1383,7 @@ export namespace lsp::language::ast
|
||||||
void Accept(ASTVisitor& visitor) override { visitor.VisitConditionalDirective(*this); }
|
void Accept(ASTVisitor& visitor) override { visitor.VisitConditionalDirective(*this); }
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ConditionalCompilationType type;
|
ConditionalCompilationType type = ConditionalCompilationType::kDefine;
|
||||||
std::string name;
|
std::string name;
|
||||||
Location location;
|
Location location;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -66,6 +66,8 @@ target_compile_options(
|
||||||
$<$<CONFIG:Release>:-O3>)
|
$<$<CONFIG:Release>:-O3>)
|
||||||
|
|
||||||
if(BUILD_TESTS)
|
if(BUILD_TESTS)
|
||||||
|
add_test(NAME test_ast_unit
|
||||||
|
COMMAND $<TARGET_FILE:test_ast> --self-test)
|
||||||
add_test(NAME test_ast_script
|
add_test(NAME test_ast_script
|
||||||
COMMAND ${CMAKE_COMMAND} -E env
|
COMMAND ${CMAKE_COMMAND} -E env
|
||||||
TEST_AST_OVERRIDE=$<TARGET_FILE:test_ast>
|
TEST_AST_OVERRIDE=$<TARGET_FILE:test_ast>
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,17 @@ graph TB
|
||||||
|
|
||||||
subgraph Core["Core"]
|
subgraph Core["Core"]
|
||||||
direction LR
|
direction LR
|
||||||
S["Server"] ~~~ D["Dispatcher"] ~~~ A["AsyncExecutor"]
|
S["Server"] ~~~ D["Dispatcher"]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Scheduler["Scheduler"]
|
||||||
|
direction LR
|
||||||
|
A["AsyncExecutor"]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Codec["Codec"]
|
||||||
|
direction LR
|
||||||
|
C1["Facade"] ~~~ C2["Transformer"]
|
||||||
end
|
end
|
||||||
|
|
||||||
subgraph Provider["Provider"]
|
subgraph Provider["Provider"]
|
||||||
|
|
@ -35,10 +45,13 @@ graph TB
|
||||||
B1["Glaze"] ~~~ B2["Tree-sitter"] ~~~ B3["Taskflow"] ~~~ B4["spdlog"]
|
B1["Glaze"] ~~~ B2["Tree-sitter"] ~~~ B3["Taskflow"] ~~~ B4["spdlog"]
|
||||||
end
|
end
|
||||||
|
|
||||||
Core --> Provider & Manager
|
Core --> Provider & Manager & Scheduler
|
||||||
|
Core --> Codec
|
||||||
Provider --> Manager & Language
|
Provider --> Manager & Language
|
||||||
Manager --> Language & Bridge
|
Manager --> Language & Bridge
|
||||||
Language --> Bridge
|
Language --> Bridge
|
||||||
|
Scheduler --> Bridge
|
||||||
|
Codec --> Bridge
|
||||||
end
|
end
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -52,6 +65,25 @@ graph TB
|
||||||
|
|
||||||
- `src/core/server.cppm` - 服务器主循环,stdio 读写
|
- `src/core/server.cppm` - 服务器主循环,stdio 读写
|
||||||
- `src/core/dispatcher.cppm` - 请求分发器,路由到对应 Provider
|
- `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 - 状态管理
|
### Manager - 状态管理
|
||||||
|
|
||||||
|
|
@ -63,6 +95,7 @@ graph TB
|
||||||
- `src/manager/parser.cppm` - 解析管理,维护语法树缓存
|
- `src/manager/parser.cppm` - 解析管理,维护语法树缓存
|
||||||
- `src/manager/symbol.cppm` - 符号管理,维护符号索引
|
- `src/manager/symbol.cppm` - 符号管理,维护符号索引
|
||||||
- `src/manager/event_bus.cppm` - 事件总线,模块间解耦通信
|
- `src/manager/event_bus.cppm` - 事件总线,模块间解耦通信
|
||||||
|
- `src/manager/events.cppm` - 事件类型定义
|
||||||
- `src/manager/manager_hub.cppm` - 管理器集线器,统一访问入口
|
- `src/manager/manager_hub.cppm` - 管理器集线器,统一访问入口
|
||||||
|
|
||||||
### Provider - LSP 功能提供者
|
### Provider - LSP 功能提供者
|
||||||
|
|
@ -80,6 +113,10 @@ graph TB
|
||||||
- `src/provider/call_hierarchy/` - 调用层次
|
- `src/provider/call_hierarchy/` - 调用层次
|
||||||
- `src/provider/type_hierarchy/` - 类型层次
|
- `src/provider/type_hierarchy/` - 类型层次
|
||||||
- `src/provider/workspace_symbol/` - 工作区符号搜索
|
- `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 - 语言分析
|
### Language - 语言分析
|
||||||
|
|
||||||
|
|
@ -149,4 +186,4 @@ graph TB
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**最后更新**:2026-02-02
|
**最后更新**:2026-03-04
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue