All Projects → phpstan → Phpstan Strict Rules

phpstan / Phpstan Strict Rules

Licence: mit
Extra strict and opinionated rules for PHPStan

Projects that are alternatives of or similar to Phpstan Strict Rules

analysis-model
A library to read static analysis reports into a Java object model
Stars: ✭ 74 (-74.92%)
Mutual labels:  static-code-analysis, static-analysis
Sonar Php
🐘 SonarPHP: PHP static analyzer for SonarQube & SonarLint
Stars: ✭ 288 (-2.37%)
Mutual labels:  static-analysis, static-code-analysis
OpenStaticAnalyzer
OpenStaticAnalyzer is a source code analyzer tool, which can perform deep static analysis of the source code of complex systems.
Stars: ✭ 19 (-93.56%)
Mutual labels:  static-code-analysis, static-analysis
identypo
identypo is a Go static analysis tool to find typos in identifiers (functions, function calls, variables, constants, type declarations, packages, labels).
Stars: ✭ 26 (-91.19%)
Mutual labels:  static-code-analysis, static-analysis
Nullaway
A tool to help eliminate NullPointerExceptions (NPEs) in your Java code with low build-time overhead
Stars: ✭ 3,035 (+928.81%)
Mutual labels:  static-analysis, static-code-analysis
nakedret
nakedret is a Go static analysis tool to find naked returns in functions greater than a specified function length.
Stars: ✭ 82 (-72.2%)
Mutual labels:  static-code-analysis, static-analysis
codeclimate-duplication
Code Climate engine for code duplication analysis
Stars: ✭ 96 (-67.46%)
Mutual labels:  static-code-analysis, static-analysis
sonarlint4netbeans
SonarLint integration for Apache Netbeans
Stars: ✭ 23 (-92.2%)
Mutual labels:  static-code-analysis, static-analysis
analysis-net
Static analysis framework for .NET programs.
Stars: ✭ 19 (-93.56%)
Mutual labels:  static-code-analysis, static-analysis
static-code-analysis-plugin
A plugin to simplify Static Code Analysis on Gradle. Not restricted to, but specially useful, in Android projects, by making sure all analysis can access the SDK classes.
Stars: ✭ 36 (-87.8%)
Mutual labels:  static-code-analysis, static-analysis
gotcha
Go Taint CHeck Analyser
Stars: ✭ 40 (-86.44%)
Mutual labels:  static-code-analysis, static-analysis
unimport
A linter, formatter for finding and removing unused import statements.
Stars: ✭ 119 (-59.66%)
Mutual labels:  static-code-analysis, static-analysis
unimport
unimport is a Go static analysis tool to find unnecessary import aliases.
Stars: ✭ 64 (-78.31%)
Mutual labels:  static-code-analysis, static-analysis
eba
EBA is a static bug finder for C.
Stars: ✭ 14 (-95.25%)
Mutual labels:  static-code-analysis, static-analysis
phpstan-webmozart-assert
PHPStan extension for webmozart/assert
Stars: ✭ 132 (-55.25%)
Mutual labels:  static-code-analysis, static-analysis
codeclimate-phpcodesniffer
Code Climate Engine for PHP Code Sniffer
Stars: ✭ 27 (-90.85%)
Mutual labels:  static-code-analysis, static-analysis
klara
Automatic test case generation for python and static analysis library
Stars: ✭ 250 (-15.25%)
Mutual labels:  static-code-analysis, static-analysis
phpstan-nette
Nette Framework class reflection extension for PHPStan & framework-specific rules
Stars: ✭ 87 (-70.51%)
Mutual labels:  static-code-analysis, static-analysis
codeclimate-eslint
Code Climate Engine for ESLint
Stars: ✭ 86 (-70.85%)
Mutual labels:  static-code-analysis, static-analysis
qodana-action
⚙️ Scan your Java, Kotlin, PHP, Python, JavaScript, TypeScript projects at GitHub with Qodana
Stars: ✭ 112 (-62.03%)
Mutual labels:  static-code-analysis, static-analysis

Extra strict and opinionated rules for PHPStan

Build Latest Stable Version License

PHPStan focuses on finding bugs in your code. But in PHP there's a lot of leeway in how stuff can be written. This repository contains additional rules that revolve around strictly and strongly typed code with no loose casting for those who want additional safety in extremely defensive programming:

  • Require booleans in if, elseif, ternary operator, after !, and on both sides of && and ||.
  • Require numeric operands or arrays in + and numeric operands in -/*///**/%.
  • Require numeric operand in $var++, $var--, ++$varand --$var.
  • These functions contain a $strict parameter for better type safety, it must be set to true:
    • in_array (3rd parameter)
    • array_search (3rd parameter)
    • array_keys (3rd parameter; only if the 2nd parameter $search_value is provided)
    • base64_decode (2nd parameter)
  • Variables assigned in while loop condition and for loop initial assignment cannot be used after the loop.
  • Variables set in foreach that's always looped thanks to non-empty arrays cannot be used after the loop.
  • Types in switch condition and case value must match. PHP compares them loosely by default and that can lead to unexpected results.
  • Check that statically declared methods are called statically.
  • Disallow empty() - it's a very loose comparison (see manual), it's recommended to use more strict one.
  • Disallow short ternary operator (?:) - implies weak comparison, it's recommended to use null coalesce operator (??) or ternary operator with strict condition.
  • Disallow variable variables ($$foo, $this->$method() etc.)
  • Disallow overwriting variables with foreach key and value variables
  • Always true instanceof, type-checking is_* functions and strict comparisons ===/!==. These checks can be turned off by setting checkAlwaysTrueInstanceof/checkAlwaysTrueCheckTypeFunctionCall/checkAlwaysTrueStrictComparison to false.
  • Correct case for referenced and called function names.
  • Correct case for inherited and implemented method names.
  • Contravariance for parameter types and covariance for return types in inherited methods (also known as Liskov substitution principle - LSP)
  • Check LSP even for static methods
  • Check missing typehint in anonymous function when a native one could be added
  • Require calling parent constructor
  • Disallow usage of backtick operator ($ls = `ls -la`)

Additional rules are coming in subsequent releases!

Installation

To use this extension, require it in Composer:

composer require --dev phpstan/phpstan-strict-rules

If you also install phpstan/extension-installer then you're all set!

Manual installation

If you don't want to use phpstan/extension-installer, include rules.neon in your project's PHPStan config:

includes:
    - vendor/phpstan/phpstan-strict-rules/rules.neon

Enabling rules one-by-one

If you don't want to start using all the available strict rules at once but only one or two, you can! Just don't include the whole rules.neon from this package in your configuration, but look at its contents and copy only the rules you want to your configuration under the services key:

services:
	-
		class: PHPStan\Rules\StrictCalls\StrictFunctionCallsRule
		tags:
			- phpstan.rules.rule

	-
		class: PHPStan\Rules\SwitchConditions\MatchingTypeInSwitchCaseConditionRule
		tags:
			- phpstan.rules.rule

Unfortunately, you cannot use phpstan/extension-installer in this case.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].