Комментарии 15
Все нравится кроме того что написан на js?
Получается php-разработчику, работающему исключительно с php, придется разворачивать чуждые окружение и тулзы (node.js, npm).
Вам не кажется, что это будет ограничивать широкое применение вашего инструмента?
Подход с токенами всем хорош, но как только Вам станет нужно анализировать, скажем, обращения к константам класса, вызовы методов по цепочке, даже вызовы include и т.д. очень быстро становится понятно, что хоть токены и быстрее поначалу, для парсинга вложенных конструкций нужно держать весьма большой текущий контекст, иначе отличить одну конструкцию от другой будет сложно.
То есть, я утверждаю, что без AST Ваши проверки будут сопоставимы с тем, что уже умеет phpcs, а phpcs умеет скорее находить стилистические ошибки, нежели ошибки в логике. Да, и то и другое безусловно полезно, но мне кажется, что линтером все же обычно называют утилиты, которые анализируют семантику, а не только внешний вид.
Ну а про выбор языка Вам и так сказали, но ИМХО это уже не так принципиально по сравнению с тем, что Вы ограничиваете парсинг только токенами.
С одной стороны она нужна только для отладки.
А с другой стороны у меня в реальном продакшн коде она используется для формирования исключений, вида: "foo requires an argument $arg of type string, but (bool)true passed
", где значения для скаляров как раз принтятся через print_r($arg, true)
.
Так что да, линтер должен реагировать только на print_r(...)
или print_r(..., false)
, это явная отладочная штука.
Пожалуйста, поставляя подобные инструменты публике — поставляйте и, скажем, docker-образ с ним для быстрого запуска на проекте с целью оценить "как эта штука работает" в одну/две команды (особенно, если используется не "родной" язык). Да, PR с докер-файлом уже сделал, вам остается только настроить автоматическую сборку.
И ещё, из пожеланий:
- Наверное, не лишним будет держать
package-lock.json
для проекта (если рассматривать его именно как проект) - Отчеты в форматах
json
иjunit
прям очень-очень просятся - Кастомизация "под себя" не выглядит простой
И не совсем понятно, зачем это всё, если есть PHP-CS-Fixer, но вы большие молодцы, так как любые великие дела с чего-то да начинаются :)
2. package-lock.json в пакетах все равно игнорируется
3. Про json — хорошее замечание.
4. Кастомизация — создание новых правил? или настройка текущих?
Да, для пакетов package-lock.json
не должен быть, но если рассматривать проект как самостоятельную тулзу — то он очень желателен, так как и версии зависимостей у разработчиков будут одинаковые, сборка будет происходить быстрее (зная какие версии ставить, а не строя дерево из всех возможных), да и тот же dependabot можно натравить на репу — пускай он обновляет. Очень удобно.
Кстати, про junit
не просто так говорю — тот же GitLab его очень хорошо умеет, отображаю плашку с замечаниями линтера прямо в MR.
Кастомизация — нашел в доке (читая в первый раз пропустил) каюсь
readable — еще один линтер для PHP