Кристиан Ледерман: Миграция с ... Заметка
Planet Python на русском

Кристиан Ледерман: Миграция с mypy на ty и pyrefly

Данное руководство подробно описывает миграцию пакета Python fastkml с mypy на ty и pyrefly. Особое внимание уделяется одновременному запуску ty и pyrefly, поскольку они выявляют различные подмножества ошибок, предоставляя более полную картину, чем один анализатор. Процесс начинается с установления базового количества ошибок для обоих инструментов до внесения каких-либо изменений в код.Ключ к эффективной миграции заключается в выявлении и устранении системных первопричин, часто связанных с необязательными бэкендами C-расширений, а не в исправлении ошибок файл за файлом. Следует исправлять реальные ошибки, выявленные инструментами, особенно касающиеся сужения Optional/union и заглушек только для позиционных аргументов. Шум из тестовых файлов, в частности проблемы "создано, а затем доступно без сужения", следует массово подавлять с помощью ограниченных по области действия правил.Руководство советует включить строгие пресеты, а затем продвигать конкретные правила, явно исключая те, которые вызывают чрезмерные механические изменения. Проверка включает в себя обеспечение того, чтобы оба инструмента не сообщали об ошибках, полный набор тестов проходил, а линтеры были чистыми. Перед миграцией тщательно проанализируйте существующую конфигурацию mypy, чтобы понять, какой уровень строгости должны соответствовать или превзойти ty и pyrefly.Инвентаризация конфигурации mypy включает в себя сопоставление ее настроек с их примерными эквивалентами в ty/pyrefly и удаление устаревших переопределений кодов ошибок для отключения ошибок по модулям. После установки ty и pyrefly крайне важно получить базовое количество ошибок, категоризированное по типу ошибки, а затем по файлу; последнее обычно выявляет системные причины. Если существует частичная миграция с широкими подавлениями, ее следует рассматривать как тревожный сигнал, и подавления следует удалить, чтобы увидеть истинную базовую линию.Наиболее эффективным шагом является исправление архитектурных несоответствий, которые отмечают оба анализатора. Распространенным шаблоном являются необязательные бэкенды, обрабатываемые с помощью импорта try/except, где исправление часто заключается в блоке if TYPE_CHECKING:, чтобы позволить анализаторам типов видеть заглушки более богатого бэкенда. Подводные камни включают непереносимость комментариев # type: ignore[code], проблемы с регистром ключей TOML в pyrefly, хрупкость синтаксиса массивов таблиц в pyrefly при чередовании и невозможность прямого присваивания Protocol параметру конкретного класса. Тщательная проверка поведения и конфигурации инструментов имеет важное значение на протяжении всего процесса.