Nette X-Ray

X-Ray показывает вам, как именно ваш проект использует экосистему Nette: какие методы, фильтры Latte и ключи конфигурации вы действительно используете.

Вам когда-нибудь было интересно, какие методы Nette вы вызываете чаще всего? Какие фильтры Latte вы действительно используете? Трогает ли ещё кто-нибудь тот старый ключ конфигурации? X-Ray просматривает ваш код статическим анализом и отвечает на это понятным HTML-отчётом.

Что анализируется

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

PHP и PHPT Шаблоны Latte Конфигурация NEON
вызовы методов и функций теги и n:атрибуты образцы сервисов DI
аргументы (позиционные, именованные) фильтры и их аргументы регистрация расширений
использование возвращаемого значения функции и константы использование секций
обращение к свойствам варианты синтаксиса ключи конфигурации
наследование классов и трейты    
переопределения методов    

Установка

Установите его через Composer как зависимость для разработки:

composer require --dev nette/xray

Он требует PHP 8.2 или новее и работает на PHPStan 2.1. Он работает с любым проектом, использующим Nette, Latte, Tracy, Dibi или Texy.

Использование

Укажите ему свои каталоги с исходным кодом:

vendor/bin/xray app/ src/

Через мгновение вы получите интерактивный HTML-отчёт (xray-report.html), который можно открыть в браузере, а вдобавок машиночитаемые данные (xray-report.json):



Nette X-Ray
===========

Scanning PHP files ... 142/142 done
Scanning NEON files ... 4/4 done
Scanning Latte files ... 87/87 done

Reports saved to:
  xray-report.json
  xray-report.html

Конфигурация

Создайте в корне проекта файл nette-xray.neon, чтобы настроить поведение:

# Пути анализа по умолчанию (используются, когда аргументы командной строки не заданы)
paths:
	- app
	- src

# Дополнительные каталоги для исключения (vendor, temp, node_modules, .git исключены по умолчанию)
excludeDirs:
	- generated

# Автоматическая отправка без вопросов
upload: false