Mypy поставляется с параметрами командной строки , которые позволяют вам настроить, насколько строго он проверяет тип вашего кода. Эти параметры командной строки также могут быть выражены в конфигурационном файле , из которого mypy будет автоматически считывать, если он присутствует.
Например, если вы хотите, чтобы mypy сообщала о предупреждении, если какая-то функция не имеет типов, вы должны использовать флаг командной строки --disallow-untyped-defs
. В качестве альтернативы, используйте флаг --strict
, который включает этот флаг вместе с несколькими другими полезными. (Запустите mypy --help
, чтобы узнать, что включает --strict
).
Чтобы гарантировать, что все в вашей организации проверяют код одинаково, я рекомендую передать файл конфигурации mypy.ini
в репозиторий с настройками, которые вы хотите использовать. Например, вот файл конфигурации, который я использую, когда хочу, чтобы mypy проверил код в максимально возможной степени:
[mypy]
# Disallow dynamic typing
disallow_any_unimported = True
disallow_any_expr = True
disallow_any_decorated = True
disallow_any_generics = True
disallow_any_explicit = True
disallow_subclassing_any = True
# Disallow untyped definitions and calls
disallow_untyped_calls = True
disallow_untyped_defs = True
disallow_incomplete_defs = True
check_untyped_defs = True
disallow_untyped_decorators = True
# None and optional handling
no_implicit_optional = True
# Configuring warnings
warn_unused_ignores = True
warn_no_return = True
warn_return_any = True
warn_redundant_casts = True
# Misc things
strict_equality = True
# Config file
warn_unused_configs = True
Этот конфиг почти наверняка слишком агрессивен для реального производственного использования. В частности, вы, вероятно, захотите отключить некоторые параметры «отключить динамическую типизацию» как глобально, так и для отдельных модулей, особенно если вашей базе кода нужно широко использовать нетипизированные сторонние библиотеки.
Возможно, вы также захотите найти точный способ закрепления точной версии mypy, которую используют ваши разработчики - mypy docs рекомендует установить какой-нибудь скрипт runner для таких действий.