## 背景 当前 `codex/fix-clangd-cdb-build-script` 分支基于 mcpp-community/mcpp#372 的旧方案,实现了: ```text mcpp ide configure --format ndjson ``` 但上游已经在 mcpp-community/mcpp#379 中确认拆分方案:mcpp-community/mcpp#372 转为 Draft,仅保留为设计和代码参考;扩展实际依赖改为独立 A 类能力: ```text mcpp build --configure-only ``` A 类实现只负责生成 IDE 所需构建图与 CDB,包括 tests/dev-dependency 上下文、必要的 std/BMI 准备和原子 CDB 写入;不携带 JSON/NDJSON、snapshot、FileLock/current.json 或通用 wire 协议。 参考: - mcpp-community/mcpp#372 - mcpp-community/mcpp#379 - mcpp-community/mcpp#379 的拆分确认:https://github.com/mcpp-community/mcpp/issues/379#issuecomment-5224590795 ## 当前状态 - 旧实现分支:`codex/fix-clangd-cdb-build-script` - 当前实现仍绑定 `ide configure --format ndjson`,需要迁移,不能按现状发布 - mcpp-community/mcpp#372:Draft - 独立 `build --configure-only` PR:尚未创建 - mcpp-vscode 当前版本目标 `0.2.6` 仅为暂定值,最终版本取决于期间是否已有其他发布 - 分支上的既有 IDE 流程测试可作为生命周期参考,但 NDJSON/snapshot 协议代码不再保留 ## 已确定的客户端契约 1. 扩展只在受信任工作区执行 `mcpp build --configure-only`。 2. 不解析 stdout 人类文本,也不依赖 JSON/NDJSON envelope。 3. 成功判据为: - 命令退出码为 0; - 工程根目录的 `compile_commands.json` 存在; - CDB 可被扩展正常解析。 4. 失败或旧版 mcpp 不支持该选项时给出明确诊断,并保留已有可用 CDB。 5. “mcpp: 刷新编译数据库”复用该命令,不再新增语义重复的 `mcpp.configureIde`。 6. mcpp-community/mcpp-vscode#3 的新建工程契约保持“创建并打开”,新窗口再按自身 workspace trust 和缺失 CDB 状态触发 configure-only,不自动执行完整 build。 ## 迁移工作 - [ ] 跟踪独立 `build --configure-only` PR、合入状态和首个可安装版本。 - [ ] 上游命令发布后,将分支 rebase 到最新 mcpp-vscode `main`。 - [ ] 删除 NDJSON/snapshot 解析层,改为普通进程退出码 + CDB 后置校验。 - [ ] 复用现有“刷新编译数据库”命令和快捷菜单入口,移除重复命令。 - [ ] 将 configure-only 纳入项目操作锁,避免与 build/run/test 并发。 - [ ] manifest watcher 按事件 URI 标记对应工程,修正 multi-root 下刷新当前错误工程的问题。 - [ ] `mcpp.path` 变化触发对应工程重新配置;`mcpp.clangd.path`、`mcpp.modulesSupport` 只重协调 clangd,不重复生成 CDB。 - [ ] 完整 build/test 成功后只重读 CDB 和重协调 clangd,避免无意重复 configure-only。 - [ ] 使用正式发布的 mcpp 做缺失 CDB、源码编译失败、tests/dev-dependency、旧 CDB 保留和多根工作区集成测试。 - [ ] 根据届时主线版本确定扩展版本号,运行 `npm test`、VSIX 打包与归档校验。 ## 验收标准 - 缺少 CDB 的受信任工程可通过正式发布的 `mcpp build --configure-only` 获取有效 CDB。 - CDB 包含普通源码以及 tests/dev-dependency 所需条目。 - 旧版 mcpp 或 configure-only 失败时诊断清晰,已有 CDB 不被破坏。 - manifest、`mcpp.path` 和 multi-root 工程切换只刷新正确工程。 - configure-only 与其他 mcpp 项目操作不会并发。 - 新建工程不会自动执行完整 build,也不会重复执行 configure-only。 - 发布版本的测试、VSIX 校验和真实 CLI 集成测试全部通过。
背景
当前
codex/fix-clangd-cdb-build-script分支基于 mcpp-community/mcpp#372 的旧方案,实现了:但上游已经在 mcpp-community/mcpp#379 中确认拆分方案:mcpp-community/mcpp#372 转为 Draft,仅保留为设计和代码参考;扩展实际依赖改为独立 A 类能力:
A 类实现只负责生成 IDE 所需构建图与 CDB,包括 tests/dev-dependency 上下文、必要的 std/BMI 准备和原子 CDB 写入;不携带 JSON/NDJSON、snapshot、FileLock/current.json 或通用 wire 协议。
参考:
当前状态
codex/fix-clangd-cdb-build-scriptide configure --format ndjson,需要迁移,不能按现状发布build --configure-onlyPR:尚未创建0.2.6仅为暂定值,最终版本取决于期间是否已有其他发布已确定的客户端契约
mcpp build --configure-only。compile_commands.json存在;mcpp.configureIde。迁移工作
build --configure-onlyPR、合入状态和首个可安装版本。main。mcpp.path变化触发对应工程重新配置;mcpp.clangd.path、mcpp.modulesSupport只重协调 clangd,不重复生成 CDB。npm test、VSIX 打包与归档校验。验收标准
mcpp build --configure-only获取有效 CDB。mcpp.path和 multi-root 工程切换只刷新正确工程。