Lint PHP и возвращать только ошибки

Вопрос или проблема

Я хотел бы использовать php -l, чтобы возвращать только ошибки, а не сообщения No syntax errors detected. Это возможно?

С помощью некоторых умных поисков в Google мне удалось найти этот набор команд:

find . -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | (! grep -v "No syntax errors detected" )

Этот скрипт проходит через все файлы в текущей папке и выводит только ошибки, и вызывает сбой сборки CI, если произошла ошибка.

Источник: https://gist.github.com/mathiasverraes/3096500#gistcomment-2570105

Попробуйте это:

find . -type f -iname '*.php' -exec php -l {} \; | grep -v "No syntax errors detected"

Ответ или решение

Устранение сообщений "No syntax errors detected" при линтинге PHP

Если вы работаете с PHP-кодом и хотите проверить его на наличие синтаксических ошибок, стандартная команда php -l будет полезной. Однако, часто возникает потребность не видеть сообщения о том, что ошибок нет, для более компактного и эффективного вывода. В этой статье мы обсудим, как настроить линтинг для PHP, чтобы получать только ошибки.

Зачем это нужно?

При автоматизации процессов, таких как непрерывная интеграция (CI), важно минимизировать "шум" в выводе. Сообщение "No syntax errors detected" не приносит никакой полезной информации, и его можно безопасно игнорировать. Оптимизированный вывод упрощает анализ результатов проверки кода, особенно если вы работаете с большим количеством файлов.

Решение

Можно использовать команду find, чтобы рекурсивно искать все PHP-файлы в каталоге, а затем передать их на линтинг с помощью php -l. Упрощенный подход для фильтрации ненужного вывода можно реализовать с помощью следующей команды:

find . -type f -iname '*.php' -exec php -l {} \; | grep -v "No syntax errors detected"

Давайте разберем эту команду подробнее:

  • find . -type f -iname '*.php' — эта команда ищет все файлы с расширением .php в текущем каталоге и всех подкаталогах независимо от регистра.
  • -exec php -l {} \; — для каждого найденного файла запускается команда php -l, которая проверяет код на наличие синтаксических ошибок.
  • | grep -v "No syntax errors detected" — этот фильтр удаляет все строки, содержащие указанное сообщение, оставляя только те, которые указывают на наличие ошибок.

Альтернативный метод

Вы также можете использовать следующую команду, которая применяет конструкцию xargs, чтобы выводить ошибки параллельно:

find . -type f -name '*.php' -print0 | xargs -0 -n1 -P4 php -l -n | grep -v "No syntax errors detected"

Здесь:

  • -print0 и -0 используются для корректной обработки имен файлов, содержащих пробелы и специальные символы.
  • -n1 указывает на то, что нужно передавать по одному аргументу в каждую команду php -l.
  • -P4 позволяет выполнять команду параллельно для ускорения обработки.

Заключение

Оптимизация вывода линтинга PHP игнорируя ненужные сообщения делает проверку кода более эффективной и удобной, особенно в контексте современных практик разработки. Выбор подхода зависит от ваших потребностей: если необходимо обрабатывать файлы параллельно, используйте xargs, а если для вас важен простой вариант — воспользуйтесь -exec.

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

Оцените материал
Добавить комментарий

Капча загружается...