fix-errors

fix-errors

热门

修复 warp Rust 代码库中的编译错误、lint 问题和测试失败。涵盖预提交检查、WASM 特定错误以及运行特定测试。当用户遇到构建错误、clippy 或 fmt 失败、测试失败,或者需要在 PR 前运行或解释预提交时使用。

124Star
0Fork
更新于 2026/7/10
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()

结构体字段变更

当结构体添加/移除字段时,更新所有构造或解构它的地方:

  • 结构体初始化
  • 模式匹配(matchif let
  • 解构赋值

函数签名变更

当函数添加新参数时,更新所有调用点以提供新参数:

  • 对于 bool 参数:根据上下文传递 truefalse
  • 对于 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 fmtcargo clippy
  • 在打开或更新 PR 前运行完整的预提交脚本。使用 create-pr 技能获取更详细的说明
  • 验证你修改区域的测试通过