Download the PHP package gian-tiaga/phpstan-strict-rules without Composer
On this page you can find all versions of the php package gian-tiaga/phpstan-strict-rules. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download gian-tiaga/phpstan-strict-rules
More information about gian-tiaga/phpstan-strict-rules
Files in gian-tiaga/phpstan-strict-rules
Package phpstan-strict-rules
Short Description Strict PHPStan rules for PHP applications
License MIT
Homepage https://github.com/falur/phpstan-strict-rules
Informations about the package phpstan-strict-rules
PHPStan Strict Rules
gian-tiaga/phpstan-strict-rules — набор строгих PHPStan-правил для PHP-кода.
Сообщения правил остаются на английском языке. Это developer-инструмент, а не пользовательский интерфейс приложения.
Установка
Подключите extension в phpstan.neon:
Настраиваются интерфейс разрешённой массовой записи, имена атрибутов доступа к маршруту и интерфейс интеграционного события.
Правила
declare(strict_types=1)
Каждый анализируемый PHP-файл должен начинаться с declare(strict_types=1).
Идентификатор:
gianTiaga.phpstanStrictRules.missingStrictTypes.
Запрещено:
Разрешено:
Именованные аргументы
Если в вызове два или больше обычных аргумента, они должны быть именованными.
Идентификатор:
gianTiaga.phpstanStrictRules.namedArgumentsRequired.
Запрещено:
Разрешено:
Один позиционный аргумент разрешён. Вызовы PHPUnit assertions не проверяются этим правилом, потому что PHPUnit запрещает named arguments для своих assert-методов.
Строгие сравнения
Loose comparison запрещён.
Идентификаторы:
gianTiaga.phpstanStrictRules.looseEqualForbidden;gianTiaga.phpstanStrictRules.looseNotEqualForbidden.
Запрещено:
Разрешено:
Точные PHPDoc-типы
PHPDoc-контракты не должны содержать неявный mixed, вложенные массивы и array shape.
Идентификаторы:
gianTiaga.phpstanStrictRules.noImplicitMixedType;gianTiaga.phpstanStrictRules.noNestedArrayType;gianTiaga.phpstanStrictRules.noArrayShapeType.
Запрещено:
Разрешено:
Если данные сложные, лучше вынести их в DTO или именованную коллекцию, а не описывать многоуровневым массивом.
Set-based запись
insert(), update() и delete() на Cycle\Database\DatabaseInterface запрещены везде, кроме классов, реализующих интерфейс-маркер санкционированной записи. Обычное изменение состояния идёт через сущность и EntityManager, поэтому массовая запись остаётся узкой осознанной дверью. EntityManager::delete($entity) под правило не попадает: у него другой тип получателя.
Идентификатор:
gianTiaga.phpstanStrictRules.setBasedWriteForbidden.
Запрещено:
Разрешено:
Параметр setBasedWriteMarkerInterface
Имя интерфейса-маркера задаётся параметром конфигурации: пакет правил не знает классов конкретного приложения, поэтому свой маркер объявляет каждый проект и каждый пакет.
Значение по умолчанию — пустая строка. Она не освобождает ни один класс: пока маркер не задан, set-based запись запрещена везде, и сообщение правила называет сам параметр. Так забытая настройка проверку не ослабляет.
Маркер должен быть автозагружаемым интерфейсом: правило проверяет его через рефлексию, а не по тексту.
Объявление доступа к маршруту
Метод с атрибутом Spiral Route обязан иметь ровно один атрибут из списка
routeAccessAttributeClasses. Методы без Route правило не проверяет.
Идентификатор:
gianTiaga.phpstanStrictRules.singleRouteAccessAttributeRequired.
Список по умолчанию пуст, и тогда правило отключено. Пакет не знает атрибуты приложения и получает их только из его конфигурации.
Форма интеграционного события
Класс, реализующий интерфейс интеграционного события, обязан собираться обратно из своей полезной нагрузки. Правило рекурсивно обходит свойства самого события и свойства вложенных объектов и требует, чтобы у каждого свойства был одноимённый параметр конструктора, а его тип был описан.
Допустимы string, int, float, bool, null, backed enum, DateTimeImmutable, вложенный объект по тем же правилам, list<T> и array<string, T> с указанным T. Видимость свойства не ограничена; статическое свойство полем события не является.
Идентификаторы:
gianTiaga.phpstanStrictRules.integrationEventFieldTypeForbidden;gianTiaga.phpstanStrictRules.integrationEventConstructorParameterRequired.
Запрещено:
Разрешено:
Параметр integrationEventInterface
Имя интерфейса события задаётся параметром конфигурации: пакет правил не знает классов конкретного приложения.
Значение по умолчанию — пустая строка: пока интерфейс не задан, правило не проверяет ни один класс. Интерфейс должен быть автозагружаемым — правило работает через рефлексию, а не по тексту.
Локальная разработка
Если пакет подключён через path repository и вы меняете сами правила, иногда нужно очистить кеш PHPStan: