Skip to content

Commit 26283ea

Browse files
authored
mcpp-vscode 0.6.0: 侧边栏重组、库生态、缓存视图与仓库工程化 (#17)
0.5.0 基座(注册表单一事实源、纯模块门禁、设置面板、build.mcpp/mcpp.toml 智能、双语)与 0.6.0 侧边栏重组(工程/库生态/缓存三视图、C++ Modules 折叠入工程视图、快捷菜单彩色图标)+ 23 轮作者实测反馈修复 + 外部深度评审修复(工作区信任收口 runMcpp、Windows 参数引号、WebviewDocument 渲染骨架)+ 双市场发布流水线(Open VSX 必发、Marketplace 机会发布)+ README/目录工程化与死代码清理。669 单测,CI 三平台 11/11 绿。
1 parent 20f1076 commit 26283ea

261 files changed

Lines changed: 43202 additions & 2336 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.agents/docs/README.md‎

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# .agents/docs
2+
3+
本目录存放 **面向贡献者与 agent 的设计/背景文档**:对 mcpp-vscode 当前架构、跨仓库契约
4+
与决策的记录。使用说明请看仓库根目录的 `README.md`。
5+
6+
| 文件 | 内容 | 状态 |
7+
| --- | --- | --- |
8+
| [`architecture.md`](architecture.md) | mcpp-vscode 的分层结构、模块职责与扩展点 | 现状 |
9+
| [`mcpp-integration.md`](mcpp-integration.md) | 与 `mcpp-community/mcpp`(mcpp CLI)的接口契约 | 现状 |
10+
| [`mcppls-integration.md`](mcppls-integration.md) | 与 `sunrisepeak.mcpp-language-server`(mcppls)的依赖与命令桥接契约 | 现状 |
11+
12+
13+
边界:
14+
15+
- `docs/`(仓库根)= **用户文档**(安装、命令、设置、排错);
16+
- `.agents/docs/` = **贡献者/agent 文档**(设计、契约、方案、决策);
17+
- `.agents/superpowers/` = **过程文档**(原 `docs/superpowers/`,plans/specs);
18+
- `.agents/reviews/` = **分析与评审记录**,已加入 `.gitignore`,不进入版本库。
19+
20+
背景分析见 `.agents/reviews/2026-10-02-mcpp-vscode-architecture-and-mcppls-dependency-review.md`。
21+
22+
## archive/
23+
24+
`archive/` 存放**已按其执行完毕**的方案文档(round 制的评审与决定记录),按日期命名。
25+
当前实现与其偏差以代码与 CHANGELOG 为准:
26+
27+
| 文档 | 内容 |
28+
| --- | --- |
29+
| [`archive/2026-10-02-implementation-plan.md`](archive/2026-10-02-implementation-plan.md) | 0.5.0 基座实施(纯模块、注册表、门禁) |
30+
| [`archive/2026-10-02-plugin-optimisation-plan.md`](archive/2026-10-02-plugin-optimisation-plan.md) | 插件优化方案 v4(侧边栏、编辑体验、缓存、i18n、配置面板) |
31+
| [`archive/2026-10-02-ui-ux-optimisation-plan.md`](archive/2026-10-02-ui-ux-optimisation-plan.md) | 0.6.0 UI/UX 方案与 23 轮作者反馈记录 |
32+
| [`archive/2026-10-03-repo-engineering-plan.md`](archive/2026-10-03-repo-engineering-plan.md) | 仓库工程化(双市场发布、WebviewDocument、目录收敛) |

‎.agents/docs/architecture.md‎

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# mcpp-vscode 架构
2+
3+
> 状态:0.4.0(mcppls 语言服务迁移之后)。本文记录**当前**结构;变动请同步更新。
4+
5+
## 1. 一句话定位
6+
7+
mcpp-vscode 是 **mcpp CLI 的 IDE 前端**:工程发现、任务(build/run/test/clean)、工具链管理、
8+
`mcpp.toml` 的语法与结构补全。C++ 模块语义(诊断/补全/跳转/引用/模块图/状态)由扩展依赖
9+
`sunrisepeak.mcpp-language-server`(mcppls)提供,本扩展**不创建 LSP 客户端**。
10+
11+
## 2. 分层
12+
13+
```
14+
extension.ts VS Code 装配层:激活、命令注册、provider 注册、资源释放
15+
├── cliController.ts CLI 编排层:快捷菜单、任务、工具链、新工程、操作互斥
16+
│ ├── newProject.ts 新建工程流程(纯函数 + 注入的动作)
17+
│ └── commands.ts 命令 ID 与快捷菜单清单(纯数据)
18+
├── languageServer.ts mcppls 桥接层:只调用 4 个公开 VS Code 命令
19+
├── moduleSetup.ts 一键流程状态机(build → 刷新语言服务)
20+
├── inProject.ts `mcpp.inProject` 上下文键
21+
├── mcppTomlCompletion.ts mcpp.toml 补全查询层(段头 + 写法模板)
22+
├── mcppTomlParser.ts 容错 TOML 解析器(纯函数)
23+
├── discovery.ts 最近的 mcpp.toml 发现(纯函数)
24+
├── cli.ts mcpp CLI 输出解析(工具链清单)
25+
├── process.ts runProcess 封装
26+
└── tasks.ts 任务计划、退出码分类、操作注册表(纯函数)
27+
```
28+
29+
**约束**:`tasks.ts` / `moduleSetup.ts` / `discovery.ts` / `cli.ts` / `mcppTomlParser.ts` /
30+
`newProject.ts` 不 import `vscode`,因此可用 `node --test` 直接测。`extension.ts` 与
31+
`cliController.ts` 是唯一接触 VS Code API 的地方。
32+
33+
## 3. 运行时边界
34+
35+
| 触发 | 行为 |
36+
| --- | --- |
37+
| 打开含 `mcpp.toml` 的工作区 | 激活;不执行 `mcpp`,不下载工具链 |
38+
| 执行 mcpp 命令 | 通过 `vscode.Task` + `ProcessExecution` 在专用终端运行 |
39+
| build 结束(含失败) | 调用一次 `mcppls.restartServer`(单飞,取消除外) |
40+
| run/test/clean 结束 | 不触碰语言服务 |
41+
| 未受信任工作区 | 只保留语法高亮与 TOML 结构补全 |
42+
43+
## 4. 并发模型
44+
45+
`McppOperationRegistry`(`tasks.ts`)做两级互斥:
46+
47+
- **项目级**(键 = 工程根):build/run/test/clean 互斥;
48+
- **全局**:工具链安装 / 设置全局默认,与所有项目级操作互斥。
49+
50+
任务结束**先释放锁、再刷新语言服务**,避免刷新期间用户操作被拒。该顺序由
51+
`test/artifacts.test.ts` 钉住。
52+
53+
## 5. 与 mcppls 的唯一接口
54+
55+
`languageServer.ts` 是全部耦合面:
56+
57+
| 本扩展命令 | 转发到 |
58+
| --- | --- |
59+
| `mcpp.configureLanguageServer`(+ 弃用别名 `mcpp.configureClangd`) | `mcppls.selectContext` |
60+
| `mcpp.checkModuleSupport` | `mcppls.restartServer` |
61+
| `mcpp.showModuleGraph` | `mcppls.showModuleGraph` |
62+
| `mcpp.showLanguageServerLogs` | `mcppls.showLogs` |
63+
| build 之后 | `mcppls.restartServer` |
64+
65+
不读 `mcppls.*` 设置、不解析 LSP、不写跨扩展配置。详见
66+
[`mcppls-integration.md`](mcppls-integration.md)。
67+
68+
## 6. 已知的结构性债务
69+
70+
- `src/configureOnly.ts`、`src/ideWorkflow.ts` 在 0.4.0 迁移后已无生产调用者(仅被自身测试引用),
71+
它们描述的是 `compile_commands.json` 时代的行为,与当前职责边界冲突。
72+
- `cli.ts` 用正则解析 `mcpp toolchain list` 的**人类输出**,而 mcpp 已提供
73+
`--format json` 的稳定契约。
74+
- 命令 ID `mcpp.refreshCompilationDatabase` / `mcpp.checkModuleSupport` 是历史拼写,与当前语义
75+
(build / restart)不符。
76+
77+
具体建议见 `.agents/reviews/` 下的评审报告。

0 commit comments

Comments
 (0)