一个用于字母排序导入和 __all__ 的 Python 代码风格检查器。
项目描述
Alphabetize 是一个 Flake8 插件,用于检查 import 语句的顺序、__all__ 列表和 except 列表。它旨在与 Black 格式化工具良好地配合使用,因为 Black 从不更改 抽象语法树 (AST),而 Alphabetize 仅对 AST 感兴趣,因此这两个工具永远不会冲突。在 Black 精神下,Alphabetize 是一个“严格的导入风格检查器”,因为样式不能配置,只有一个样式(见下文中的规则)。
Alphabetise 在 MIT-0 许可证 下发布。它在 Python 3.7+ 上进行了测试。
安装
创建虚拟环境: python3 -m venv venv
激活它: source venv/bin/activate
安装: pip install flake8-alphabetize
示例
假设我们有一个 Python 文件 myfile.py
from datetime import time, date
print(time(9, 39), date(2021, 4, 11))
通过运行命令 flake8,我们将得到以下结果
myfile.py:1:1: AZ200 Imported names are in the wrong order. Should be date, time
我们可以告诉 Alphabetize 包名是什么,然后它就会知道其导入应该位于导入列表的底部。以下是一个示例
import uuid
from myapp import myfunc
print(uuid.UUID4(), myfunc())
通过运行命令 flake8 --application-names myapp,我们将不会得到任何错误。
使用
正如您以正常方式使用 Flake8,Alphabetize 将使用以下代码报告错误
代码 |
错误类型 |
---|---|
AZ100 |
导入语句的顺序错误 |
AZ200 |
从 import from 的名称顺序错误 |
AZ300 |
必须合并两个 import from 语句。 |
AZ400 |
__all__ 中的名称顺序错误 |
AZ500 |
异常处理程序列表中的名称顺序错误 |
Alphabetize 遵循 Black 格式化器的坚定方法,因此只有一个配置选项,即 application-names。这是一个逗号分隔的顶级包名列表,这些包名被视为应用程序导入,例如‘myapp’。由于 Alphabetize 是 Flake8 插件,此配置选项使用 Flake8 配置 进行设置。
导入排序规则
以下是 Alphabetize 遵循的排序规则
特殊情况 from __future__ import 首先出现。
接下来是标准库导入,然后是第三方导入,最后是应用程序导入。
假设相对导入是应用程序导入。
标准库组中的 import 语句首先(按字母顺序排列),然后是 from import 语句(按字母顺序排列)。
第三方组进一步按库名称分组。然后每个库子组中的 import 语句首先(按字母顺序排列),然后是 from import 语句(按字母顺序排列)。
应用程序组进一步按导入级别分组,绝对导入首先,然后是递增级别的相对导入。在每一级中,导入应按库名称排序。然后每个库子组中的 import 语句首先(按字母顺序排列),然后是 from import 语句(按字母顺序排列)。
同一库的 from import 语句必须合并。
Alphabetize 只查看模块级别的导入,代码中的任何导入都将被忽略。
运行测试
运行 tox 来运行测试。
安装 tox: pip install tox
运行 tox: tox
OpenSSF Scorecard
运行 OpenSSF Scorecard 可能值得。
sudo docker run -e GITHUB_AUTH_TOKEN=<auth_token> gcr.io/openssf/scorecard:stable \ --repo=github.com/tlocke/flake8-alphabetize
发布 Alphabetize
运行 tox 确保所有测试通过,然后更新发行说明,然后执行
git tag -a x.y.z -m "version x.y.z" rm -r dist python -m build twine upload --sign dist/*
发布说明
版本 0.0.21,2023-04-13
修复了在异常列表中的合格名称上崩溃的bug。
版本 0.0.20,2023-04-02
检查 except 处理程序列表的排序。
版本 0.0.19,2022-11-24
使 Alphabetize 与 Flake8 6.0.0 兼容
版本 0.0.18,2022-10-29
修复了在 Python >= 3.10 版本中无法识别子包(例如 collections.abc)作为标准库部分的bug。
版本 0.0.17,2021-11-17
处理 __all__ 是 tuple 的情况。
版本 0.0.16,2021-07-26
如果一行中有多个导入,则不要执行任何导入顺序检查,因为这将由Flake8报告。一旦修复了Flake8错误,就可以继续检查。
版本 0.0.15,2021-06-17
修复了--application-names命令行选项在逗号分隔列表中失败的问题。
版本 0.0.14,2021-04-20
修复了消息中出现from . import logging而实际为from .None import logging的bug。
版本 0.0.13,2021-04-20
修复了在相对导入(如from . import logging)中失败的问题。
版本 0.0.12,2021-04-12
检查__all__中元素的顺序。
版本 0.0.11,2021-04-11
按导入级别排序应用程序导入,绝对导入放在最前面。
版本 0.0.10,2021-04-11
修复了可能因超过2个导入而失败的问题。
版本 0.0.9,2021-04-11
由于选项名称冲突,现在可以通过设置application-names配置选项来识别应用程序导入。
版本 0.0.8,2021-04-11
现在可以通过设置application-package-names配置选项来识别应用程序导入。
版本 0.0.7,2021-04-10
__future__的导入。应始终放在第一位。
版本 0.0.6,2021-04-10
第三方库应按顶级名称分组。
版本 0.0.5,2021-04-10
考虑模块是否在标准库中。
版本 0.0.4,2021-04-10
将入口点改为AZ而不是ALP。
版本 0.0.3,2021-04-10
检查from import语句中的顺序。
版本 0.0.2,2021-04-09
部分支持from import语句。
版本 0.0.1,2021-04-09
现在部分支持import语句。
版本 0.0.0,2021-04-09
首次发布。目前功能有限。
项目详情
下载文件
下载适用于您平台文件的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
构建分布
flake8-alphabetize-0.0.21.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 8dbc66568d13c1c826c30e7ebe34380c0c4e25edfde3dc51bc0484c04c10b029 |
|
MD5 | 494731e7550537298615fdb9d53b6e12 |
|
BLAKE2b-256 | ac661bf33195a89be1682c5410fc03e72311dd34d49b51cbae3e0ddb52955356 |