Как стать автором
Обновить

Комментарии 15

Все нравится кроме того что написан на js?
Получается php-разработчику, работающему исключительно с php, придется разворачивать чуждые окружение и тулзы (node.js, npm).

Я озвучивал заказчику свои сомнения по этому поводу. Но, у них внутри все вспомогательные инструменты для сборки, развертывания и т.д. на яваскрипте. То, есть у них везде есть нода, и есть специалисты по яваскрипту. Для их процессов, и для компаний со схожими процессами будет нормально.
Я так докатился до переписывания проекта и ухода от php в ноду :)

Вам не кажется, что это будет ограничивать широкое применение вашего инструмента?

Ответил выше сразу на оба вопроса.

Подход с токенами всем хорош, но как только Вам станет нужно анализировать, скажем, обращения к константам класса, вызовы методов по цепочке, даже вызовы include и т.д. очень быстро становится понятно, что хоть токены и быстрее поначалу, для парсинга вложенных конструкций нужно держать весьма большой текущий контекст, иначе отличить одну конструкцию от другой будет сложно.


То есть, я утверждаю, что без AST Ваши проверки будут сопоставимы с тем, что уже умеет phpcs, а phpcs умеет скорее находить стилистические ошибки, нежели ошибки в логике. Да, и то и другое безусловно полезно, но мне кажется, что линтером все же обычно называют утилиты, которые анализируют семантику, а не только внешний вид.


Ну а про выбор языка Вам и так сказали, но ИМХО это уже не так принципиально по сравнению с тем, что Вы ограничиваете парсинг только токенами.

Я сверялся с eslint, flake8 и phpcs — и около 90% их проверок можно сделать без построения дерева. И да, readable — в первую очередь для проверки стиля. С терминами линтер не-линтер очень расплывчатая граница.
НЛО прилетело и опубликовало эту надпись здесь
Пока, к сожалению, никак. Сейчас они разрабатывают плагин для VS code, и думаю о саблайме тоже думают.
Хочу задать глупый вопрос, чем так плоха функция print_r, что ее стоит запрещать?

С одной стороны она нужна только для отладки.


А с другой стороны у меня в реальном продакшн коде она используется для формирования исключений, вида: "foo requires an argument $arg of type string, but (bool)true passed", где значения для скаляров как раз принтятся через print_r($arg, true).


Так что да, линтер должен реагировать только на print_r(...) или print_r(..., false), это явная отладочная штука.

В 95% случаев — это остатки вывода какойто отладочной информации. Но выше привели пример правильного использования, но и то при условии что это в лог пишет, который не публичный.

Пожалуйста, поставляя подобные инструменты публике — поставляйте и, скажем, docker-образ с ним для быстрого запуска на проекте с целью оценить "как эта штука работает" в одну/две команды (особенно, если используется не "родной" язык). Да, PR с докер-файлом уже сделал, вам остается только настроить автоматическую сборку.


И ещё, из пожеланий:


  • Наверное, не лишним будет держать package-lock.json для проекта (если рассматривать его именно как проект)
  • Отчеты в форматах json и junit прям очень-очень просятся
  • Кастомизация "под себя" не выглядит простой

И не совсем понятно, зачем это всё, если есть PHP-CS-Fixer, но вы большие молодцы, так как любые великие дела с чего-то да начинаются :)

1. Спасибо за докер. Сейчас протестирую и смерджу.
2. package-lock.json в пакетах все равно игнорируется
3. Про json — хорошее замечание.
4. Кастомизация — создание новых правил? или настройка текущих?

Да, для пакетов package-lock.json не должен быть, но если рассматривать проект как самостоятельную тулзу — то он очень желателен, так как и версии зависимостей у разработчиков будут одинаковые, сборка будет происходить быстрее (зная какие версии ставить, а не строя дерево из всех возможных), да и тот же dependabot можно натравить на репу — пускай он обновляет. Очень удобно.


Кстати, про junit не просто так говорю — тот же GitLab его очень хорошо умеет, отображаю плашку с замечаниями линтера прямо в MR.


Кастомизация — нашел в доке (читая в первый раз пропустил) каюсь

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории