跳至主要内容

一个用于字母排序导入和 __all__ 的 Python 代码风格检查器。

项目描述

Alphabetize 是一个 Flake8 插件,用于检查 import 语句的顺序、__all__ 列表和 except 列表。它旨在与 Black 格式化工具良好地配合使用,因为 Black 从不更改 抽象语法树 (AST),而 Alphabetize 仅对 AST 感兴趣,因此这两个工具永远不会冲突。在 Black 精神下,Alphabetize 是一个“严格的导入风格检查器”,因为样式不能配置,只有一个样式(见下文中的规则)。

Alphabetise 在 MIT-0 许可证 下发布。它在 Python 3.7+ 上进行了测试。

Build Status

安装

  1. 创建虚拟环境: python3 -m venv venv

  2. 激活它: source venv/bin/activate

  1. 安装: 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 遵循的排序规则

  1. 特殊情况 from __future__ import 首先出现。

  2. 接下来是标准库导入,然后是第三方导入,最后是应用程序导入。

  3. 假设相对导入是应用程序导入。

  4. 标准库组中的 import 语句首先(按字母顺序排列),然后是 from import 语句(按字母顺序排列)。

  5. 第三方组进一步按库名称分组。然后每个库子组中的 import 语句首先(按字母顺序排列),然后是 from import 语句(按字母顺序排列)。

  6. 应用程序组进一步按导入级别分组,绝对导入首先,然后是递增级别的相对导入。在每一级中,导入应按库名称排序。然后每个库子组中的 import 语句首先(按字母顺序排列),然后是 from import 语句(按字母顺序排列)。

  7. 同一库的 from import 语句必须合并。

  8. 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 (10.3 kB 查看哈希值)

上传时间

构建分布

flake8_alphabetize-0.0.21-py3-none-any.whl (7.9 kB 查看哈希值)

上传时间 Python 3

支持