Mypy как локальный перехватчик сообщает об одной и той же ошибке несколько раз.
связанные проблемы
Разница между запуском Mypy напрямую VS с предварительным запуском --all-files
.pre-commit-config.yaml
Код: Выделить всё
- repo: local
hooks:
- id: mypy
name: mypy
# or `entry: poetry run mypy`, but perhaps both are the same
entry: mypy
# From the docs it is not clear the difference between `language: python` VS `language: system`
language: system
types: [ python ]
Давайте сделаем какую-нибудь глупую ошибку только для того, чтобы вызвать предупреждения Mypy, например:
Код: Выделить всё
# sample.py
foo: int = "bar"
Код: Выделить всё
pre-commit run --all-filesОдна и та же ошибка сообщается 3 раза:
Код: Выделить всё
pre-commit run mypy --all-files
mypy.....................................................................Failed
- hook id: mypy
- exit code: 1
src/sample.py:12:12: error: Incompatible types in assignment (expression
has type "str", variable has type "int") [assignment]
foo: int = "bar"
^
Found 1 error in 1 file (checked 23 source files)
src/sample.py:12:12: error: Incompatible types in assignment (expression
has type "str", variable has type "int") [assignment]
foo: int = "bar"
^
Found 1 error in 1 file (checked 23 source files)
src/sample.py:12:12: error: Incompatible types in assignment (expression
has type "str", variable has type "int") [assignment]
foo: int = "bar"
^
Found 1 error in 1 file (checked 23 source files)
src/sample.py:12:12: error: Incompatible types in assignment (expression
has type "str", variable has type "int") [assignment]
foo: int = "bar"
^
Found 1 error in 1 file (checked 22 source files)
Код: Выделить всё
mypy src/Об ошибке сообщается только один раз, что является правильным поведением:
Код: Выделить всё
src/cache/cache.py:12:12: error: Incompatible types in assignment (expression has type "str", variable has type "int") [assignment]
foo: int = "bar"
^
Found 1 error in 1 file (checked 91 source files)
Код: Выделить всё
git ls-files --exclude='*.py' --ignored -c -z | xargs -0r mypy- то же, что и выше (предупреждение выдается только один раз)
Как избежать дублирования предупреждений и при этом использовать Mypy посредством «предварительной фиксации»?
PS:
Не предлагайте мне использовать https://github.com/pre-commit/mirrors-mypy. Для моего огромного проекта было бы излишним вручную копировать/вставлять десятки моих зависимостей в дополнительные_зависимости, чтобы создать еще одну виртуальную среду. Эти зависимости будут откреплены, и мне придется обновлять их вручную каждый раз, когда я что-то добавляю/удаляю. Это всего лишь избыточная дублирующая работа.
Во всяком случае, раньше я использовал «mirrors-mypy», и он перестал давать согласующиеся результаты с простым Mypy. Вот почему я пытаюсь использовать Mypy в качестве локального перехватчика.
В настоящее время я просто запускаю обычный Mypy в своем CI/CD как одно задание, а «предварительную фиксацию» со всеми другими перехватчиками — как отдельное задание.
Подробнее здесь: https://stackoverflow.com/questions/734 ... iple-times
Мобильная версия