Skip to content

Линтеры

Линтеры необходимы для соблюдения код стайла и автоматического форматирования кода.

Для этих нужд используется линтеры Codesniffer и php-fixer

Codesniffer

Codesniffer работает в IDE PhpStorm и подсвечивает ошибочные конструкции.

Установка

  1. Установить утилиту
json
  "require-dev": {
	"squizlabs/php_codesniffer": "3.*"
  }
  1. В настройках PhpStorm указать путь до исполняемого файла

codesniffer-path Сохранить и закрыть окно настроек (иначе нельзя будет выбрать кастомные правила)

  1. Указать кастомные правила анализа
backend/local/modules/realweb.api/lib/Model/Phpcs/ruleset.xml

codesniffer-rule-path

Правила линтера

Правила код стайла runway основаны на PSR12, но имеют ряд особенностей.

В частности добавлены следующие проверки:

  • Проверка на название свойств класса
  • Проверка на название переменных
  • Проверка на использование объявленной переменной
  • Проверка на название метода класса
  • Проверка на объявление возвращаемого типа

Общие правила

php-fixer

Позволяет автоматически форматировать код согласно код стайлу

Установка

  1. В корне проекта разместить файл php-cs-fixer.dist.php
  2. Установить утилиту
json
  "require-dev": {
	"friendsofphp/php-cs-fixer": "dev-master"
  }
  1. В настройках PhpStorm указать путь до исполняемого файла

php-fixer-path

  1. Указать кастомные правила анализа

php-fixer-rules

Запуск по нажатию быстрых клавиш

Для того чтобы запускать автоматическое форматирование по нажатию быстрых клавиш, необходимо добавить "внешний инструмент" В качестве настроек указываем

Program: $Sourcepath$/backend/local/vendor/bin/php-cs-fixer
Arguments: fix --allow-risky=yes
Working directory: $Sourcepath$

php-fixer-external-1

И повесить на эту "программу" удобное сочетание клавиш

php-fixer-external-2

$Sourcepath$

Для опредления переменной $Sourcepath$ необходимо указать ее в настройках директорий проекта phpstorm-sourcepath

Другой $Sourcepath$

В случае необходимости определения другого source path на проекте путь к программе и рабочей директории изменяются

Program: $Sourcepath$/../../../../local/vendor/bin/cs-fixer
Arguments: fix --allow-risky=yes
Working directory: $Sourcepath$/../../../../

Для работы программы с использованием переменной $Sourcepath$ - $Sourcepath$ должна быть единственной.

PhpStorm linter Namespace error

После установки директории backend (Или любой другой) в качестве Source директории проекта PhpStorm начнет ругаться на неправильное именование Namespace

PhpStorm linter error

Namespace name doesn't match the PSR-0/PSR-4 project structure

PhpStorm linter error

Для того, чтобы убрать ошибку необходимо добавить директорию local/modules/realweb.api.module/lib (или ту, где возникает ошибка) в качестве Source и указать префикс для Namespace \Realweb\Api\Module

PhpStorm linter error fix

php8.3

После установки php8.3 линтер начнет отдавать ошибку

text
PHP needs to be a minimum version of PHP 7.4.0 and maximum version of PHP 8.2.*.
Current PHP version: 8.3.2-1+ubuntu22.04.1+deb.sury.org+1.
To ignore this requirement please set `PHP_CS_FIXER_IGNORE_ENV`.
If you use PHP version higher than supported, you may experience code modified in a wrong way.
Please report such cases at https://github.com/PHP-CS-Fixer/PHP-CS-Fixer .

Для обхода этой ошибки размещаем в директории $ProjectFileDir$/backend/local/vendor/bin/ исполняемый файл с названием cs-fixer с содержанием:

shell
#!/usr/bin/env php
<?php

putenv('PHP_CS_FIXER_IGNORE_ENV=1');
include __DIR__ . '/php-cs-fixer';

Теперь можно запускать этот файл вместо php-cs-fixer.