研发协作
在 warp Rust 代码库中遇到编译错误…
当在 warp Rust 代码库遇到构建错误、Clippy 或 fmt 失败、测试失败,或需要在 PR 前运行/解读 presubmit 时使用。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
在 warp Rust 代码库中遇到编译特定
解决思路
- 用最窄的有用命令修复报告的具体失败,不要把针对性修复变成反复的全工作区验证。
- 仅当用户、任务或已批准的 spec 明确要求完整 presubmit 时,运行 `./script/presubmit`;它会运行格式检查、lint 和所有测试,比默认实现工作流更广、更昂贵。
- 调试具体问题时,分开运行单项检查。
- Rust 格式检查:`cargo fmt -- --check`。
- Clippy(全工作区):`cargo clippy --workspace --all-targets --tests -- -D warnings`。
- WASM Clippy:`cargo clippy --target wasm32-unknown-unknown --profile release-wasm-debug_assertions --no-deps`。
- Objective-C/C/C++ 格式检查:`./script/run-clang-format.py -r --extensions 'c,h,cpp,m' ./crates/warpui/src/ ./app/src/`。
- 所有测试:`cargo nextest run --no-fail-fast --workspace --exclude command-signatures-v2`。
- 所有测试补充:`cargo nextest run -p warp_completer --features v2`。
- Doc tests:`cargo test --doc`。
- 单个 package 测试:`cargo nextest run -p <package_name>`。
- 按测试名过滤:`cargo nextest run -E 'test(<substring>)'`。
- 特定 package 带过滤:`cargo nextest run -p <package_name> -E 'test(<substring>)'`。
- 带输出(不捕获):`cargo nextest run -p <package> --nocapture`。
- 未使用导入:删除编译器指出的未使用 `use` 语句。
- 未使用常量:删除已定义但从未使用的常量。
- 未知导入:为未定义类型添加正确的 `use` 语句;搜索代码库找到正确模块路径。
- 类型不匹配:更新函数调用,传入正确类型的参数。
- 类型不匹配常见修复:期望 `&str` 时,用 `.as_str()` 代替 `.clone()`。
- 类型不匹配常见修复:需要引用时用 `&value`。
- 类型不匹配常见修复:期望 `String` 但提供的是 `&str` 时用 `.to_string()`。
- 结构体字段变化:当结构体增加或移除字段时,更新所有构造或解构该结构体的位置。
- 结构体字段变化位置:结构体初始化。
- 结构体字段变化位置:模式匹配(`match`、`if let`)。
- 结构体字段变化位置:解构赋值。
- 函数签名变化:当函数新增参数时,更新所有调用点以提供新参数。
- 函数签名变化:对 `bool` 参数,根据上下文传 `true` 或 `false`。
- 函数签名变化:对 `Option<T>` 参数,默认传 `None`,需要时传 `Some(value)`。
- 枚举变体变化:当新增枚举变体时,更新穷尽式 `match` 语句。
- 枚举变体变化:添加新的 match 分支并做适当处理。
- 枚举变体变化:模仿相似变体的实现模式。
- 错误的 trait 实现:修复返回错误类型或不满足 trait bound 的 trait 实现。
- WASM 特定错误:WASM 构建(`wasm32-unknown-unknown` target)不支持文件系统操作;使用文件系统 API 的代码必须用 `local_fs` feature flag 门控。
- WASM 常见错误:仅用于非 WASM 构建的代码出现 dead code 警告。
- WASM 常见错误:仅在 `local_fs` 可用时才相关的未使用代码。
- WASM 常见错误:需要文件系统访问的测试。
- WASM 修复:把测试门控在 `local_fs` 后,用 `#[test]` 和 `#[cfg(feature = "local_fs")]` 修饰测试函数。
- WASM 修复:对仅在启用 `local_fs` 时使用的类型,条件性允许 dead code,使用 `#[cfg_attr(not(feature = "local_fs"), allow(dead_code))]`。
- 通过运行 `cargo clippy --target wasm32-unknown-unknown --profile release-wasm-debug_assertions --no-deps` 发现 WASM 错误。
- 修复前:阅读完整错误消息以理解根因。
- 修复前:检查多个错误是否相关,修复一个可能解决其他错误。
- 修复前:对 trait/type 错误,确认期望类型与实际类型。
- 修复前:对 WASM 错误,检查代码是否需要门控在 `local_fs` 后。
- 修复时:有多个问题时,一次修复一种错误类型。
- 修复时:当有助于解决编译器错误时,运行最小的适用 `cargo check`;没有相关代码变更时不要重复广泛检查。
- 修复时:对 WASM 错误,运行 WASM clippy 验证修复。
- 修复时:对复杂变更,修复后运行相关测试。
- 修复后:运行相关的 `cargo nextest` 测试,并修复代码直到通过。
- 修复后:运行适用的 Clippy 调用并修复发现的问题;只有修复实质性改变行为时,才返回受影响的测试。
- 修复后:所有其他代码变更完成后,运行一次 `./script/format`。
- 修复后:格式化后不要重跑测试或 Clippy,也不要添加完整 presubmit 运行,除非明确要求。
- 修复后:如果只修复格式失败且没有行为代码变更,只重跑 formatter。
适用边界 · 注意事项
- 不要在没有相关代码变更时重复运行全工作区检查或完整 presubmit;完整 presubmit 仅在明确要求时使用。
- 不要把所有针对性修复升级为反复的全工作区验证;格式化后不要重跑测试或 Clippy,除非明确要求。
- 如果只是修复格式失败且没有行为变更,不要重跑测试或 Clippy,只重跑格式化。