跳转到主要内容

更新Python类型语法

项目描述

Python类型更新

PyPI PyPI - Python Version GitHub image

更新Python类型语法的工具。它使用标记分析和

以尽可能好地更新类型语法。

重要
每个项目都使用不同的格式化风格,因此在提交任何更改之前,请始终检查git diff!由于此工具使用pyupgrade,因此最好用于已使用它的项目。

限制

由于工具的工作方式,它将多次重排导入。默认情况下,工具会尝试检测是否移动了注释,并将所有更改还原到文件中。这可以通过使用--force来覆盖。

目前,无法更新不同名称的别名。特别是,这些需要手动更新

旧类型名称
Deque collections.deque
DefaultDict collections.defaultdict
AbstractSet collections.abc.Set
ContextManager contextlib.AbstractContextManager
AsyncContextMananger contextlib.AbstractAsyncContextManager

工作原理

  1. 运行 python-reorder-import 以将 from __future__ import annotations 添加到每个文件。
  2. 尽可能使用通用别名(PEP 585)和替代联合语法(PEP 604),运行 pyupgrade
  3. 运行 autoflake 检查是否有任何类型导入现在不再使用。如果不是,使用 git restore 撤销更改。
  4. 使用 autoflake 删除未使用的导入。
  5. 运行 isort 尝试恢复之前的格式。
  6. 可选:运行 black。 (需要将 black 添加为 additional_dependency)
  7. 检查 git diff 以查找修改过的注释。如果检测到,则撤销更改并打印文件名。可以用 --force 覆盖。

设置 pre-commit

将此内容添加到 .pre-commit-config.yaml 文件中

repos:
  - repo: https://github.com/cdce8p/python-typing-update
    rev: <insert current tag here!>
    hooks:
      - id: python-typing-update
        stages: [manual]

使用以下命令运行

pre-commit run --hook-stage manual python-typing-update --all-files

配置

--verbose
始终打印详细日志。

--limit
应该更改的最大文件数。由于限制仅在所有文件处理完毕后才应用,因此不会提高性能。

--concurrent-files
在初始加载期间并发处理的文件数。

--full-reorder
使用来自 python-reorder-imports 的附加选项来重写

  • --py38-plus (默认): 当可能时,从 mypy_extensionstyping_extensions 导入。
  • --py39-plus: 重写 PEP 585 类型导入。此外,typing.Hashabletyping.Sized 也将被其 collections.abc 等效项替换。

--keep-updates
即使没有导入被删除,也要保留更新。请谨慎使用,可能会导致更多错误。

--black
更新后运行 black 格式化。
要使用它,请将 black 添加为 additional_dependency 到您的 .pre-commit-config.yaml

        additional_dependencies:
          - black==<insert current version here!>

--disable-committed-check
不要因未提交的更改而中止。 在生产环境中不要使用! 有丢失未提交更改的风险。

不同的模式选项

--check
检查文件是否会被修改。如果没有修改,则返回退出码 10。对于 CI 运行很有用。

--force
如果检测到修改过的注释,则不撤销更改。提交前请检查 git diff

--only-force
仅更新可能需要额外工作的文件。提交前请检查 git diff

Python 版本选项

--py37-plus 将最低 Python 语法版本设置为 3.7。(默认:3.8

--py38-plus
将最低 Python 语法版本设置为 3.8。这是默认值。

--py39-plus
将最低 Python 语法版本设置为 3.9。(默认:3.8

--py310-plus
将最低 Python 语法版本设置为 3.10。(默认:3.8

许可证

此项目受 MIT 许可证许可。有关完整的许可证文本,请参阅 LICENSE

支持