From b22fabb262fdcb83715d131eece8548d8f93c764 Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Sun, 2 Jun 2024 12:00:27 +0900 Subject: [PATCH] Allow abstract classes to be implemented in NoSingleInterfaceImplementerRule (#135) --- src/Collector/ImplementedInterfaceCollector.php | 9 +++++++-- .../Fixture/AllowAbstract.php | 9 +++++++++ .../NoSingleInterfaceImplementerRuleTest.php | 1 + 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 tests/Rules/NoSingleInterfaceImplementerRule/Fixture/AllowAbstract.php diff --git a/src/Collector/ImplementedInterfaceCollector.php b/src/Collector/ImplementedInterfaceCollector.php index 5b97a12e..21bfe0f0 100644 --- a/src/Collector/ImplementedInterfaceCollector.php +++ b/src/Collector/ImplementedInterfaceCollector.php @@ -18,12 +18,17 @@ public function getNodeType(): string /** * @param Class_ $node - * @return string[] + * @return string[]|null */ - public function processNode(Node $node, Scope $scope): array + public function processNode(Node $node, Scope $scope): ?array { $implementedInterfaceNames = []; + // skip abstract classes, as they can enforce child implementations + if ($node->isAbstract()) { + return null; + } + foreach ($node->implements as $implement) { $implementedInterfaceNames[] = $implement->toString(); } diff --git a/tests/Rules/NoSingleInterfaceImplementerRule/Fixture/AllowAbstract.php b/tests/Rules/NoSingleInterfaceImplementerRule/Fixture/AllowAbstract.php new file mode 100644 index 00000000..a67c3395 --- /dev/null +++ b/tests/Rules/NoSingleInterfaceImplementerRule/Fixture/AllowAbstract.php @@ -0,0 +1,9 @@ +