用途:构建 Rector PHP 规则,通过遍历 PHP-Parser AST、匹配节点类型并在 refactor() 中返回修改后的节点来转换 PHP 代码。
主要能力:优先使用已有可配置规则(重命名函数/方法/类、转换调用类型、移除参数等),用 ->withConfiguredRule() 而非自定义规则;识别目标节点类型;编写继承 AbstractRector 的规则类;按需实现 MinPhpVersionInterface(PHP 版本门控)或 ConfigurableRectorInterface(可配置);在 rector.php 中注册规则。
必要用法:规则骨架继承 AbstractRector,实现 getRuleDefinition()、getNodeTypes()、refactor()。refactor() 返回 null 表示不变,返回修改后的 $node 表示替换,返回非空 Node[] 表示替换为多个节点,返回 NodeVisitor::REMOVE_NODE 表示删除;禁止返回空数组。类引用使用 Node\Name\FullyQualified,字符串不带前导反斜杠。添加 PHP 属性时用 PhpAttributeAnalyzer 防止重复。注入服务通过构造函数(如 BetterNodeFinder)。注册示例:RectorConfig::configure()->withRules([MyRector::class]) 或 ->withConfiguredRule(MyConfigurableRector::class, ['key' => 'value'])。命名空间约定:rules/[Category]/Rector/[NodeType]/[RuleName]Rector.php,测试在 rules-tests/ 下。
适用场景:需要为 PHP 代码库编写自动化重构规则时。
限制:转换非 final 类或 public/protected 成员存在继承与 API 契约风险,需用 isFinal() 守卫或跳过并添加 skip fixture;每个规则需测试类与 fixture;具体参考文件内容暂未提供。