phpstan-rules
phpstan-rules copied to clipboard
👓 Provides a composer package with rules for phpstan/phpstan.
phpstan-rules
Provides additional rules for phpstan/phpstan.
Installation
Run
composer require --dev ergebnis/phpstan-rules
Usage
All of the rules provided (and used) by this library are included in rules.neon.
When you are using phpstan/extension-installer, rules.neon will be automatically included.
Otherwise you need to include rules.neon in your phpstan.neon:
includes:
- vendor/ergebnis/phpstan-rules/rules.neon
:bulb: You probably want to use these rules on top of the rules provided by:
Rules
This package provides the following rules for use with phpstan/phpstan:
Ergebnis\PHPStan\Rules\Classes\FinalRuleErgebnis\PHPStan\Rules\Classes\NoExtendsRuleErgebnis\PHPStan\Rules\Classes\PHPUnit\Framework\TestCaseWithSuffixRuleErgebnis\PHPStan\Rules\Closures\NoNullableReturnTypeDeclarationRuleErgebnis\PHPStan\Rules\Closures\NoParameterWithNullableTypeDeclarationRuleErgebnis\PHPStan\Rules\Closures\NoParameterWithNullDefaultValueRuleErgebnis\PHPStan\Rules\Expressions\NoCompactRuleErgebnis\PHPStan\Rules\Expressions\NoEmptyRuleErgebnis\PHPStan\Rules\Expressions\NoErrorSuppressionRuleErgebnis\PHPStan\Rules\Expressions\NoEvalRuleErgebnis\PHPStan\Rules\Expressions\NoIssetRuleErgebnis\PHPStan\Rules\Files\DeclareStrictTypesRuleErgebnis\PHPStan\Rules\Functions\NoNullableReturnTypeDeclarationRuleErgebnis\PHPStan\Rules\Functions\NoParameterWithNullableTypeDeclarationErgebnis\PHPStan\Rules\Functions\NoParameterWithNullDefaultValueRuleErgebnis\PHPStan\Rules\Methods\FinalInAbstractClassRuleErgebnis\PHPStan\Rules\Methods\NoConstructorParameterWithDefaultValueRuleErgebnis\PHPStan\Rules\Methods\NoNullableReturnTypeDeclarationRuleErgebnis\PHPStan\Rules\Methods\NoParameterWithContainerTypeDeclarationRuleErgebnis\PHPStan\Rules\Methods\NoParameterWithNullableTypeDeclarationRuleErgebnis\PHPStan\Rules\Methods\NoParameterWithNullDefaultValueRuleErgebnis\PHPStan\Rules\Methods\PrivateInFinalClassRuleErgebnis\PHPStan\Rules\Statements\NoSwitchRule
Classes
Classes\FinalRule
This rule reports an error when a non-anonymous class is not final.
:bulb: This rule ignores classes that
- use
@Entity,@ORM\Entity, or@ORM\Mapping\Entityannotations - use
Doctrine\ORM\Mapping\Entityattributes
on the class level.
Disallowing abstract classes
By default, this rule allows to declare abstract classes. If you want to disallow declaring abstract classes, you can set the allowAbstractClasses parameter to false:
parameters:
ergebnis:
allowAbstractClasses: false
Excluding classes from inspection
If you want to exclude classes from being inspected by this rule, you can set the classesNotRequiredToBeAbstractOrFinal parameter to a list of class names:
parameters:
ergebnis:
classesNotRequiredToBeAbstractOrFinal:
- Foo\Bar\NeitherAbstractNorFinal
- Bar\Baz\NeitherAbstractNorFinal
Classes\NoExtendsRule
This rule reports an error when a class extends another class.
Defaults
By default, this rule allows the following classes to be extended:
Allowing classes to be extended
If you want to allow additional classes to be extended, you can set the classesAllowedToBeExtended parameter to a list of class names:
parameters:
ergebnis:
classesAllowedToBeExtended:
- Ergebnis\PHPStan\Rules\Test\Integration\AbstractTestCase
- PHPStan\Testing\RuleTestCase
Classes\PHPUnit\Framework\TestCaseWithSuffixRule
This rule reports an error when a concrete class is a sub-class of PHPUnit\Framework\TestCase but does not have a Test suffix.
Closures
Closures\NoNullableReturnTypeDeclarationRule
This rule reports an error when a closure uses a nullable return type declaration.
Closures\NoParameterWithNullableTypeDeclarationRule
This rule reports an error when a closure has a parameter with a nullable type declaration.
Closures\NoParameterWithNullDefaultValueRule
This rule reports an error when a closure has a parameter with null as default value.
Expressions
Expressions\NoCompactRule
This rule reports an error when the function compact() is used.
Expressions\NoEmptyRule
This rule reports an error when the language construct empty() is used.
Expressions\NoEvalRule
This rule reports an error when the language construct eval() is used.
Expressions\NoErrorSuppressionRule
This rule reports an error when @ is used to suppress errors.
Expressions\NoIssetRule
This rule reports an error when the language construct isset() is used.
Files
Files\DeclareStrictTypesRule
This rule reports an error when a non-empty file does not contain a declare(strict_types=1) declaration.
Functions
Functions\NoNullableReturnTypeDeclarationRule
This rule reports an error when a function uses a nullable return type declaration.
Functions\NoParameterWithNullableTypeDeclarationRule
This rule reports an error when a function has a parameter with a nullable type declaration.
Functions\NoParameterWithNullDefaultValueRule
This rule reports an error when a function has a parameter with null as default value.
Methods
Methods\FinalInAbstractClassRule
This rule reports an error when a concrete public or protected method in an abstract class is not final.
Methods\NoConstructorParameterWithDefaultValueRule
This rule reports an error when a constructor declared in
- an anonymous class
- a class
has a default value.
Methods\NoNullableReturnTypeDeclarationRule
This rule reports an error when a method declared in
- an anonymous class
- a class
- an interface
uses a nullable return type declaration.
Methods\NoParameterWithContainerTypeDeclarationRule
This rule reports an error when a method has a type declaration for a known dependency injection container or service locator.
Defaults
By default, this rule disallows the use of type declarations indicating an implementation of
is expected to be injected into a method.
Configuring container interfaces
If you want to configure the list of interfaces implemented by dependency injection containers and service locators yourself, you can set the interfacesImplementedByContainers parameter to a list of interface names:
parameters:
ergebnis:
interfacesImplementedByContainers:
- Fancy\DependencyInjection\ContainerInterface
- Other\ServiceLocatorInterface
Methods\NoParameterWithNullableTypeDeclarationRule
This rule reports an error when a method declared in
- an anonymous class
- a class
- an interface
has a parameter with a nullable type declaration.
Methods\NoParameterWithNullDefaultValueRule
This rule reports an error when a method declared in
- an anonymous class
- a class
- an interface
has a parameter with null as default value.
Methods\PrivateInFinalClassRule
This rule reports an error when a method in a final class is protected but could be private.
Statements
Statements\NoSwitchRule
This rule reports an error when the statement switch() is used.
Changelog
Please have a look at CHANGELOG.md.
Contributing
Please have a look at CONTRIBUTING.md.
Code of Conduct
Please have a look at CODE_OF_CONDUCT.md.
License
This package is licensed using the MIT License.
Please have a look at LICENSE.md.
Credits
The method FinalRule::isWhitelistedClass() is inspired by the work on FinalClassFixer and FinalInternalClassFixer, contributed by Dariusz Rumiński, Filippo Tessarotto, and Spacepossum for friendsofphp/php-cs-fixer (originally licensed under MIT).
Curious what I am building?
:mailbox_with_mail: Subscribe to my list, and I will occasionally send you an email to let you know what I am working on.