Skip to content

Commit ea07b96

Browse files
committed
Modernized DoNotExtendNetteObjectRule
1 parent a392f55 commit ea07b96

File tree

2 files changed

+9
-29
lines changed

2 files changed

+9
-29
lines changed

src/Rule/Nette/DoNotExtendNetteObjectRule.php

+8-28
Original file line numberDiff line numberDiff line change
@@ -3,59 +3,39 @@
33
namespace PHPStan\Rule\Nette;
44

55
use PhpParser\Node;
6-
use PhpParser\Node\Stmt\Class_;
76
use PHPStan\Analyser\Scope;
8-
use PHPStan\Broker\Broker;
7+
use PHPStan\Node\InClassNode;
98
use PHPStan\Rules\Rule;
9+
use PHPStan\Rules\RuleErrorBuilder;
1010
use function in_array;
1111
use function sprintf;
1212

1313
/**
14-
* @implements Rule<Class_>
14+
* @implements Rule<InClassNode>
1515
*/
1616
class DoNotExtendNetteObjectRule implements Rule
1717
{
1818

19-
/** @var Broker */
20-
private $broker;
21-
22-
public function __construct(Broker $broker)
23-
{
24-
$this->broker = $broker;
25-
}
26-
2719
public function getNodeType(): string
2820
{
29-
return Class_::class;
21+
return InClassNode::class;
3022
}
3123

3224
public function processNode(Node $node, Scope $scope): array
3325
{
34-
if (!isset($node->namespacedName)) {
35-
// anonymous class - will be possible to inspect
36-
// with node visitor and special ClassBody node
37-
// because $scope will contain the anonymous class reflection
38-
return [];
39-
}
40-
41-
$className = (string) $node->namespacedName;
42-
if (!$this->broker->hasClass($className)) {
43-
return [];
44-
}
45-
46-
$classReflection = $this->broker->getClass($className);
26+
$classReflection = $node->getClassReflection();
4727
$parentClass = $classReflection->getNativeReflection()->getParentClass();
4828
if ($parentClass !== false && in_array($parentClass->getName(), [ // @phpstan-ignore-line
4929
'Nette\Object',
5030
'Nette\LegacyObject',
5131
], true)) {
5232
return [
53-
sprintf(
33+
RuleErrorBuilder::message(sprintf(
5434
"Class %s extends %s - it's better to use %s trait.",
55-
$className,
35+
$classReflection->getDisplayName(),
5636
'Nette\Object',
5737
'Nette\SmartObject'
58-
),
38+
))->build(),
5939
];
6040
}
6141

tests/Rule/Nette/DoNotExtendNetteObjectRuleTest.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class DoNotExtendNetteObjectRuleTest extends RuleTestCase
1414

1515
protected function getRule(): Rule
1616
{
17-
return new DoNotExtendNetteObjectRule($this->createBroker());
17+
return new DoNotExtendNetteObjectRule();
1818
}
1919

2020
public function testSmartObjectChild(): void

0 commit comments

Comments
 (0)