Deslopify — это специализированный статический анализатор кода (линтер) для Python-проектов. Его главная цель — находить специфический "мусор" (slop), скрытые баги, галлюцинации и архитектурные антипаттерны, которые часто оставляют большие языковые модели (LLM) при генерации или рефакторинге кода.
В отличие от стандартных линтеров (flake8, pylint), которые фокусируются на PEP 8, deslopify ищет логические недочеты: "поглощение" ошибок (except: pass), оставленные пустые заглушки функций, изменяемые аргументы по умолчанию и прочие следы автоматической генерации кода.
- Сфокусированность на LLM-паттернах: Ищет то, что другие линтеры могут пропустить, считая код синтаксически верным.
- Поддержка Legacy: Написан на Python 3.5. Это позволяет запускать его в старых или изолированных средах без необходимости обновлять интерпретатор.
- Плагинная архитектура: Легко расширяется новыми проверками. Каждый плагин изолирован и тестируется отдельно.
- Умное игнорирование: Автоматически пропускает файлы тестов (
test_*.py) и виртуальные окружения (venv,.git,.ideaи т.д.).
Утилита спроектирована так, чтобы её можно было вызывать из корня любого проверяемого (целевого) проекта на вашем компьютере.
- Склонируйте этот репозиторий в удобное для вас место (например,
~/Projects/deslopify). - Добавьте алиас в конфигурационный файл вашей оболочки (
~/.zshrcили~/.bash_profile):
alias deslopify="python3 /абсолютный/путь/к/папке/deslopify/main.py"- Обновите конфигурацию терминала:
source ~/.zshrc- Перейдите в папку с проектом, который вы хотите проверить, и запустите линтер:
cd /путь/к/вашему/проекту
deslopifyЛинтер просканирует все .py файлы в текущей директории и выведет список найденных проблем с указанием файла и номера строки.
На данный момент реализованы следующие проверки:
- EmptyFunctionChecker: Находит функции и методы, состоящие только из
pass,...(многоточия) или одиночного docstring. Корректно игнорирует абстрактные методы (@abstractmethod). - TryExceptPassChecker: Находит опасный паттерн подавления ошибок: блоки
try...except, в которых обработчик состоит только изpass. - MutableDefaultArgsChecker: Ищет изменяемые структуры данных (
[],{},set()) в значениях по умолчанию аргументов функций.
Полный список планируемых проверок можно найти в файле todo.md.
Проект имеет встроенную систему "Snapshot-тестирования" для проверки самих плагинов. Каждый плагин обязан иметь два файла в своей директории:
example_pass.py: Валидный код, на который плагин не должен срабатывать.example_fail.py: Плохой код, в котором плагин обязан найти ошибку.
Чтобы запустить тесты и убедиться, что все плагины работают корректно:
cd /абсолютный/путь/к/папке/deslopify
python3 run_tests.pyПодробные инструкции по написанию новых плагинов и работе с AST (Abstract Syntax Tree) находятся в файле plugin_descr.md.