关于 fix-errors
用于 Warp Rust 开发的技能,可诊断并修复编译、Lint、格式、WASM 和测试失败。它强调针对性修复,除非明确要求,否则不运行范围较大的完整预提交检查。
主要功能
- 01处理 Rust 编译错误
- 02修复 Clippy 和格式问题
- 03处理 WASM 特定故障
- 04运行针对性测试和检查
- 05仅在明确要求时运行完整预提交
适用场景
- 01修复失败的 Rust 构建
- 02排查 Clippy 警告或格式问题
- 03验证特定测试故障
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ warpdotdev/ common-skills --skill fix-errors安装后在 Claude Code 中输入/fix-errors确认已加载。
详细介绍
修复错误
修复 warp Rust 代码库中的编译错误、Lint 问题和测试失败。
概述
此技能可帮助解决开发过程中遇到的常见问题,包括:
- 编译错误(未使用的导入、类型不匹配等)
- Lint 失败(Clippy 警告)
- 格式违规
- WASM 特定错误
- 测试失败
使用范围最小且有效的命令修复已报告的问题。不要将有针对性的修复变成反复进行全工作区验证。
完整预提交检查
仅当用户、任务或已批准的规范明确要求时,才运行完整预提交检查:
./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
文档测试:
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 语句:
- 添加带有适当处理逻辑的新 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() {
// Test that uses filesystem operations
}
对于仅在启用 local_fs 时使用的类型,有条件地允许死代码:
#[cfg_attr(not(feature = "local_fs"), allow(dead_code))]
#[derive(Clone, EnumDiscriminants, Serialize)]
pub enum ExampleType {
// Variants only used when local_fs is enabled
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 nextest测试,并持续修复代码,直到测试通过 - 运行适用的 Clippy 命令并修复其发现的问题;只有在修复实质性地改变行为时,才重新运行受影响的测试
- 完成所有其他代码改动后,运行一次
./script/format - 格式化后不要重新运行测试或 Clippy,也不要添加完整的 presubmit 运行,除非明确要求
- 如果只修复了格式问题且没有改动行为代码,只需重新运行格式化工具