diff --git a/config/extension.neon b/config/extension.neon index 312e210..a5604d8 100644 --- a/config/extension.neon +++ b/config/extension.neon @@ -194,8 +194,4 @@ services: - factory: Orrison\MeliorStan\Rules\NumberOfChildren\Config arguments: - - %meliorstan.number_of_children.maximum% - - - class: Orrison\MeliorStan\Rules\NumberOfChildren\NumberOfChildrenCollector - tags: - - phpstan.collector \ No newline at end of file + - %meliorstan.number_of_children.maximum% \ No newline at end of file diff --git a/docs/NumberOfChildren.md b/docs/NumberOfChildren.md index bdc1bc8..c257520 100644 --- a/docs/NumberOfChildren.md +++ b/docs/NumberOfChildren.md @@ -15,7 +15,7 @@ This rule supports the following configuration option: ## Usage -Add the rule to your PHPStan configuration: +This rule relies on a PHPStan collector to gather inheritance information, so you must register both the rule and the collector when enabling it. Add the following to your PHPStan configuration: ```neon includes: @@ -24,6 +24,12 @@ includes: rules: - Orrison\MeliorStan\Rules\NumberOfChildren\NumberOfChildrenRule +services: + - + class: Orrison\MeliorStan\Rules\NumberOfChildren\NumberOfChildrenCollector + tags: + - phpstan.collector + parameters: meliorstan: number_of_children: @@ -93,5 +99,6 @@ class Child6 extends PopularParent {} // ✗ This 6th child causes the violation - **Direct children only**: This rule counts only direct subclasses (classes that directly extend the parent), not grandchildren or deeper descendants. - **Cross-file analysis**: The rule uses PHPStan collectors to analyze class hierarchies across all files in your project. +- **Collector registration required**: Remember to register `NumberOfChildrenCollector` in any PHPStan config where you enable this rule. - **Per-class violation**: The violation is reported on the parent class, not on its children. - **Design consideration**: A high number of direct children often suggests that the parent class may be too generic or that the hierarchy could benefit from intermediate abstract classes or interfaces. diff --git a/tests/Rules/NumberOfChildren/config/default.neon b/tests/Rules/NumberOfChildren/config/default.neon index 3963490..6d1a30a 100644 --- a/tests/Rules/NumberOfChildren/config/default.neon +++ b/tests/Rules/NumberOfChildren/config/default.neon @@ -4,6 +4,12 @@ includes: rules: - Orrison\MeliorStan\Rules\NumberOfChildren\NumberOfChildrenRule +services: + - + class: Orrison\MeliorStan\Rules\NumberOfChildren\NumberOfChildrenCollector + tags: + - phpstan.collector + parameters: meliorstan: number_of_children: diff --git a/tests/Rules/NumberOfChildren/config/maximum-one.neon b/tests/Rules/NumberOfChildren/config/maximum-one.neon index 844692f..8058394 100644 --- a/tests/Rules/NumberOfChildren/config/maximum-one.neon +++ b/tests/Rules/NumberOfChildren/config/maximum-one.neon @@ -4,6 +4,12 @@ includes: rules: - Orrison\MeliorStan\Rules\NumberOfChildren\NumberOfChildrenRule +services: + - + class: Orrison\MeliorStan\Rules\NumberOfChildren\NumberOfChildrenCollector + tags: + - phpstan.collector + parameters: meliorstan: number_of_children: diff --git a/tests/Rules/NumberOfChildren/config/maximum-two.neon b/tests/Rules/NumberOfChildren/config/maximum-two.neon index fbd0ace..b4be48e 100644 --- a/tests/Rules/NumberOfChildren/config/maximum-two.neon +++ b/tests/Rules/NumberOfChildren/config/maximum-two.neon @@ -4,6 +4,12 @@ includes: rules: - Orrison\MeliorStan\Rules\NumberOfChildren\NumberOfChildrenRule +services: + - + class: Orrison\MeliorStan\Rules\NumberOfChildren\NumberOfChildrenCollector + tags: + - phpstan.collector + parameters: meliorstan: number_of_children: