Что это

Линтеры — это инструменты анализа исходного кода на соответствие стандартам кодирования, стилю и потенциальным проблемам, таким как:

  • ошибки
  • несоответствия соглашениям о форматировании
  • другие аспекты, которые могут снизить читаемость, надежность и обслуживаемость кода

Линтеры позволяют выявить неисправности в коде на ранних стадиях разработки, что помогает разработчику предотвратить ошибки и повысить качество программного обеспечения.

Их роль в написании кода

Линтеры являются важным компонентом в арсенале разработчика. Экосистема Python уже много лет широко использует такие популярные линтеры, как:

  • Pylint. Проводит статический анализ кода и выдает предупреждения о различных аспектах кодирования, таких как стиль, правильность и потенциальные ошибки.
  • Flake8. Объединяет несколько инструментов для анализа кода (pylint, pycodestyle и mccabe) в один инструмент. Он проверяет соответствие кода PEP 8 (стандарту стиля для кода на Python) и выдает предупреждения о нарушениях стиля.
  • Black. Этот линтер известен своим подходом к автоматическому форматированию кода на Python. Он приводит код к единому стилю, что помогает сделать его более читаемым и согласованным.
  • Mypy. Является инструментом для статической типизации Python. Позволяет добавлять аннотации типов к коду и проверять их на соответствие во время компиляции.
  • isort. Инструмент для автоматической сортировки и группировки импортов в Python. Помогает поддерживать порядок импортов в коде и улучшает его читаемость.

Однако все эти программы часто имеют недостатки в производительности, особенно при работе с большими проектами.

Интересуетесь разработкой на Python? Рекомендуем бесплатный вебинар «Как хакнуть Python с помощью ChatGPT»! В нем мы научим вас зарабатывать на разработке без навыков программирования!

Ruff — наиболее быстрый линтер на Python

Ruff, линтер Python, написанный на Rust. Он быстр по сравнению с другими, а также интегрирует больше функциональности в единый, унифицированный интерфейс.

Используя скорость и безопасность Rust, Ruff может анализировать и форматировать код с более высокой скоростью, чем те же Flake8, Pylint или Black (в 10-100 раз быстрее)!

Одним из ключевых факторов, обеспечивающих скорость работы Ruff, является встроенный механизм кэширования. Он позволяет избежать повторного анализа неизменных файлов.

Это, в сочетании с оптимизированной реализацией Rust, помогает линтеру за считанные секунды справляться даже с самыми массивными кодовыми базами!

Ник Шрок, основатель Elementl и соавтор GraphQL, в одной из статей отметил: «На нашем самом большом модуле Pylint занимает около 2.5 минут, распараллеленный на 4 ядра на моем M1. Запуск Ruff для всей нашей кодовой базы занимает 0.4 секунды».

Скорость Ruff — не единственное достоинство. Инструмент может похвастаться впечатляющим набором функций, включая:

  • более 700 встроенных правил
  • встроенную реализацию популярных плагинов Flake8
  • паритет с такими инструментами, как isort и Black

Следствие: разработчики могут заменить несколько линтеров и модулей форматирования на Ruff, упрощая рабочий процесс разработки и снижая общую сложность цепочки инструментов!

Сейчас новый линтер уже используется такими известными проектами, как Apache Airflow, FastAPI, Hugging Face, Pandas и SciPy