本文档提供了在TheFuck中创建新纠正规则的分步指南。规则是决定如何匹配和纠正错误命令的核心机制。有关现有规则以及如何配置它们的更多信息,请参阅规则系统和自定义规则。
TheFuck中的规则是Python模块,它们定义了如何识别命令错误并提供纠正。每个规则至少包含两个函数:
match(command) - 确定规则是否适用于给定命令get_new_command(command) - 生成一个或多个已纠正的命令来源:thefuck/types.py85-168 thefuck/corrector.py8-19 thefuck/rules/sudo.py31-47
每个规则模块必须实现:
| 组件 | 类型 | 描述 |
|---|---|---|
match | 功能 | 接受一个Command对象,如果规则适用,则返回True |
get_new_command | 功能 | 接受一个Command对象,并返回一个纠正后的命令或命令列表 |
可选组件包括:
| 组件 | 类型 | 默认 | 描述 |
|---|---|---|---|
enabled_by_default | 布尔值 | True | 规则是否在没有显式配置的情况下启用 |
priority | 整型 | DEFAULT_PRIORITY | 规则的优先级级别(数字越大,越先执行) |
requires_output | 布尔值 | True | 规则是否需要命令输出才能工作 |
side_effect | 功能 | None | 执行纠正后的命令时运行的函数 |
来源:thefuck/types.py85-168 thefuck/corrector.py41-49 thefuck/rules/sudo.py31-47
传递给规则函数的Command对象包含:
| 属性 | 描述 |
|---|---|
script | 已执行命令的文本 |
output | 命令的输出(stdout + stderr) |
script_parts | 已拆分成组件的命令 |
来源:thefuck/types.py12-82 thefuck/types.py85-168
最简单的规则只需要两个函数。这是一个最小的规则结构:
让我们以sudo规则为例。该规则检测权限错误,并在命令前添加sudo。
match函数检查命令输出是否包含指示权限问题的模式。get_new_command函数将sudo添加到命令中。来源:thefuck/rules/sudo.py31-47 tests/rules/test_sudo.py6-34
规则不需要显式注册。TheFuck 会自动从三个位置发现规则:
thefuck/rules/中的捆绑规则~/.thefuck/rules/中的用户定义的规则thefuck_contrib_*的Python包中的第三方规则来源:thefuck/corrector.py22-37 thefuck/corrector.py40-49
规则可以通过从get_new_command返回一个列表来建议多个纠正。
这些纠正将按优先级顺序显示。
来源:thefuck/types.py185-198 tests/test_types.py102-113
规则可使用几个有用的装饰器:
@sudo_support - 使规则能够处理以sudo为前缀的命令@for_app('app_name') - 使规则仅适用于特定应用程序来自hostscli.py的示例
来源:thefuck/rules/hostscli.py9-16 tests/rules/test_hostscli.py17-20
您可以通过设置priority属性来控制规则的尝试顺序。
默认优先级在DEFAULT_PRIORITY中定义。
来源:thefuck/types.py147-152 tests/test_types.py54-67
TheFuck使用pytest进行测试。规则测试应同时验证match和get_new_command函数。
规则的测试通常会:
match函数get_new_command函数针对sudo规则的示例测试
来源:tests/rules/test_sudo.py6-34 tests/conftest.py21-73
测试工具提供了一些辅助类用于测试:
Command - 创建用于测试的命令Rule - 用于测试的简化规则创建来源: tests/utils.py5-21 tests/test_corrector.py51-61
来源: thefuck/corrector.py81-92 thefuck/types.py185-198
遵循这些指南,您可以创建有效的纠正规则,从而增强 TheFuck 的命令纠正能力。