localheinz/phpstan-rules

Provides additional rules for phpstan/phpstan.

Installs: 75 141

Dependents: 41

Suggesters: 0

Stars: 112

Watchers: 6

Forks: 3

Open Issues: 4

Type:phpstan-extension

0.13.0 2019-10-15 09:23 UTC

README

CI Status codecov Latest Stable Version Total Downloads

Provides additional rules for phpstan/phpstan.

Installation

Run

$ composer require --dev localheinz/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/localheinz/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.

💡 Doctrine entities are currently ignored when they are annotated with @ORM\Entity or @Entity.

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:
	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:
	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:
	classesAllowedToBeExtended:
		- Localheinz\PHPStan\Rules\Test\Integration\AbstractTestCase
		- PHPStan\Testing\RuleTestCase

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

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