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,则不能在类型别名中使用,例如
-
联合
|
联合不能在Python < 3.9的类型别名中使用。
默认设置下,此插件不会报告上述情况中的错误。
建议使用 TypeAlias
类型来帮助此插件在所有情况下正确检测它们。TypeAlias
从Python 3.10+的 typing
和先前的版本的 typing_extensions
中可用。
选项
modern-annotations-postponed
: 控制延迟注释(PEP 563)的验证,选项:auto
、always
、never
(默认:auto
)
modern-annotations-deprecated
: 控制已弃用类型(PEP 585)的验证,选项:auto
、always
、never
(默认:auto
)
modern-annotations-type-alias
: 在类型别名中使用已弃用类型(适用于旧版Python < 3.9),选项:auto
、always
、never
(默认:auto
)
modern-annotations-union
: 控制对 typing.Union(PEP 604)使用的检查,选项:auto
、always
、never
(默认:auto
)
modern-annotations-optional
: 控制对 typing.Optional 使用的检查,选项:auto
、always
、never
(默认: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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 879a370b1ba51a7b86bbba1b48393640a12565538b56fc0994630e74f89d9343 |
|
MD5 | 839df54ab2b9c4f15de0864795c5af1c |
|
BLAKE2b-256 | 04d2cab70d7f8e1dc05706797f1de801c8035992d4a987718e785e9768791c1f |
flake8_modern_annotations-1.6.0-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 40342ddf684f12a8882719913adb94a8d4bb4e83e217ec7fe5b03df18acd0ecf |
|
MD5 | 126a7da4337eb898baab051d0c19b173 |
|
BLAKE2b-256 | 4ba3537a6593818b195a886f7e6a136cae33cdde8e8b62428fb5dc63117736e9 |