Skip to content

Phauthentic/Rector-Rules

Repository files navigation

Phauthentic Rector Rules

Custom Rector rules for adding final/readonly modifiers and extracting interfaces based on FQCN regex patterns.

Requirements

  • PHP 8.2+
  • Rector ^2.3

Installation

composer require phauthentic/rector-rules

Rules

AddFinalByRegexRector

Adds 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\\\\#'],
])

AddReadonlyByRegexRector

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\\\\#',
])

ExtractInterfaceByRegexRector

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

Development

composer install
composer test
composer phpstan

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages