SKILL.md
readonly只读
name
fix-errors
description
修复 warp Rust 代码库中的编译错误、lint 问题和测试失败。涵盖预提交检查、WASM 特定错误以及运行特定测试。当用户遇到构建错误、clippy 或 fmt 失败、测试失败,或者需要在 PR 前运行或解释预提交时使用。
fix-errors
修复 warp Rust 代码库中的编译错误、lint 问题和测试失败。
概述
此技能帮助解决开发过程中遇到的常见问题,包括:
- 编译错误(未使用的导入、类型不匹配等)
- Lint 失败(clippy 警告)
- 格式违规
- WASM 特定错误
- 测试失败
在打开或更新拉取请求之前,所有预提交检查必须通过。
预提交检查
一次性运行所有预提交检查:
./script/presubmit
这将运行格式化、lint 和所有测试。如果通过,你就可以打开 PR 了。
单独检查
在调试特定问题时单独运行检查:
Rust 格式化:
cargo fmt -- --check
Clippy(整个工作空间):
cargo clippy --workspace --exclude warp_completer --all-targets --all-features --tests -- -D warnings
cargo clippy -p warp_completer --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
文档测试:
cargo test --doc
运行特定测试
单个包:
cargo nextest run -p <package_name>
按测试名称过滤:
cargo nextest run -E 'test(<substring>)'
特定包并过滤:
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 语句:
- 添加新的匹配分支并适当处理
- 镜像类似变体的实现模式
错误的 trait 实现
修复返回错误类型或不满足 trait 约束的 trait 实现。
WASM 特定错误
WASM 构建(wasm32-unknown-unknown 目标)不支持文件系统操作。使用文件系统 API 的代码必须通过 local_fs 特性标志进行门控。
常见的 WASM 错误:
- 仅在非 WASM 构建中使用的代码的死代码警告
- 仅在
local_fs可用时才相关的未使用代码 - 需要文件系统访问的测试
修复:
将测试门控在 local_fs 之后:
#[test]
#[cfg(feature = "local_fs")]
fn test_find_git_repo_with_worktree() {
// 使用文件系统操作的测试
}
对仅在启用 local_fs 时使用的类型有条件地允许死代码:
#[cfg_attr(not(feature = "local_fs"), allow(dead_code))]
#[derive(Clone, EnumDiscriminants, Serialize)]
pub enum ExampleType {
// 仅在启用 local_fs 时使用的变体
Variant1,
Variant2,
Variant3,
}
WASM 错误通过运行以下命令发现:
cargo clippy --target wasm32-unknown-unknown --profile release-wasm-debug_assertions --no-deps
最佳实践
修复前:
- 阅读完整的错误消息以理解根本原因
- 检查多个错误是否相关(修复一个可能解决其他错误)
- 对于 trait/类型错误,确认你理解了期望类型与实际类型
- 对于 WASM 错误,检查代码是否需要门控在
local_fs之后
修复时:
- 当有多个问题时,一次修复一种错误类型
- 经常运行
cargo check以验证修复 - 对于 WASM 错误,运行 WASM clippy 以验证修复
- 对于复杂更改,修复后运行相关测试
修复后:
- 在推送前始终运行
cargo fmt和cargo clippy - 在打开或更新 PR 前运行完整的预提交脚本。使用
create-pr技能获取更详细的说明 - 验证你修改区域的测试通过






