跳转到主要内容

Flake8现代注释验证

项目描述

flake8-modern-annotations

flake8插件,用于验证符合现代实践的类型注释。

  • 根据PEP 563推迟注释评估。
  • 根据PEP 585的标准集合泛型。
  • 根据PEP 604的联合类型作为X | Y。
  • 当PEP 604联合类型可用时,可选类型。

激活

默认情况下,该插件根据用于flake8的Python版本或当它看到启用现代注释的future导入时激活,例如。

from __future__ import annotations

每个功能都有选项可以覆盖自动激活。

安装

标准的python包安装

pip install flake8-modern-annotations

类型别名

注意,在使用现代注释实践和类型别名时有一些限制。

  • 前置引用

    • 必须使用字符串字面量。
    • 包含前置引用的联合必须使用 typing.Union
  • 标准集合泛型

    • 如果Python < 3.9,则不能在类型别名中使用,例如 X: TypeAlias = dict[str, str]
  • 联合

    • | 联合不能在Python < 3.9的类型别名中使用。

默认设置下,此插件不会报告上述情况中的错误。

建议使用 TypeAlias 类型来帮助此插件在所有情况下正确检测它们。TypeAlias 从Python 3.10+的 typing 和先前的版本的 typing_extensions 中可用。

选项

modern-annotations-postponed : 控制延迟注释(PEP 563)的验证,选项:autoalwaysnever(默认:auto

modern-annotations-deprecated : 控制已弃用类型(PEP 585)的验证,选项:autoalwaysnever(默认:auto

modern-annotations-type-alias : 在类型别名中使用已弃用类型(适用于旧版Python < 3.9),选项:autoalwaysnever(默认:auto

modern-annotations-union : 控制对 typing.Union(PEP 604)使用的检查,选项:autoalwaysnever(默认:auto

modern-annotations-optional : 控制对 typing.Optional 使用的检查,选项:autoalwaysnever(默认:auto

modern-annotations-include-name : 在消息中包含插件名称

modern-annotations-no-include-name : 在消息中不包含插件名称(默认设置)

所有选项都可以使用带有 -- 前缀的命令行指定,或者可以放置在您的 flake8 配置文件中。

auto 设置根据 flake8 运行的 Python 版本以及代码中是否存在 from __future__ import annotations(在 Python 3.7+ 中启用现代注释)而开启或关闭。

如果正在为预期在 3.7 或 3.8 上运行的 Python 3.9+ 代码开发,请使用 modern-annotations-type-alias=always 强制类型别名的旧行为并确保代码可以运行。

错误代码

代码 消息
MDA001 从变量类型注释 'type' 中移除引号
MDA002 从参数类型注释 'type' 中移除引号
MDA003 从返回类型注释 'type' 中移除引号
MDA100 'typing.Tuple' 已弃用,从导入中删除
MDA101 'typing.List' 已弃用,从导入中删除
MDA102 'typing.Dict' 已弃用,从导入中删除
MDA103 'typing.Set' 已弃用,从导入中删除
MDA104 'typing.FrozenSet' 已弃用,从导入中删除
MDA105 'typing.Type' 已弃用,从导入中删除
MDA110 'typing.Deque' 已弃用,替换为 'collections.deque'
MDA111 'typing.DefaultDict' 已弃用,替换为 'collections.defaultdict'
MDA112 'typing.OrderedDict' 已弃用,替换为 'collections.OrderedDict'
MDA113 'typing.Counter' 已弃用,替换为 'collections.Counter'
MDA114 'typing.ChainMap' 已弃用,替换为 'collections.ChainMap'
MDA120 'typing.Awaitable' 已弃用,替换为 'collections.abc.Awaitable'
MDA121 'typing.Coroutine' 已弃用,替换为 'collections.abc.Coroutine'
MDA122 'typing.AsyncIterable' 已弃用,替换为 'collections.abc.AsyncIterable'
MDA123 'typing.AsyncIterator' 已弃用,替换为 'collections.abc.AsyncIterator'
MDA124 'typing.AsyncGenerator' 已弃用,替换为 'collections.abc.AsyncGenerator'
MDA125 'typing.Iterable' 已弃用,替换为 'collections.abc.Iterable'
MDA126 'typing.Iterator' 已弃用,替换为 'collections.abc.Iterator'
MDA127 'typing.Generator' 已弃用,替换为 'collections.abc.Generator'
MDA128 'typing.Reversible' 已弃用,替换为 'collections.abc.Reversible'
MDA129 'typing.Container' 已弃用,替换为 'collections.abc.Container'
MDA130 'typing.Collection' 已弃用,替换为 'collections.abc.Collection'
MDA131 'typing.Callable' 已弃用,替换为 'collections.abc.Callable'
MDA132 'typing.AbstractSet' 已弃用,替换为 'collections.abc.Set'
MDA133 'typing.MutableSet' 已弃用,替换为 'collections.abc.MutableSet'
MDA134 'typing.Mapping' 已弃用,替换为 'collections.abc.Mapping'
MDA135 'typing.MutableMapping' 已弃用,请使用 'collections.abc.MutableMapping' 替换
MDA136 'typing.Sequence' 已弃用,请使用 'collections.abc.Sequence' 替换
MDA137 'typing.MutableSequence' 已弃用,请使用 'collections.abc.MutableSequence' 替换
MDA138 'typing.ByteString' 已弃用,请使用 'collections.abc.ByteString' 替换
MDA139 'typing.MappingView' 已弃用,请使用 'collections.abc.MappingView' 替换
MDA140 'typing.KeysView' 已弃用,请使用 'collections.abc.KeysView' 替换
MDA141 'typing.ItemsView' 已弃用,请使用 'collections.abc.ItemsView' 替换
MDA142 'typing.ValuesView' 已弃用,请使用 'collections.abc.ValuesView' 替换
MDA150 'typing.ContextManager' 已弃用,请使用 'contextlib.AbstractContextManager' 替换
MDA151 'typing.AsyncContextManager' 已弃用,请使用 'contextlib.AbstractAsyncContextManager' 替换
MDA160 'typing.Pattern' 已弃用,请使用 're.Pattern' 替换
MDA161 'typing.Match' 已弃用,请使用 're.Match' 替换
MDA200 将 'Tuple' 替换为 'tuple'
MDA201 将 'List' 替换为 'list'
MDA202 将 'Dict' 替换为 'dict'
MDA203 将 'Set' 替换为 'set'
MDA204 将 'FrozenSet' 替换为 'frozenset'
MDA205 将 'Type' 替换为 'type'
MDA210 将 'Deque' 替换为 'collections.deque'
MDA211 将 'DefaultDict' 替换为 'collections.defaultdict'
MDA212 将 'OrderedDict' 替换为 'collections.OrderedDict'
MDA213 将 'Counter' 替换为 'collections.Counter'
MDA214 将 'ChainMap' 替换为 'collections.ChainMap'
MDA220 将 'Awaitable' 替换为 'collections.abc.Awaitable'
MDA221 将 'Coroutine' 替换为 'collections.abc.Coroutine'
MDA222 将 'AsyncIterable' 替换为 'collections.abc.AsyncIterable'
MDA223 将 'AsyncIterator' 替换为 'collections.abc.AsyncIterator'
MDA224 将 'AsyncGenerator' 替换为 'collections.abc.AsyncGenerator'
MDA225 将 'Iterable' 替换为 'collections.abc.Iterable'
MDA226 将 'Iterator' 替换为 'collections.abc.Iterator'
MDA227 将 'Generator' 替换为 'collections.abc.Generator'
MDA228 将 'Reversible' 替换为 'collections.abc.Reversible'
MDA229 将 'Container' 替换为 'collections.abc.Container'
MDA230 将 'Collection' 替换为 'collections.abc.Collection'
MDA231 将 'Callable' 替换为 'collections.abc.Callable'
MDA232 将 'AbstractSet' 替换为 'collections.abc.Set'
MDA233 将 'MutableSet' 替换为 'collections.abc.MutableSet'
MDA234 将 'Mapping' 替换为 'collections.abc.Mapping'
MDA235 将 'MutableMapping' 替换为 'collections.abc.MutableMapping'
MDA236 将 'Sequence' 替换为 'collections.abc.Sequence'
MDA237 将 'MutableSequence' 替换为 'collections.abc.MutableSequence'
MDA238 将 'ByteString' 替换为 'collections.abc.ByteString'
MDA239 将 'MappingView' 替换为 'collections.abc.MappingView'
MDA240 将 'KeysView' 替换为 'collections.abc.KeysView'
MDA241 将 'ItemsView' 替换为 'collections.abc.ItemsView'
MDA242 将 'ValuesView' 替换为 'collections.abc.ValuesView'
MDA250 将 'ContextManager' 替换为 'contextlib.AbstractContextManager'
MDA251 将 'AsyncContextManager' 替换为 'contextlib.AbstractAsyncContextManager'
MDA260 将 'Pattern' 替换为 're.Pattern'
MDA261 将 'Match' 替换为 're.Match'
MDA400 'typing.Union' 已弃用,请从导入中移除
MDA401 将 'Union' 替换为 '|'
MDA500 'typing.Optional' 已弃用,请从导入中移除
MDA501 将 'Optional' 替换为 '| None'

示例

x: 'Foo'  <-- MDA001
def foo(x: 'Foo') -> None:  <-- MDA002
def foo(x: Foo) -> 'Bar':  <-- MDA003

from typing import Dict  <-- MDA102
x: Dict[str, str]  <-- MDA202

from typing import Dict
MyDict = Dict[str, int]  <-- no error on Python 3.7/3.8

from typing import Union  <-- MDA400
x: Union[int, float]  <-- MDA401

from typing import Optional  <-- MDA500
x: Optional[int]  <-- MDA501

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

flake8-modern-annotations-1.6.0.tar.gz (16.5 kB 查看哈希值)

上传时间 源代码

构建分发

flake8_modern_annotations-1.6.0-py3-none-any.whl (11.2 kB 查看哈希值)

上传时间 Python 3

由以下支持