Skip to content
This repository was archived by the owner on May 20, 2025. It is now read-only.

Commit e46b0b4

Browse files
committed
AttributesCheck - detect deprecated attributes
1 parent cd55cb2 commit e46b0b4

12 files changed

+64
-0
lines changed

conf/config.neon

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -945,6 +945,8 @@ services:
945945

946946
-
947947
class: PHPStan\Rules\AttributesCheck
948+
arguments:
949+
deprecationRulesInstalled: %deprecationRulesInstalled%
948950

949951
-
950952
class: PHPStan\Rules\Arrays\NonexistentOffsetInArrayDimFetchCheck

src/Rules/AttributesCheck.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public function __construct(
2121
private ReflectionProvider $reflectionProvider,
2222
private FunctionCallParametersCheck $functionCallParametersCheck,
2323
private ClassCaseSensitivityCheck $classCaseSensitivityCheck,
24+
private bool $deprecationRulesInstalled,
2425
)
2526
{
2627
}
@@ -84,6 +85,15 @@ public function check(
8485
$alreadyPresent[$loweredName] = true;
8586
}
8687

88+
if ($this->deprecationRulesInstalled && $attributeClass->isDeprecated()) {
89+
if ($attributeClass->getDeprecatedDescription() !== null) {
90+
$deprecatedError = sprintf('Attribute class %s is deprecated: %s', $name, $attributeClass->getDeprecatedDescription());
91+
} else {
92+
$deprecatedError = sprintf('Attribute class %s is deprecated.', $name);
93+
}
94+
$errors[] = RuleErrorBuilder::message($deprecatedError)->line($attribute->getLine())->build();
95+
}
96+
8797
if (!$attributeClass->hasConstructor()) {
8898
if (count($attribute->args) > 0) {
8999
$errors[] = RuleErrorBuilder::message(sprintf('Attribute class %s does not have a constructor and must be instantiated without any parameters.', $name))->line($attribute->getLine())->build();

tests/PHPStan/Rules/Classes/ClassAttributesRuleTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ protected function getRule(): Rule
3939
true,
4040
),
4141
new ClassCaseSensitivityCheck($reflectionProvider, false),
42+
true,
4243
),
4344
);
4445
}

tests/PHPStan/Rules/Classes/ClassConstantAttributesRuleTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ protected function getRule(): Rule
3838
true,
3939
),
4040
new ClassCaseSensitivityCheck($reflectionProvider, false),
41+
true,
4142
),
4243
);
4344
}

tests/PHPStan/Rules/EnumCases/EnumCaseAttributesRuleTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ protected function getRule(): Rule
3838
true,
3939
),
4040
new ClassCaseSensitivityCheck($reflectionProvider, false),
41+
true,
4142
),
4243
);
4344
}

tests/PHPStan/Rules/Functions/ArrowFunctionAttributesRuleTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ protected function getRule(): Rule
3838
true,
3939
),
4040
new ClassCaseSensitivityCheck($reflectionProvider, false),
41+
true,
4142
),
4243
);
4344
}

tests/PHPStan/Rules/Functions/ClosureAttributesRuleTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ protected function getRule(): Rule
3838
true,
3939
),
4040
new ClassCaseSensitivityCheck($reflectionProvider, false),
41+
true,
4142
),
4243
);
4344
}

tests/PHPStan/Rules/Functions/FunctionAttributesRuleTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ protected function getRule(): Rule
3838
true,
3939
),
4040
new ClassCaseSensitivityCheck($reflectionProvider, false),
41+
true,
4142
),
4243
);
4344
}

tests/PHPStan/Rules/Functions/ParamAttributesRuleTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ protected function getRule(): Rule
3838
true,
3939
),
4040
new ClassCaseSensitivityCheck($reflectionProvider, false),
41+
true,
4142
),
4243
);
4344
}

tests/PHPStan/Rules/Methods/MethodAttributesRuleTest.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ protected function getRule(): Rule
4040
true,
4141
),
4242
new ClassCaseSensitivityCheck($reflectionProvider, false),
43+
true,
4344
),
4445
);
4546
}

0 commit comments

Comments
 (0)