Pre-commit: локальный хук Mypy сообщает об одной и той же ошибке несколько разPython

Программы на Python
Ответить
Anonymous
 Pre-commit: локальный хук Mypy сообщает об одной и той же ошибке несколько раз

Сообщение Anonymous »

Проблема
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»