跳转到主要内容

Flake8集成mypy的插件。

项目描述

Build Status

A plugin for Flake8 integrating mypy. The idea is to enable limited type checking as a linter inside editors and other tools that already support Flake8 warning syntax and config.

注意:此插件需要 mypy >=0.500,截至3月1日,尚无发布版本满足此要求。您可以使用master作为替代。

警告列表

flake8-mypy 为所有当前和未来的代码保留了 T4,T是与类型错误相关的错误的自 nhiên字母。还有其他插件贪婪地保留了整个字母 T。对此,我说: ¯\_(ツ)_/¯

T400:任何类型注释。

T484:任何类型错误(在PEP 484之后,明白了吗?)。

T498:内部 mypy 错误。

T499:内部 mypy 跟踪回溯,stderr输出或未匹配的行。

我计划在未来支持更精细的错误代码,以针对特定的 mypy 错误。

两级类型检查

mypy在分析完整程序时表现出色。然后,您可以使用如--follow-imports--disallow-untyped-calls等选项来执行模块的完整传递闭包,捕获由不良API使用或不兼容类型引起的错误。但话说回来,这些检查需要时间,并且需要访问整个代码库。对于某些工具,如编辑器或代码审查工具,实现这一点并不简单。这就是在代码检查器内部采用更有限方法的原因。

Flake8在无关文件上操作,它不执行完整程序分析。换句话说,它不会跟踪导入。这是一把双刃剑。我们无法找到复杂的问题,我们能够安全显示而不会导致误报的警告数量也较低。作为回报,我们可以提供有用的警告,并具有优异的性能,适用于实时编辑器集成。

实际上,在这种操作模式下,mypy仍然能够提供有关注解以及至少是存根标准库和第三方库使用的有用信息。然而,为了达到最佳效果,您将需要为mypy的独立模式和作为Flake8插件的用途分别使用不同的配置。

配置

由于上述原因,默认情况下,flake8-mypy将以与以下选项等效的选项运行

[mypy]
# Specify the target platform details in config, so your developers are
# free to run mypy on Windows, Linux, or macOS and get consistent
# results.
python_version=3.6
platform=linux

# flake8-mypy expects the two following for sensible formatting
show_column_numbers=True
show_error_context=False

# do not follow imports (except for ones found in typeshed)
follow_imports=skip

# since we're ignoring imports, writing .mypy_cache doesn't make any sense
cache_dir=/dev/null

# suppress errors about unsatisfied imports
ignore_missing_imports=True

# allow untyped calls as a consequence of the options above
disallow_untyped_calls=False

# allow returning Any as a consequence of the options above
warn_return_any=False

# treat Optional per PEP 484
strict_optional=True

# ensure all execution paths are returning
warn_no_return=True

# lint-style cleanliness for typing needs to be disabled; returns more errors
# than the full run.
warn_redundant_casts=False
warn_unused_ignores=False

# The following are off by default since they're too noisy.
# Flip them on if you feel adventurous.
disallow_untyped_defs=False
check_untyped_defs=False

如果您不同意上述默认设置,您可以通过向Flake8提供--mypy-config=命令行选项来指定自己的mypy配置(.flake8/setup.cfg的等效配置称为mypy_config)。该选项的值应该是一个与mypy.ini或setup.cfg兼容文件的路径。有关完整的配置语法,请参阅mypy文档

为了简洁和可读性,您提供的配置将完全替换上述列表中的配置。省略的值将使用mypy的默认值。

请记住,为了获得最佳用户体验,您的代码检查器集成模式通常不应显示mypy完整运行不会显示的错误。这会令人困惑。

注意:更改follow_imports选项可能会产生意外的效果。如果您使用Flake8检查的文件周围有其他文件,那么在“静默”或“正常”模式下,这些文件将用于跟踪导入。这包括从typeshed的导入。

测试

只需运行

python setup.py test

OMG,这只适用于Python 3!

是的,mypy也是如此。放松,您可以在Python 3.5+下将所有流行的插件作为工具完美地运行Flake8,即使您想分析Python 2代码也是如此。这样,您将能够解析所有在Python 3上支持的新语法,同时也能有效地解析Python 2的所有语法。

通过将代码仅限于Python 3.5+,我能够专注于检查的质量并重用新版本的所有优秀功能(检查pathlib),而不是在Unicode兼容性等上浪费时间。

许可证

MIT

变更日志

17.8.0

  • 在默认配置中避免引发在完整运行期间不会发生的错误(禁用warn_unused_ignores和warn_redundant_casts)

  • 始终从临时目录运行类型检查,以避免与同一目录中的无关文件冲突

17.3.3

  • 抑制mypy有关相对导入的消息

17.3.2

  • 错误修复:现在使用绝对路径与mypy消息正确匹配

  • 错误修复:现在不会在相对导入形式from . import X中崩溃

17.3.1

  • follow_imports从“静默”更改为“跳过”,以避免在typeshed中使用的文件因名称冲突而被用作跟踪导入

  • 默认将MYPYPATH设置为比本地源具有更高优先级的typeshed存根

17.3.0

  • 性能优化:跳过运行没有注解或从typing导入的文件上的mypy

  • 错误修复:当在整个目录上运行时,现在正确使用T484而不是T499

17.2.0

  • 首次发布版本

  • 按日期版本化

作者

Łukasz Langa拼接。

项目详情


下载文件

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

源分布

flake8-mypy-17.8.0.tar.gz (11.0 kB 查看哈希)

上传时间

构建分布

flake8_mypy-17.8.0-py35.py36-none-any.whl (12.7 kB 查看哈希)

上传时间 Python 3.5 Python 3.6

由支持