Laravel Pint: Настройка базовой конфигурации
Ранее я писал о выпуске Laravel Pint. По умолчанию он будет следовать стандарту laravel из коробки, стандарту команды Laravel.
Но что делать, если мы хотим чего-то другого? Давайте немного углубимся.
Если вы читали документацию, она очень информативна в отношении того, что вы можете делать с Laravel Pint. Вы можете реализовать множество правил в удобном JSON файле. Но какие из них работают хорошо, и что вам следует сделать?
Я собираюсь привести вас через свою конфигурацию Laravel Pint и объяснить, почему я выбрал эти настройки.
Рассматриваемый фрагмент конфигурации:
{
"preset": "psr12",
"rules": {
"align_multiline_comment": true,
"array_indentation": true,
"array_syntax": true,
"blank_line_after_namespace": true,
"blank_line_after_opening_tag": true,
"combine_consecutive_issets": true,
"combine_consecutive_unsets": true,
"concat_space": true,
"declare_parentheses": true,
"declare_strict_types": true,
"explicit_string_variable": true,
"final_class": true,
"final_internal_class": false,
"fully_qualified_strict_types": true,
}
}Выравнивание многострочных комментариев
Правило align_multiline_comment позволяет исправить любые комментарии, которые я называю скукоженные
. Они не выровнены и выглядят странно. Это не относится к коду, но раздражает при чтении, поскольку ваши глаза будут прикованы к нему, а не к тому на чём хотите сосредоточиться.
Отступ массива
Правило array_indentation исправляет любые создаваемые вами массивы, который по какой-то причине стали скукоженными
. Ещё одно правило очистки кода убирающее пробелы используемые не в том месте и т.д.
Синтаксис массива
Правило array_syntax может не понадобится, в зависимости от возраста вашего кода. Оно изменит старый синтаксис array(), на новый []. Я держу его на случай, если у меня встретится старый код или я работаю с несколькими разработчиками, у которых могут быть старые привычки.
Пустая строка после Namespace
Правило blank_line_after_namespace — вспомогательное правило, чтобы убедиться, что под объявлением namespace всегда есть пустая строка.
Пустая строка после открытия тега
Правило blank_line_after_opening_tag похоже на предыдущее, но требует пустой строки открывающегося PHP тега. Мне нравится, когда мой код организован и единообразен — эти правила позволяют сделать это.
Объединить последовательные isset
Правило combine_consecutive_issets научило меня использовать более одного аргумента проверки isset, что было для меня чем-то новым. Это преобразует любой код, объединяющий одну или несколько проверок isset, в одну чистую проверку.
// до
if (isset($a) && isset($b))
// после
if (isset($a, $b))Объединить последовательные unset
Правило combine_consecutive_unsets похоже на предыдущее. Я не знал, что могу делать так, и это позволяет мне улучшать код.
// до
unset($a);
unset($b);
// после
unset($a, $b);Отступы конкатенации
Правило concat_space — одно из моих любимых. Оно устанавливает пробелы между любой конкатенацией строк. Мне нравится, когда в коде есть свободное место, а не сжато.
// до
$name = $request->get('name');
$message = 'Hello '.$name;
// после
$message = 'Hello ' . $name;Скобки объявлений
Правило declare_parentheses почти противоположно предыдущему правилу. Везде, где я использую оператор declare, я хочу убедиться, что вокруг него нет лишних пробелов.
// до
declare( strict_type = 1 );
// после
declare(strict_types=1);Объявление строгих типов
Правило declare_strict_types для меня обязательно. Учитывая количество типов, которые используются в коде, хотелось бы убедиться, что строгая типизация включена. Это удобное правило, позволяющее принудительно добавить строгую типизацию без напоминаний. Отлично подходит для Laravel!
declare(strict_types=1);Явная строковая переменная
Мне нравится добавлять правило explicit_string_variable — оно значительно упрощает чтение кода. Везде, где используются неявные переменные в коде, оно сделает их явными, как показано ниже.
$name = 'Steve';
$implicit = "Hello, $name";
$explicit = "Hello {$name}";Финальный класс
Правило final_class — то из-за чего я буду преследовать Michael Dyrynda. Оно заставляет все ваши классы быть финальными в приложении. Однако будьте осторожны, так как это сделает каждый класс финальным, что может привести к поломкам при использовании Pest или расширении базового Контроллера в Laravel. К счастью, я не слишком беспокоюсь об этом, так как не использую много наследования.
Финальный внутренний класс
Правило final_internal_class — способ борьбы с вышеуказанным правилом. Если вы не хотите, чтобы класс был финальным, потому что планируете его расширять, убедитесь, что в вашей конфигурации для этого правила установлено значение false. Это сообщит игнорировать их и что внутренние классы не должны быть финальными.
{
"final_internal_class": false
}Полноценные строгие типы
Правило fully_qualified_strict_types заставляет вас импортировать класс как выражение use вместо объявления полного имени класса в качестве типа в методах и т.д. Это сохранит код чистым, а чистый код — счастливый код.
// до
public function __invoke(\Illuminate\Http\Request $request)
// после
public function __invoke(Request $request)Есть ещё много используемых мной правил, поэтому вместо того, что бы утомлять вас каждым из них, я поделюсь своей конфигурацией. Так же загляните на сайт PHP CS конфигурации, для ознакомления с правилами и что они делают.
Вот моя текущая конфигурация, но имейте в виду, я часто настраивают её так как считаю, что стандарты кода должны быть живыми. Это должно быть что-то новое, что вы постоянно переоцениваете и смотрите, соответствует ли оно вашим потребностям.