• Время чтения ~1 мин
  • 20.01.2023

Laravel Pint - горячая новинка от команды Laravel. Отличная оболочка вокруг PHP CS Fixer, которая является моим инструментом для стандартов кода.

Ранее я писал о выпуске Laravel Pint, когда он был впервые выпущен. По умолчанию он будет следовать стандарту laravel из коробки, пользовательскому стандарту команды Laravel.

Но что мы делаем, если хотим чего-то другого? Давайте немного углубимся.

Если вы читаете документацию, она очень информативна относительно того, что вы можете сделать с Laravel Pint. Вы можете реализовать много правил в удобном JSON-файле, но какие из них работают хорошо, и что вы должны делать?

Я собираюсь провести вас через мою личную конфигурацию Laravel Pint и объяснить, что и почему я выбираю эти настройки.

Выравнивание многострочных комментариев

Это правило align_multiline_comment позволит вам исправить любые комментарии, которые я называю «borked». Все они вышли из равновесия и выглядят странно. Это не имеет значения с точки зрения вашего кода, но это раздражает при чтении его, поскольку ваши глаза будут привлечены к нему, а не к тому, на чем вы хотите сосредоточиться.

Отступ массива

Правило array_indentation позволит вам исправить любые создаваемые массивы, которые, опять же, по какой-то причине стали «скучными». Еще одно правило очистки кода, которое приведет в порядок, где пробелы могут быть использованы в неправильном месте и т. Д. и так далее.

Синтаксис массива

Правило array_syntax может не понадобиться в зависимости от возраста кода. Это правило изменит старый синтаксис array() на новый синтаксис []. Я сохраняю это на случай, если у меня есть старый код или я работаю с несколькими разработчиками, которые могут впасть в старые привычки.

Пустая строка после пространства имен

Правило blank_line_after_namespace — это правило ведения домашнего хозяйства, которое я использую для обеспечения того, чтобы в объявлении пространства имен в любом классе всегда была

пустая строка.Пустая строка после открывающего

тега Правило blank_line_after_opening_tag аналогично предыдущему правилу, но применяет пустую строку после открывающего тега PHP. Мне нравится держать свой код организованным и единообразным - эти правила позволяют это сделать.

Объединение последовательных наборов

Combine_consecutive_issets правило — это правило, которое научило меня, что я могу использовать более одного аргумента в проверке набора, что было для меня чем-то новым. Это преобразует любой код, который объединяет одну или несколько проверок isset, в одну чистую проверку.

// before
if (isset($a) && isset($b))

// after
if (isset($a, $b))

Объединение последовательных несетов

Правило combine_consecutive_unsets похоже на приведенное выше правило, о чем я не знал, что могу это сделать, и заставляет меня использовать лучший код.

// before
unset($a);
unset($b);

// after
unset($a, $b);

Concat Space

Правило concat_space является одним из моих любимых. Это заставляет пробелы между любой струнной конкатенцией - это одна из вещей, которые я ненавижу не видеть. Мне нравится, что в моем коде есть место, а не все раздавлено, как будто пространство замедлит его.

// before
$name = $request->get('name');
$message = 'Hello '.$name;

// after
$message = 'Hello ' . $name;

Объявить скобки

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

// before
declare( strict_type = 1 );

// after
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

Правило final_class — это то, о чем я буду преследовать Майкла Диринду. Это заставляет все ваши классы быть окончательными в вашем приложении. Однако будьте осторожны, так как это сделает каждый класс окончательным, что может привести к поломкам при использовании вредителя или расширении базового контроллера в Laravel. К счастью для меня - я не беспокоюсь об этом так сильно, так как я не использую много наследства.

Последний внутренний класс

Правило final_internal_class — это способ борьбы с вышеуказанным правилом. Если вы не хотите, чтобы класс был окончательным, поскольку вы планируете его расширить, убедитесь, что в конфигурации для этого правила установлено значение false. Это скажет окончательному правилу игнорировать это и что внутренние классы не должны быть окончательными.

{
  "final_internal_class": false
}

Полные строгие типы

Правило fully_qualified_strict_types заставит импортировать класс как инструкцию use в коде вместо объявления полного имени класса в качестве типа в методах и т. д. Это сохраняет код чистым, а чистый код — счастливым кодом.

// before
public function __invoke(\Illuminate\Http\Request $request)

// after
public function __invoke(Request $request)

Есть еще много правил, которые я использую, поэтому вместо того, чтобы утомлять вас каждым из них, я поделюсь своей конфигурацией, также взгляните на PHP CS конфигурационный веб-сайт, чтобы вы могли видеть, что такое правила и что они делают.

Вот моя текущая конфигурация , но имейте в виду, что я часто настраиваю это, так как я чувствую, что стандарты кода должны быть живым существом. Это должно быть что-то, что вы постоянно переоцениваете и смотрите, соответствует ли оно вашим потребностям.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297