Comments 8
Полезно, +. Не раскрыта тема с doctests в комментарии. Это, пожалуй, самый простой способ мягко заставить делать комменты по настоящему самообновляемыми. Код просто не соберётся, если сборка начинается с прогона doctest. В некоторых сферах, например, в DataScience c их Jupyter-блокнотами и кавалерийским кодингом в стиле "Ща..." - доктесты оказались Соломоновым решением для наведения порядка. Экспортируемые в модули udf с доктестами просто открывают новую страницу культуры программирования в компаниях, и хорошо что эта тема усиливается сабжем.
Не раскрыта тема с doctests в комментарии
Не сталкивался с таким, только тесты в документации.
Пайтест еще умеет ранить из текстовых файлов.
https://docs.pytest.org/en/stable/how-to/doctest.html#how-to-run-doctests
Это оно и есть. Docstring-строки ниже имён функций в py-, md-, ipynb-, txt-файлах выполняются и валидируют свой вывод с указанным ниже. Это обязывает кодера изменив функцию, скажем, добавив в нее новый аргумент - изменить и ее докттест в докстринге, что является довольно ненавязчивым насилием. Если он этого не сделает - доктест зафэйлится, и код в прод не уйдет, а автодокументация не обновится на нерабочую.
Нет никаких других аато-способов поддерживать актуальность кода + комментариев и документации одновременно. Это киллер-фича Python и в DS-кругах она почитается за великое благо.
Это киллер-фича Python и в DS-кругах она почитается за великое благо.
С тем, что киллер фича согласен. А вот тесты еще не во все уголки DS доползли.
Автоматизация это хорошо. Есть CI и тесты, код аккуратный.
Репозиторий с хуком, который не использует хуки это подозрительно.
Такая проверка в одиночку бесполезна. Обычно используют что-то крупное и к нему добавляют плагинов и просто скрипты. Было бы хорошо посмотреть, что из этого уже есть в ruff flake8 pylint. И может быть даже законтрибьютить в один из этих проектов. Без форматера и глобального линтера, ревью это ад.
Код аккуратный, но мне кажется регулярки это опасно. Закомментированный код с комментами может сломать их. (в ruff и flake8 есть на это управа https://docs.astral.sh/ruff/rules/#eradicate-era).
В выводе нет номера строки. IDE умеет читать пути в выводе на консоль и можно будет кликом перейти в нужное место. В GitHub есть аннотации, cпециально отформатированные логи превращаются в комментарии к коду. Даже не надо в лог CI глядеть.
Проверил ваш код, очевидно, что это не работает:
$ cat ~/1.py
print('''\
#hello#
''')
$ python3 python_checker.py ~/1.py
…1.py:2: error: The red line should start with an uppercase letter: #hello#
Парсер для питоновского кода https://docs.python.org/3/library/tokenize.html и можно заменить регулярки для поиска комментов.
Проверка стиля комментариев Python с помощью pre-commit