DEBUG.WIKI
OnlineSIM:在线接收短信,虚拟号码租用
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →
野草云;香港 200Mbps 峰值;不限月流量 · BGP VPS;查看套餐 →

cargo metadata 少了工作区成员:检查默认成员与调用目录

在工作区成员目录运行 cargo metadata 时,workspace_default_members 可能只有当前包。工具若要遍历全工作区,应使用 workspace_members。

在虚拟工作区根运行 cargo metadata 能看到多个默认成员,切到某个成员目录后,workspace_default_members 却只剩当前包。若质量检查工具只遍历这个数组,就可能悄悄漏掉其他包。

Cargo 1.94.0 有这个明确表现:该字段反映的是调用上下文下的默认成员,不应直接当成根清单的 [workspace] default-members 原样导出,更不能当成所有工作区成员。

先确定工具到底要检查哪些包

元数据中三个字段承担不同职责:packages 提供包信息,workspace_members 标识整个工作区的成员,workspace_default_members 是默认选择的成员。数组中的值是包 ID,应与 packages 的 id 关联,不要根据字符串末尾猜包名。

如果工具承诺检查整个工作区,应使用 workspace_members。如果工具要模拟当前目录执行 Cargo 的默认选择,则保留 workspace_default_members 的语义。两种用途不能共用一个“成员列表”变量后假定完全相同。

固定根清单与工作目录

需要读取根级默认选择时,让调用入口先切到已确认的工作区根。例如 Unix shell:

(cd /path/to/workspace && cargo metadata --format-version 1 --no-deps)

/path/to/workspace 是实际根目录占位值,需替换。子 shell 不改变外层终端目录,&& 保证切换失败后不在其他目录继续运行。--no-deps 省略依赖包展开,适合只读取本地工作区成员的工具;依赖图分析不能照抄这个选项。

若工具使用 --manifest-path,应明确指向根清单,不能仍指向当前成员的 Cargo.toml;同时固定调用位置,避免配置发现方式随启动目录改变。

非虚拟工作区还有根包,默认成员也不必然等于所有成员。若要设计明确的默认范围,可以在根清单设置 default-members,但这会影响根目录执行构建、测试等命令的默认选择,应作为项目行为变更评估,不能只为一段解析脚本顺手改掉。

验证时从根目录和至少一个成员目录读取同一工作区,比较 workspace_members 与默认选择,并检查工具实际处理的包名。验收标准是没有漏检承诺范围内的包,而不是两个数组强行变成相同内容。