跳转到主要内容

一个专门用于标记类型注释的导入的flake8插件

项目描述

Package version Code coverage Test status Supported Python versions Checked with mypy

flake8-typing-only-imports

插件仍在开发中

告诉您哪些导入应放在类型检查块中。

代码

代码 描述
TYO100 将导入移动到类型检查块中
TYO101 将第三方导入移动到类型检查块中
TYO102 找到多个类型检查块
TYO200 添加 'from __future__ import annotations' 导入
TYO201 注释不需要是字符串字面量
TYO300 注释需要转换为字符串字面量
TYO301 注释不需要是字符串字面量

理由

TYO100 可以防止 导入循环TYO101 应用相同的逻辑,用于 venvstdlib 导入。

剩余的错误代码用于帮助管理前向引用,可以通过在需要的地方使用字符串字面量,或者启用注释的延迟评估来实现。因此,错误代码系列 TYO2XXTYO3XX 应该被视为互斥的,因为它们代表了管理前向引用的两种不同方式。

请参阅这个出色的Stack Overflow回答,了解前向引用的快速解释。

安装

pip install flake8-typing-only-imports

建议使用

只有当您希望在小幅提高启动性能时,才启用 TYO101

TYO2XXTYO3XX 是为帮助管理前向引用而保留的错误代码。同时启用这两个系列是没有意义的,它们应该被视为互斥的。

如果您要将此代码添加到项目中,我们建议如下

select = TYO100, TYO200, TYO200  # or TYO300 and TYO301

ignore = TYO101, TYO300, TYO301  # or TYO200 and TYO201

示例

糟糕的代码

models/a.py

from models.b import B

class A(Model):
    def foo(self, b: B): ...

models/b.py

from models.a import A

class B(Model):
    def bar(self, a: A): ...

这将首先导致以下错误

>> a.py: TYO101: Move third-party import 'models.b.B' into a type-checking block
>> b.py: TYO101: Move third-party import 'models.a.A' into a type-checking block

并且如果导入仅移动到类型检查块中,而没有适当的前向引用处理,则随之引发这些错误

>> a.py: TYO300: Annotation 'B' needs to be made into a string literal
>> b.py: TYO300: Annotation 'A' needs to be made into a string literal

良好的代码

models/a.py

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from models.b import B

class A(Model):
    def foo(self, b: 'B'): ...

models/b.py

from typing import TYPE_CHECKING

if TYPE_CHECKING:
    from models.a import A

class B(Model):
    def bar(self, a: 'A'): ...

作为预提交钩子

您可以将此flake8插件作为pre-commit钩子运行

- repo: https://gitlab.com/pycqa/flake8
  rev: 3.7.8
  hooks:
    - id: flake8
      additional_dependencies: [ flake8-typing-only-imports ]

支持项目

如果此项目对您有所帮助,请留下一个⭐️!

贡献总是受欢迎 👏

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分发

flake8-typing-only-imports-0.2.2.tar.gz (10.6 kB 查看散列)

上传时间

构建分发

flake8_typing_only_imports-0.2.2-py3-none-any.whl (10.3 kB 查看散列)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面