用于翻新和现代化Python代码库的工具。
# main.py
for filename in ["file1.txt", "file2.txt"]:
with open(filename) as f:
contents = f.read()
lines = contents.splitlines()
for line in lines:
if not line or line.startswith("# ") or line.startswith("// "):
continue
for word in line.split():
print(f"[{word}]", end="")
print("")
运行:
$ refurb main.py main.py:3:17 [FURB109]: Use `in (x, y, z)` instead of `in [x, y, z]` main.py:4:5 [FURB101]: Use `y = Path(x).read_text()` instead of `with open(x, ...) as f: y = f.read()` main.py:10:40 [FURB102]: Replace `x.startswith(y) or x.startswith(z)` with `x.startswith((y, z))` main.py:16:9 [FURB105]: Use `print() instead of `print("")`
在安装之前,建议你设置一个虚拟环境。
$ pip3 install refurb $ refurb file.py folder/
注意:翻新仅支持蟒蛇 3.10。它可以检查Python 3.6代码及更高版本,但Refurb本身必须通过Python 3.10运行。
你可以使用 ,其中 是你尝试查找的错误代码。例如:
refurb --explain FURB123
FURB123
$ refurb --explain FURB123 Don't cast a variable or literal if it is already of that type. For example: Bad: ``` name = str("bob") num = int(123) ``` Good: ``` name = "bob" num = 123 ```
用于忽略错误 123。错误代码可以采用 或 的形式。此标志可以重复。
--ignore 123
FURB123
123
前缀表示这是一个内置错误。前缀是可选的,但对于所有其他错误(即 ),前缀是必需的。
FURBFURBABC123
你还可以使用内联注释来禁用错误:
x = int(0) # noqa: FURB123 y = list() # noqa
此处,专门忽略该行的 FURB123 错误,并忽略该行上的所有错误。
noqa: FURB123
noqa
除了命令行参数之外,还可以在文件中添加设置。例如,以下命令行参数:
pyproject.toml
refurb file.py --ignore 100 --load some_module --quiet
对应于文件中的以下内容:
pyproject.toml
[tool.refurb]
ignore = [100]
load = ["some_module"]
quiet = true
现在,你需要键入的就是 !提供命令行参数将覆盖配置文件中的任何现有设置。
refurb file.py
pre-commit
你可以通过将以下内容添加到文件中来将 Refurb 与预提交结合使用:
.pre-commit-config.yaml
- repo: https://github.com/dosisod/refurb
rev: REVISION
hooks:
- id: refurb
替换为你选择的版本或 SHA(或将其留空以查找最新的版本或 SHA)。
REVISION
pre-commit
为翻新安装插件非常容易:
$ pip3 install refurb-plugin-example
其中 是插件的名称。翻新将自动加载任何已安装的插件。
refurb-plugin-example
要制作自己的翻新插件,请参阅翻新插件示例存储库
以获取更多信息。
如果你想扩展Refub,但不想做一个完整的插件,你可以用命令轻松创建一个一次性的检查文件。
refurb gen
请注意,此命令使用模糊查找器来获取用户输入,因此你需要先安装 fzf,然后再继续。
fzf
以下是使用命令创建新检查的基本概述:
refurb gen
要了解需要添加到检查中的内容,请使用该标志查看给定文件的 AST 表示形式(即 )。查看文件夹中的文件以获取一些示例。
--debug
refurb --debug file.py
refurb/checks/
然后,要加载新支票,请使用
refurb file.py --load your.path.here
请注意,使用 时,你需要在参数中使用点,就像导入普通的 python 模块一样。
--load
要在本地设置,请运行:
$ git clone https://github.com/dosisod/refurb $ cd refurb $ make install $ make install-local
可以使用 一次性运行所有测试,也可以使用 、 等单独运行每个工具。
make
make black
make flake8
可以使用 或 运行单元测试。
pytest
make test
由于端到端 (e2e) 测试速度很慢,因此在运行时不会运行它们。你需要运行它们才能运行它们。
makemake test-e2e
我喜欢做代码审查:我喜欢做一些东西,让它变得更好,更快,更优雅,等等。许多静态分析工具已经存在,但它们似乎都没有一个专注于使代码更优雅,更具可读性或更现代。这就是翻新的用武之地。
翻新的灵感来自 clippy,这是 Rust 的内置棉绒。
翻新不是样式/类型检查器。它不是作为检查和查找错误的第一道防线,而是为了让好的代码变得更好。