sidz/phpstan-rules
Custom PHPStan rules aimed at Laravel projects, helping catch common mistakes and enforce best practices. Adds extra static analysis checks tailored to typical framework patterns, improving code quality, consistency, and confidence during refactors.
Provides additional rules for phpstan/phpstan.
Run
composer require --dev sidz/phpstan-rules
If you use PHPStan extension installer, you're all set. If not, you need to manually register all the rules in your phpstan.neon:
includes:
- vendor/sidz/phpstan-rules/rules.neon
Each rule by default ignores the following numbers: 0 and 1. This can be configured by adding the following parameter to your phpstan.neon:
parameters:
sidzIgnoreMagicNumbers: [0, 1, 100]
Each rule by default detects numeric strings like '12' in source code. This behavior could be disabled via parameter:
parameters:
sidzIgnoreNumericStrings: true
If you need to ignore particular rule, for example NoMagicNumberInComparisonOperatorRule, you can do so by using built-in ignoreErrors parameter:
parameters:
ignoreErrors:
- '#^Do not use magic number in comparison operations\. Move to constant with a suitable name\.$#'
If you need to ignore this rule only for particular file or folder, this also can be done by using ignoreErrors parameter:
parameters:
ignoreErrors:
-
message: '#^Do not use magic number in comparison operations\. Move to constant with a suitable name\.$#'
path: src/SomeFolder/*
And finally, if you want to ignore all the rules from this package for particular files or folders, add this to phpstan.neon:
parameters:
ignoreErrors:
-
message: '#Do not (use|return|assign) magic number (.)#'
paths:
- src/DataFixtures/*
- tests/*
This package provides the following rules for use with phpstan/phpstan:
Sid\PHPStan\Rules\MagicNumber\NoMagicNumberAsFunctionArgumentRuleSid\PHPStan\Rules\MagicNumber\NoMagicNumberAssignedToPropertyRuleSid\PHPStan\Rules\MagicNumber\NoMagicNumberInArithmeticOperatorRuleSid\PHPStan\Rules\MagicNumber\NoMagicNumberInBitwiseOperatorRuleSid\PHPStan\Rules\MagicNumber\NoMagicNumberInComparisonOperatorRuleSid\PHPStan\Rules\MagicNumber\NoMagicNumberInDefaultParameterRuleSid\PHPStan\Rules\MagicNumber\NoMagicNumberInLogicalOperatorRuleSid\PHPStan\Rules\MagicNumber\NoMagicNumberInMatchRuleSid\PHPStan\Rules\MagicNumber\NoMagicNumberInReturnStatementRuleSid\PHPStan\Rules\MagicNumber\NoMagicNumberInSwitchCaseRuleSid\PHPStan\Rules\MagicNumber\NoMagicNumberInTernaryOperatorRuleSid\PHPStan\Rules\MagicNumber\NoMagicNumberVariableAssignmentRuleMagicNumber\NoMagicNumberAsFunctionArgumentRuleThis rule reports an error when magic number is used as function argument:
<?php
some_function(10);
MagicNumber\NoMagicNumberAssignedToPropertyRuleThis rule reports an error when magic number is assigned to class property:
<?php
class Test
{
private $prop1 = 10;
private $prop2 = -5.5;
}
MagicNumber\NoMagicNumberInArithmeticOperatorRuleThis rule reports an error when magic number is used in various arithmetic operators:
<?php
$var1 + 2;
$var2 - .3;
$var3 * 2.2;
$var4 / 2;
$var5 % 1000;
$var6 ** 2;
2 + $var1;
1.1 - $var2;
2 * $var3;
-2 / $var4;
1000 % $var5;
MagicNumber\NoMagicNumberInBitwiseOperatorRuleThis rule reports an error when magic number is used in various bitwise operators:
<?php
$a & 1;
$b | 2;
$c ^ 3;
$a << 4;
$b >> 5;
1 & $a;
2 | $b;
3 ^ $c;
4 << $a;
5 >> $b;
6 >> 7;
MagicNumber\NoMagicNumberInComparisonOperatorRuleThis rule reports an error when magic number is used in comparison operator:
<?php
$var1 === 1;
$var2 !== 2;
$var3 !== 3;
$var4 === 4.4;
$var5 !== -5;
$var6 < 6;
$var7 <= 7;
$var8 > .8;
$var9 >= 9;
$var10 <=> 0.1;
$var11 === 11;
MagicNumber\NoMagicNumberInDefaultParameterRuleThis rule reports an error when magic number is used as default parameter:
<?php
class Test
{
public function testMethod($param = 3): string
{
return 'string';
}
}
MagicNumber\NoMagicNumberInLogicalOperatorRuleThis rule reports an error when magic number is used as part of logical operation:
<?php
$a and 1;
1 and $a;
$b or 2;
2 or $b;
$c xor 3;
3 xor $c;
MagicNumber\NoMagicNumberInMatchRuleThis rule reports an error when magic number is used in arms or conditions:
<?php
match (3) {
1 => 'Hi',
2, 4 => 'There',
default => throw new LogicException(),
};
MagicNumber\NoMagicNumberInReturnStatementRuleThis rule reports an error when magic number is used in return statement:
<?php
class Test
{
public function getNegativeValue(): float
{
return -20.5;
}
}
MagicNumber\NoMagicNumberInSwitchCaseRuleThis rule reports an error when magic number is used in condition or cases:
<?php
switch (100) {
case 5:
break;
}
MagicNumber\NoMagicNumberInTernaryOperatorRuleThis rule reports an error when magic number is used in ternary operator:
<?php
$a = $b ? 2 : 'string';
$c = $b ?: -3.5;
$d = $b ? 'string' : 6;
MagicNumber\NoMagicNumberVariableAssignmentRuleThis rule reports an error when magic number is assigned to some variable:
<?php
$var1 = 4;
$var2 = -2;
function test_func($var4 = 3): void
{
$var5 = 0;
}
$var6 = .1;
$var7 = 3.5;
$var8 = -2.3;
This package is licensed using the MIT License.
Please have a look at LICENSE.md.
How can I help you explore Laravel packages today?