ergebnis/phpstan-rules

Provides rules for phpstan/phpstan.

Installs: 5 139 070

Dependents: 140

Suggesters: 3

Security: 0

Stars: 363

Watchers: 6

Forks: 20

Open Issues: 9

Type:phpstan-extension

2.5.0 2024-12-01 16:44 UTC

README

Integrate Merge Release Renew

Code Coverage

Latest Stable Version Total Downloads Monthly Downloads

This project provides a composer package with 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

💡 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:

Classes

Classes\FinalRule

This rule reports an error when a non-anonymous class is not final.

💡 This rule ignores classes that

  • use @Entity, @ORM\Entity, or @ORM\Mapping\Entity annotations
  • use Doctrine\ORM\Mapping\Entity attributes

on the class level.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		final:
			enabled: false
Disallowing abstract classes

By default, this rule allows to declare abstract classes.

You can set the allowAbstractClasses parameter to false to disallow abstract classes.

parameters:
	ergebnis:
		final:
			allowAbstractClasses: false
Excluding classes from inspection

You can set the classesNotRequiredToBeAbstractOrFinal parameter to a list of class names that you want to exclude from inspection.

parameters:
	ergebnis:
		final:
			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:

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noExtends:
			enabled: false
Allowing classes to be extended

You can set the classesAllowedToBeExtended parameter to a list of class names that you want to allow to be extended.

parameters:
	ergebnis:
		noExtends:
			classesAllowedToBeExtended:
				- Ergebnis\PHPStan\Rules\Test\Integration\AbstractTestCase
				- Ergebnis\PHPStan\Rules\Test\Integration\AbstractTestCase

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.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		testCaseWithSuffix:
			enabled: false

Closures

Closures\NoNullableReturnTypeDeclarationRule

This rule reports an error when a closure uses a nullable return type declaration.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noNullableReturnTypeDeclaration:
			enabled: false

Closures\NoParameterWithNullableTypeDeclarationRule

This rule reports an error when a closure has a parameter with a nullable type declaration.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noParameterWithNullableTypeDeclaration:
			enabled: false

Closures\NoParameterWithNullDefaultValueRule

This rule reports an error when a closure has a parameter with null as default value.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noParameterWithNullDefaultValue:
			enabled: false

Expressions

Expressions\NoCompactRule

This rule reports an error when the function compact() is used.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noCompact:
			enabled: false

Expressions\NoEvalRule

This rule reports an error when the language construct eval() is used.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noEval:
			enabled: false

Expressions\NoErrorSuppressionRule

This rule reports an error when @ is used to suppress errors.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noErrorSuppression:
			enabled: false

Expressions\NoIssetRule

This rule reports an error when the language construct isset() is used.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noIsset:
			enabled: false

Files

Files\DeclareStrictTypesRule

This rule reports an error when a non-empty file does not contain a declare(strict_types=1) declaration.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		declareStrictTypes:
			enabled: false

Functions

Functions\NoNullableReturnTypeDeclarationRule

This rule reports an error when a function uses a nullable return type declaration.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noNullableReturnTypeDeclaration:
			enabled: false

Functions\NoParameterWithNullableTypeDeclarationRule

This rule reports an error when a function has a parameter with a nullable type declaration.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noParameterWithNullableTypeDeclaration:
			enabled: false

Functions\NoParameterWithNullDefaultValueRule

This rule reports an error when a function has a parameter with null as default value.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noParameterWithNullDefaultValue:
			enabled: false

Methods

Methods\FinalInAbstractClassRule

This rule reports an error when a concrete public or protected method in an abstract class is not final.

💡 This rule ignores

  • Doctrine embeddables
  • Doctrine entities
Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		finalInAbstractClass:
			enabled: false

Methods\NoConstructorParameterWithDefaultValueRule

This rule reports an error when a constructor declared in

  • an anonymous class
  • a class

has a default value.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noConstructorParameterWithDefaultValue:
			enabled: false

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.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noNullableReturnTypeDeclaration:
			enabled: false

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.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noParameterWithContainerTypeDeclaration:
			enabled: false
Configuring container interfaces

You can set the interfacesImplementedByContainers parameter to a list of interface names of additional containers and service locators.

parameters:
	ergebnis:
		noParameterWithContainerTypeDeclaration:
			interfacesImplementedByContainers:
				- Fancy\DependencyInjection\ContainerInterface
				- Other\ServiceLocatorInterface
Configuring methods allowed to use parameters with container type declarations

You can set the methodsAllowedToUseContainerTypeDeclarations parameter to a list of method names that are allowed to use parameters with container type declarations.

parameters:
	ergebnis:
		noParameterWithContainerTypeDeclaration:
			methodsAllowedToUseContainerTypeDeclarations:
				- loadExtension

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.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noParameterWithNullableTypeDeclaration:
			enabled: false

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.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noParameterWithNullDefaultValue:
			enabled: false

Methods\PrivateInFinalClassRule

This rule reports an error when a method in a final class is protected but could be private.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		privateInFinalClass:
			enabled: false

Statements

Statements\NoSwitchRule

This rule reports an error when the statement switch() is used.

Disabling the rule

You can set the the enabled parameter to false to disable this rule.

parameters:
	ergebnis:
		noSwitch:
			enabled: false

Changelog

The maintainers of this project record notable changes to this project in a changelog.

Contributing

The maintainers of this project suggest following the contribution guide.

Code of Conduct

The maintainers of this project ask contributors to follow the code of conduct.

General Support Policy

The maintainers of this project provide limited support.

You can support the maintenance of this project by sponsoring @localheinz or requesting an invoice for services related to this project.

PHP Version Support Policy

This project supports PHP versions with active and security support.

The maintainers of this project add support for a PHP version following its initial release and drop support for a PHP version when it has reached the end of security support.

Security Policy

This project has a security policy.

License

This project uses the MIT license.

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).

Social

Follow @localheinz and @ergebnis on Twitter.