Custom Rector rules for adding final/readonly modifiers and extracting interfaces based on FQCN regex patterns.
- PHP 8.2+
- Rector ^2.3
composer require phauthentic/rector-rulesAdds final to classes whose fully qualified class name matches one of the configured regex patterns.
Configuration:
// rector.php
use Phauthentic\RectorRules\Rector\Class_\AddFinalByRegexRector;
use Rector\Config\RectorConfig;
return RectorConfig::configure()
->withPaths(['src'])
->withConfiguredRule(AddFinalByRegexRector::class, [
'#^App\\\\Domain\\\\#',
'#^App\\\\Service\\\\#',
]);Or with explicit patterns key:
->withConfiguredRule(AddFinalByRegexRector::class, [
'patterns' => ['#^App\\\\Domain\\\\#'],
])Adds readonly to classes whose FQCN matches one of the configured regex patterns. Requires PHP 8.2+.
Configuration:
use Phauthentic\RectorRules\Rector\Class_\AddReadonlyByRegexRector;
->withConfiguredRule(AddReadonlyByRegexRector::class, [
'#^App\\\\ValueObject\\\\#',
])Extracts methods from matching classes into interfaces and adds implements to the class. Creates interface files when missing.
Configuration:
use Phauthentic\RectorRules\Rector\Class_\ExtractInterfaceByRegexRector;
->withConfiguredRule(ExtractInterfaceByRegexRector::class, [
'interface_name_template' => '{namespace}\\{shortName}Interface',
'extract' => [
[
'class_regex' => '#^App\\\\Service\\\\#',
'methods' => [
'exact' => ['handle', 'supports'],
'regex' => ['#^get[A-Z].*#'],
],
],
[
'class_regex' => '#^App\\\\Contract\\\\#',
// methods omitted => extract all public methods (except __construct)
],
],
])- interface_name_template: Optional. Placeholders:
{namespace},{shortName}. Default:{namespace}\{shortName}Interface - extract: List of entries, each with:
- class_regex: Regex to match class FQCN
- methods: Optional. If omitted, all public non-magic methods are extracted.
- exact: List of exact method names
- regex: List of regex patterns to match method names
composer install
composer test
composer phpstan