Этот документ показывает, что именно делает phew с реальными view-файлами, где HTML и PHP перемешаны.
flowchart LR
A[Yii2 view file] --> B[Tokenize HTML + PHP]
B --> C[Build AST]
C --> D[Format HTML blocks]
C --> E[Format PHP blocks]
D --> F[Write final text]
E --> F
phew не делает магию "по регуляркам". Он строит структуру и уже потом печатает код заново.
- Конструкции
if/elseif/else,foreach,for,while,switch/caseв alt-стиле и brace-стиле. - Блоки
<?= ... ?>и<?php ... ?>. - Большие конфиги виджетов (
ActiveForm,GridView,DetailView,Nav,Pjax,Modal). - Длинные цепочки вызовов и длинные списки аргументов.
- Базовые пробелы PHP (
if (...),'key' => $value,$a = $b, запятые).
- Отступ всегда
4пробела. - Лимит строки целится в
120символов. - В конце файла всегда ровно один перевод строки.
- Повторный прогон не меняет уже отформатированный файл.
Для alt-синтаксиса важно, чтобы между switch и первым case не было вывода.
Поэтому форматтер приводит код к такому виду:
<?php switch ($viewModel->step):
case 'intro': ?>
<div class="step step-intro">...</div>
<?php break; ?>
<?php endswitch; ?>Это валидный шаблонный PHP и безопасный формат.
Если в начале файла идут соседние PHP-блоки с use, declare, docblock, phew сначала склеивает их, а потом печатает как аккуратный header.
Пример целевого стиля:
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
/**
* @var \common\models\User $model
*/
?>За счет этого не появляется шум ?><?php между соседними header-фрагментами.
Порядок действий для длинных выражений:
- Пробует разбить тернарник.
- Пробует разбить вызов по аргументам.
- Если есть вложенные массивы, раскрывает их по уровням.
- Для
<?= ... ?>отдельно пробует цепочки->и конкатенации..
Это особенно полезно для больших Yii-конфигов:
- Массивы
columns,attributes,items. - Длинные
Html::a(...),Url::to(...),ArrayHelper::map(...).
- Содержимое
<script>,<style>,<textarea>. - Текст в
registerJs(...),registerCss(...). - Текст heredoc/nowdoc и длинные многострочные литералы.
- Бизнес-логику и семантику PHP-кода.
Если нужен стиль JS/CSS, применяй профильный JS/CSS форматтер отдельно.
# Локально привести шаблоны к стилю
phew -w views/
# Проверить, что кодовая база стабильно проходит проверки
just check# Посмотреть токены
phew --tokens path/to/view.php
# Посмотреть AST
phew --tree path/to/view.phpЕсли токены уже "кривые", проблема в распознавании входа. Если токены нормальные, а вывод спорный, проблема в правилах форматирования.
- Создай файл в
tests/fixtures/input/NN_name.php. - Сгенерируй expected:
bin/update-fixtures. - Проверь регрессии:
just fixtures. - Проверь юниты:
just test.
Это самый быстрый путь зафиксировать поведение для нового шаблонного кейса.