rector-rules - 提供标准化的常量、变量、函数、类、属性和方法命名以及其他 Rector 规则
之前写过用 Rector 《统一规范化代码的命名风格》,现在已经整理发布为 Composer 包了。
rector-rules - 提供标准化的常量、变量、函数、类、属性和方法命名以及其他 Rector 规则。
Rector 规则总览
Rector 规则集总览
Guanguans\RectorRules\Set\SetList::ALLGuanguans\RectorRules\Set\SetList::COMMONGuanguans\RectorRules\Set\SetList::GUZZLEGuanguans\RectorRules\Set\SetList::LARAVELGuanguans\RectorRules\Set\SetList::PESTGuanguans\RectorRules\Set\SetList::PHPBENCHGuanguans\RectorRules\Set\SetList::PHPSTANGuanguans\RectorRules\Set\SetList::RECTORGuanguans\RectorRules\Set\SetList::SYMFONY
配置使用规则集和规则
use Guanguans\RectorRules\Rector\File\SortFileFunctionStmtRector;
use Guanguans\RectorRules\Rector\FunctionLike\RenameGarbageParamNameRector;
use Guanguans\RectorRules\Rector\Name\RenameToConventionalCaseNameRector;
use PhpParser\NodeVisitor\ParentConnectingVisitor;
use Rector\Config\RectorConfig;
return RectorConfig::configure()
->withSets([
Guanguans\RectorRules\Set\SetList::ALL,
// ...
])
// ...
->registerDecoratingNodeVisitor(ParentConnectingVisitor::class)
->withConfiguredRule(RenameToConventionalCaseNameRector::class, [
'assertMatches*Snapshot', // Exclude `spatie/pest-plugin-snapshots` function name
'beforeEach', // Exclude `pestphp/pest` function name
'PDO', // Exclude `ext-pdo` class name
])
// ...
->withRules([
RenameGarbageParamNameRector::class,
SortFileFunctionStmtRector::class,
// ...
]);重构示例(RenameToConventionalCaseNameRector)
/** @noinspection ALL */
// @formatter:off
// phpcs:ignoreFile
// lower snake
-use function functionName;
-function functionName(){}
-functionName();
-call_user_func('functionName');
-call_user_func_array('functionName', []);
-function_exists('functionName');
+use function function_name;
+function function_name(){}
+\function_name();
+call_user_func('function_name');
+call_user_func_array('function_name', []);
+function_exists('function_name');
// ucfirst camel
// #[attribute_name()]
-class class_name{}
+class ClassName{}
// enum enum_name{}
// enum Enum{case case_name;}
-interface interface_name{}
-trait trait_name{}
-class Foo extends class_name implements interface_name{}
-class_name::$property;
-class_name::CONST;
-class_name::method();
+interface InterfaceName{}
+trait TraitName{}
+class Foo extends \ClassName implements \InterfaceName{}
+\ClassName::$property;
+\ClassName::CONST;
+\ClassName::method();
// enum Enum implements interface_name{}
-use class_name;
-use trait_name;
-class_alias('class_name', 'alias_class_name');
-class_alias($className, 'alias_class_name');
-class_exists('class_name');
-class_implements('class_name');
-class_parents('class_name');
-class_uses('class_name');
-enum_exists('enum_name');
-get_class_methods('class_name');
-get_class_vars('class_name');
-get_parent_class('class_name');
-interface_exists('interface_name');
-is_subclass_of('class_name', 'parent_class_name');
-is_subclass_of($className, 'parent_class_name');
-trait_exists('trait_name', true);
+use ClassName;
+use TraitName;
+class_alias('ClassName', 'AliasClassName');
+class_alias($className, 'AliasClassName');
+class_exists('ClassName');
+class_implements('ClassName');
+class_parents('ClassName');
+class_uses('ClassName');
+enum_exists('EnumName');
+get_class_methods('ClassName');
+get_class_vars('ClassName');
+get_parent_class('ClassName');
+interface_exists('InterfaceName');
+is_subclass_of('ClassName', 'ParentClassName');
+is_subclass_of($className, 'ParentClassName');
+trait_exists('TraitName', true);
// upper snake
-use const constName;
-class Foo{public const constName = 'const';}
-Foo::constName;
-define('constName', 'const');
-defined('constName');
-constant('constName');
-constant('Foo::constName');
-constName;
+use const CONST_NAME;
+class Foo{public const CONST_NAME = 'const';}
+Foo::CONST_NAME;
+define('CONST_NAME', 'const');
+defined('CONST_NAME');
+constant('CONST_NAME');
+constant('Foo::CONST_NAME');
+\CONST_NAME;
// lcfirst camel
-$var_name;
-$object->method_name();
-$object->property_name;
-call_user_method('method_name', $object);
-call_user_method_array('method_name', $object);
-class Foo{public $property_name;}
-class Foo{public function method_name(){}}
-class Foo{public int $property_name;}
-Foo::$property_name;
-Foo::method_name();
-method_exists($object, 'method_name');
-property_exists($object, 'property_name');
+$varName;
+$object->methodName();
+$object->propertyName;
+call_user_method('methodName', $object);
+call_user_method_array('methodName', $object);
+class Foo{public $propertyName;}
+class Foo{public function methodName(){}}
+class Foo{public int $propertyName;}
+Foo::$propertyName;
+Foo::methodName();
+method_exists($object, 'methodName');
+property_exists($object, 'propertyName');另外推荐下其他相关类似的包
- php-cs-fixer-custom-fixers - 用 php-cs-fixer 统一修复项目中的非 php 格式文件
- monorepo-builder-worker - 用 monorepo-builder 自动化生成 changelog / 自动化项目发布流程
- phpstan-rules - 一些附加的 phpstan 规则
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。