ergebnis/phpstan-rules
A set of extra PHPStan rules to enforce stricter, opinionated code standards in PHP projects. Install via Composer and include rules.neon (auto via phpstan/extension-installer) to catch issues like named arguments, class design, and more.
For a full diff see [2.8.0...2.9.0][2.8.0...2.9.0].
CallLikes\NoNamedArgumentRule, which reports an error when an anonymous function, a function, or a method is invoked using a named argument ([#914]), by [@localheinz]phpstan/phpstan:^2.1.8 ([#938]), by [@localheinz]For a full diff see [2.7.0...2.8.0][2.7.0...2.8.0].
allRules parameter to allow disabling and enabling all rules ([#913]), by [@localheinz]Expressions\NoAssignByReferenceRule, which reports an error when a variable is assigned by reference ([#914]), by [@localheinz]For a full diff see [2.6.1...2.7.0][2.6.1...2.7.0].
Closures\NoParameterPassedByReferenceRule, Functions\NoParameterPassedByReferenceRule, Methods\NoParameterPassedByReferenceRule, which report an error when a closure, a function, or a method has a parameter that is passed by reference ([#911]), by [@localheinz]Functions\NoReturnByReferenceRule and Methods\NoReturnByReferenceRule, which report an error when a function or a method returns by reference ([#912]), by [@localheinz]For a full diff see [2.6.0...2.6.1][2.6.0...2.6.1].
Methods\NoParameterWithNullableTypeDeclarationRule to use the appropriate error identifier ([#902]), by [@manuelkiessling]For a full diff see [2.5.2...2.6.0][2.5.2...2.6.0].
phpstan/phpstan:^2.0.0 ([#873]), by [@localheinz]For a full diff see [2.5.1...2.5.2][2.5.1...2.5.2].
Closures\NoNullableReturnTypeDeclarationRule, Closures\NoParameterWithNullableTypeDeclarationRule, Functions\NoNullableReturnTypeDeclarationRule, Functions\NoParameterWithNullableTypeDeclarationRule, Methods\NoNullableReturnTypeDeclarationRule, Methods\NoParameterWithNullableTypeDeclarationRule to detect cases where null is referenced with incorrect case or relative to the root namespace ([#897]), by [@localheinz]For a full diff see [2.5.0...2.5.1][2.5.0...2.5.1].
Methods\FinalInAbstractClassRule to ignore Doctrine embeddables and entities ([#396]), by [@localheinz]Expressions\NoCompactRule to detect usages of compact() with incorrect case ([#889]), by [@localheinz]Methods\PrivateInFinalClassRule to use more appropriate message when detecting a protected method in an anonymous class ([#890]), by [@localheinz]Methods\PrivateInFinalClassRule to ignore protected methods from traits ([#891]), by [@localheinz]Methods\PrivateInFinalClassRule to ignore protected methods with phpunit/phpunit attributes requiring methods to be protected ([#863]), by [@cosmastech]Methods\PrivateInFinalClassRule to ignore protected methods with phpunit/phpunit annotations requiring methods to be protected ([#895]), by [@cosmastech]For a full diff see [2.4.0...2.5.0][2.4.0...2.5.0].
nikic/php-parser ([#878]), by [@localheinz]For a full diff see [2.3.0...2.4.0][2.3.0...2.4.0].
For a full diff see [2.2.0...2.3.0][2.2.0...2.3.0].
For a full diff see [2.1.0...2.2.0][2.1.0...2.2.0].
nikic/php-parser:^5.0.0 ([#735]), by [@localheinz]For a full diff see [2.13.0...2.13.1][2.13.0...2.13.1].
Files\NoPhpstanIgnoreRule to traverse into all nodes ([#1011]), by [@localheinz]For a full diff see [2.12.0...2.13.0][2.12.0...2.13.0].
Files\NoPhpstanIgnoreRule, which reports an error when a [@phpstan-ignore](https://github.com/phpstan-ignore), [@phpstan-ignore-line](https://github.com/phpstan-ignore-line), or [@phpstan-ignore-next-line](https://github.com/phpstan-ignore-next-line) tag is used to suppress an error ([#1009]), by [@localheinz]phpstan/phpstan:^2.1.35 ([#1010]), by [@localheinz]For a full diff see [2.11.0...2.12.0][2.11.0...2.12.0].
For a full diff see [2.10.5...2.11.0][2.10.5...2.11.0].
For a full diff see [2.10.4...2.10.5][2.10.4...2.10.5].
Methods\NoNamedArgumentRule to handle calls to constructors of variable class names ([#957]), by [@localheinz]Methods\NoNamedArgumentRule to describe known calls only ([#958]), by [@localheinz]For a full diff see [2.10.3...2.10.4][2.10.3...2.10.4].
Methods\NoNamedArgumentRule to handle static calls on variable expressions ([#947]), by [@localheinz]Methods\NoNamedArgumentRule to handle calls on invokables ([#948]), by [@localheinz]Methods\NoNamedArgumentRule to handle calls on callables assigned to properties ([#949]), by [@localheinz]Methods\NoNamedArgumentRule to handle all other calls with generic error message ([#951]), by [@localheinz]For a full diff see [2.10.2...2.10.3][2.10.2...2.10.3].
Methods\InvokeParentHookMethodRule to ignore comments ([#944]), by [@localheinz]For a full diff see [2.10.1...2.10.2][2.10.1...2.10.2].
Methods\InvokeParentHookMethodRule ([#943]), by [@localheinz]For a full diff see [2.10.0...2.10.1][2.10.0...2.10.1].
Methods\InvokeParentHookMethodRule ([#940]), by [@localheinz]For a full diff see [2.9.0...2.10.0][2.9.0...2.10.0].
Methods\InvokeParentHookMethodRule, which reports an error when a hook method that overrides a hook method in a parent class does not invoke the overridden hook method in the expected order ([#939]), by [@localheinz]For a full diff see [2.0.0...2.1.0][2.0.0...2.1.0].
For a full diff see [1.0.0...2.0.0][1.0.0...2.0.0].
methodsAllowedToUseContainerTypeDeclarations parameter to allow configuring a list of method names that are allowed to have container parameter type declarations ([#541), by [@localheinz]Expressions\NoEmptyRule ([#525]), by [@enumag]For a full diff see [0.15.3...1.0.0][0.15.3...1.0.0].
phpstan/phpstan:^1.0.0 and dropped support for non-stable versions of phpstan/phpstan ([#381]), by [@rpkamp]Classes\FinalRule to not report an error when a non-final class has a Doctrinbe\ORM\Mapping\Entity attribute ([#395]), by [@localheinz]For a full diff see [0.9.0...0.9.1][0.9.0...0.9.1].
phpstan/extension-installer ([#89]), by [@localheinz]For a full diff see [0.8.1...0.9.0][0.8.1...0.9.0].
Classes\FinalRule to ignore Doctrine entities when they are annotated ([#84]), by [@localheinz]For a full diff see [0.8.0...0.8.1][0.8.0...0.8.1].
Expressions\NoIssetRule ([#83]), by [@localheinz]For a full diff see [0.7.1...0.8.0][0.7.1...0.8.0].
Expressions\NoIssetRule, which reports an error when the language construct isset() is used ([#81]), by [@localheinz]For a full diff see [0.7.0...0.7.1][0.7.0...0.7.1].
Classes\NoExtendsRule to allow a set of default classes to be extended ([#73]), by [@localheinz]For a full diff see [0.6.0...0.7.0][0.6.0...0.7.0].
Classes\NoExtendsRule, which reports an error when a class extends a class that is not allowed to be extended ([#68]), by [@localheinz]For a full diff see [0.5.0...0.6.0][0.5.0...0.6.0].
phpstan/phpstan:~0.11.0 ([#65]), by [@localheinz]For a full diff see [0.4.0...0.5.0][0.4.0...0.5.0].
Methods\NoConstructorParameterWithDefaultValueRule, which reports an error when a constructor of an anonymous class or a class has a parameter with a default value ([#45]), by [@localheinz]$allowAbstractClasses and $classesNotRequiredToBeAbstractOrFinal to allow configuration of ClassesFinalRule` ([#51]), by [@localheinz]Classes\AbstractOrFinalRule after merging behaviour into Classes\FinalRule ([#51]), by [@localheinz]Classes\FinalRule ([#53]), by [@localheinz]For a full diff see [0.3.0...0.4.0][0.3.0...0.4.0]
phpstan/phstan ([#39]), by [@localheinz]phpstan/phstan ([#42]), by [@localheinz]For a full diff see [0.2.0...0.3.0][0.2.0...0.3.0]
Functions\NoNullableReturnTypeDeclarationRule, which reports an error when a function has a nullable return type declaration, and Methods\NoNullableReturnTypeDeclarationRule, which reports an error when a method declared in an anonymous class, a class, or an interface has a nullable return type declaration ([#16]), by [@localheinz]Closures\NoParameterWithNullDefaultValueRule, which reports an error when a closure has a parameter with null as default value ([#26]), by [@localheinz]Closures\NoNullableReturnTypeDeclarationRule, which reports an error when a closure has a nullable return type declaration ([#29]), by [@localheinz]Functions\NoParameterWithNullDefaultValueRule, which reports an error when a function has a parameter with null as default value ([#31]), by [@localheinz]Methods\NoParameterWithNullDefaultValueRule, which reports an error when a method declared in an anonymous class, a class, or an interface has a parameter with null as default value ([#32]), by [@localheinz]Closures\NoParameterWithNullableTypeDeclarationRule, which reports an error when a closure has a parameter with a nullable type declaration ([#33]), by [@localheinz]Functions\NoParameterWithNullableTypeDeclarationRule, which reports an error when a function has a parameter with a nullable type declaration ([#34]), by [@localheinz]Methods\NoParameterWithNullableTypeDeclarationRule, which reports an error when a method declared in an anonymous class, a class, or an interface has a parameter with a nullable type declaration ([#35]), by [@localheinz]rules.neon, so you can easily enable all rules by including it in your phpstan.neon ([#37]), by [@localheinz]For a full diff see [0.1.0...0.2.0][0.1.0...0.2.0]
Classes\FinalRule, which reports an error when a non-anonymous class is not final, ([#4]), by [@localheinz]$excludeClassNames argument to the constructors of Classes\AbstractOrFinalRule and Classes\FinalRule to allow whitelisting of classes, ([#11]), by [@localheinz]For a full diff see [0.15.2...0.15.3][0.15.2...0.15.3].
For a full diff see [0.15.1...0.15.2][0.15.1...0.15.2].
For a full diff see [0.15.0...0.15.1][0.15.0...0.15.1].
Methods\FinalInAbstractClass rule to allow non-final public constructors in abstract classes ([#248]), by [@Slamdunk]For a full diff see [0.14.4...0.15.0][0.14.4...0.15.0].
Classes\PHPUnit\Framework\TestCaseWithSuffixRule, which reports an error when a concrete class extending PHPUnit\Framework\TestCase does not have a Test suffix ([#225]), by [@localheinz]For a full diff see [0.14.3...0.14.4][0.14.3...0.14.4].
[@ORM](https://github.com/ORM)\Mapping\Entity annotations in FinalRule ([#202]), by [@localheinz]For a full diff see [0.14.2...0.14.3][0.14.2...0.14.3].
DeclareStrictTypesRule when it is a shebang ([#186]), by [@Great-Antique]For a full diff see [0.14.1...0.14.2][0.14.1...0.14.2].
For a full diff see [0.14.0...0.14.1][0.14.0...0.14.1].
replace configuration from composer.json ([#161]), by [@localheinz]For a full diff see [0.13.0...0.14.0][0.13.0...0.14.0].
Allowed installation of phpstan/phpstan:~0.12.0 ([#147]), by [@localheinz]
Renamed vendor namespace Localheinz to Ergebnis after move to [@ergebnis] ([#157]), by [@localheinz]
Run
composer remove localheinz/phpstan-rules
and
composer require ergebnis/phpstan-rules
to update.
Run
find . -type f -exec sed -i '.bak' 's/Localheinz\\PHPStan/Ergebnis\\PHPStan/g' {} \;
to replace occurrences of Localheinz\PHPStan with Ergebnis\PHPStan.
Run
find -type f -name '*.bak' -delete
to delete backup files created in the previous step.
Moved parameters into ergebnis section to prevent conflicts with global parameters ([#158]), by [@localheinz]
Where previously phpstan.neon looked like the following
parameters:
allowAbstractClasses: true
classesAllowedToBeExtended: []
classesNotRequiredToBeAbstractOrFinal: []
interfacesImplementedByContainers:
- Psr\Container\ContainerInterface
these parameters now need to be moved into an ergebnis section:
parameters:
- allowAbstractClasses: true
- classesAllowedToBeExtended: []
- classesNotRequiredToBeAbstractOrFinal: []
- interfacesImplementedByContainers:
- - Psr\Container\ContainerInterface
+ ergebnis:
+ allowAbstractClasses: true
+ classesAllowedToBeExtended: []
+ classesNotRequiredToBeAbstractOrFinal: []
+ interfacesImplementedByContainers:
+ - Psr\Container\ContainerInterface
For a full diff see [0.12.2...0.13.0][0.12.2...0.13.0].
Methods\PrivateInFinalClassRule which reports an error when a method in a final class is protected when it could be private ([#126]), by [@localheinz]For a full diff see [0.12.1...0.12.2][0.12.1...0.12.2].
Methods\FinalInAbstractClassRule to avoid inappropriate errors ([#132]), by [@localheinz]For a full diff see [0.12.0...0.12.1][0.12.0...0.12.1].
Methods\NoParameterWithContainerTypeDeclarationRule to avoid errors where class self is not found ([#128]), by [@localheinz]For a full diff see [0.11.0...0.12.0][0.11.0...0.12.0].
Methods\NoParameterWithContainerTypeDeclarationRule, which reports an error when a method has a type declaration that corresponds to a known dependency injection container or service locator ([#122]), by [@localheinz]Methods\FinalInAbstractClassRule, which reports an error when a concrete public or protected method in an abstract class is not final ([#123]), by [@localheinz]For a full diff see [0.10.0...0.11.0][0.10.0...0.11.0].
Files\DeclareStrictTypesRule, which reports an error when a PHP file does not have a declare(strict_types=1) declaration ([#79]Expressions\NoEmptyRule, which reports an error when the language construct empty() is used ([#110]), by [@localheinz]Expressions\NoEvalRule, which reports an error when the language construct eval() is used ([#112]), by [@localheinz]Expressions\NoErrorSuppressionRule, which reports an error when @ is used to suppress errors ([#113]), by [@localheinz]Expressions\NoCompactRule, which reports an error when the function compact() is used ([#116]), by [@localheinz]Statements\NoSwitchRule, which reports an error when the statement switch() is used ([#117]), by [@localheinz]nikic/php-parser:^4.2.3 ([#102]), by [@localheinz]phpstan/phpstan:~0.11.15 ([#103]), by [@localheinz]For a full diff see [0.9.1...0.10.0][0.9.1...0.10.0].
phpstan/phpstan:~0.11.7 ([#91]), by [@localheinz]parametersSchema configuration to rules.neon, which is required for use with bleedingEdge.neon, see phpstan/phpstan@54a125d ([#93]), by [@localheinz]For a full diff see 362c7ea...0.1.0.
Classes\AbstractOrFinalRule, which reports an error when a non-anonymous class is neither abstract nor final, (#1), by [@localheinz][@cosmastech]: https://github.com/cosmastech [@enumag]: https://github.com/enumag [@ergebnis]: https://github.com/ergebnis [@Great-Antique]: https://github.com/Great-Antique [@localheinz]: https://github.com/localheinz [@manuelkiessling]: https://github.com/manuelkiessling [@nunomaduro]: https://github.com/nunomaduro [@rpkamp]: https://github.com/rpkamp [@Slamdunk]: https://github.com/Slamdunk
How can I help you explore Laravel packages today?