Skip to content

feat: integrate mcpp build --configure-only into clangd workflow #5

Description

@wellwei

背景

当前 codex/fix-clangd-cdb-build-script 分支基于 mcpp-community/mcpp#372 的旧方案,实现了:

mcpp ide configure --format ndjson

但上游已经在 mcpp-community/mcpp#379 中确认拆分方案:mcpp-community/mcpp#372 转为 Draft,仅保留为设计和代码参考;扩展实际依赖改为独立 A 类能力:

mcpp build --configure-only

A 类实现只负责生成 IDE 所需构建图与 CDB,包括 tests/dev-dependency 上下文、必要的 std/BMI 准备和原子 CDB 写入;不携带 JSON/NDJSON、snapshot、FileLock/current.json 或通用 wire 协议。

参考:

当前状态

  • 旧实现分支:codex/fix-clangd-cdb-build-script
  • 当前实现仍绑定 ide configure --format ndjson,需要迁移,不能按现状发布
  • feat(ide): add versioned project snapshots and pre-build CDB 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. feat: add mcpp.newProject command to scaffold and open projects #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.pathmcpp.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 集成测试全部通过。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions