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 |