zvive / fixer
基于 permafrost-dev/phpcsfixer-preset 的 PHP CS Fixer 及其附加修复器
Requires
- php: ^8.0
- ext-json: *
- friendsofphp/php-cs-fixer: ^v3.0
- illuminate/collections: ^8.0||^9.0||^10.0
- illuminate/support: ^8.0||^9.0||^10.0
- kubawerlos/php-cs-fixer-custom-fixers: ^3.6
- symfony/console: ^5.0||^6.0
Requires (Dev)
- nunomaduro/larastan: ^v2.0
- orchestra/testbench: ^7.0||^8.0
- phpstan/extension-installer: ^1.2
- phpstan/phpdoc-parser: ^1.7
- phpstan/phpstan: ^1.8
- phpstan/phpstan-deprecation-rules: ^1.0
- phpstan/phpstan-phpunit: ^1.0
- phpstan/phpstan-strict-rules: ^1.1
- phpunit/phpunit: ^10.0
Suggests
- friendsofphp/php-cs-fixer: Required to use the phpcsfixer component (^2.0).
README
phpcsfixer-preset
此包允许您在整个项目中使用相同的 php-cs-fixer 格式化规则,而无需复制和粘贴配置文件。还有一个快速设置脚本,可以自动为您生成项目结构和首选格式化预设的配置文件。
zvive/fixer 提供了几个基于意见的 php-cs-fixer 配置选项,以及针对常见项目格式和用例预配置的 Finder 类。
支持的 PHP 版本: 8.1。
此包的原型来源于由 Tim Mcdonald 编写的关于 在项目中共享 php-cs-fixer 配置 的优秀文章。
安装
composer require zvive/fixer --dev
示例 .php-cs-fixer.dist.php 文件
此示例使用 Laravel 项目查找器和默认规则集
<?php require_once(__DIR__ . '/vendor/autoload.php'); use Zvive\Fixer\Finders\LaravelProjectFinder; use Zvive\Fixer\Rulesets\DefaultRuleset; use Zvive\Fixer\SharedConfig; $finder = LaravelProjectFinder::create(__DIR__); return SharedConfig::create($finder, new ZviveRuleset());
可以将标准 PhpCsFixer\Finder 选项连接到自定义 Finder 类,以根据您的偏好对其进行自定义
// ... $finder = LaravelProjectFinder::create(__DIR__) ->in([__DIR__ . '/custom-src-dir']) ->notName('*.ignored.php') ->notPath('another-custom-dir/cache/*'); // ...
您还可以使用标准的 PhpCsFixer\Finder 类和任何规则集
<?php require_once(__DIR__ . '/vendor/autoload.php'); use PhpCsFixer\Finder; use Zvive\Fixer\Rulesets\SpatieRuleset; use Zvive\Fixer\SharedConfig; $finder = Finder::create() ->ignoreVCS(true) ->ignoreDotFiles(true) ->name('*.php') ->in([ __DIR__ . '/src', __DIR__ . '/tests', ]) ->exclude(__DIR__ . '/vendor'); return SharedConfig::create($finder, new SpatieRuleset());
覆盖规则集规则
在创建 Ruleset 类时,您可以传递一个包含要添加或覆盖规则集默认规则的 php-cs-fixer 规则的数组。
<?php require_once(__DIR__.'/vendor/autoload.php'); use Zvive\Fixer\Finders\LaravelProjectFinder; use Zvive\Fixer\Rulesets\DefaultRuleset; use Zvive\Fixer\SharedConfig; $finder = LaravelProjectFinder::create(__DIR__); return SharedConfig::create($finder, new ZviveRuleset([ // existing rules can be overridden: 'no_break_comment' => true, 'no_closing_tag' => false, // new rules can be added: 'a_new_option' => [ 'some_sub_option' => 12, ], ]));
快速设置
要为您的项目生成 php-cs-fixer 配置文件,请运行
vendor/bin/pf-create-cs-config <type> [-o|--outfile=filename] [-r|--ruleset=name] [-f|--force]
参数: <type>
必需: 是
默认值: 无默认值
可能值
自定义项目包laravel(laravel:project 的别名)laravel:projectlaravel:package
标志: --outfile (或 -o)
必需: 否
默认值: .php-cs-fixer.dist.php
可能值:任何有效文件名
标志: --ruleset (或 -r)
必需: 否
默认值: default
可能值
defaultlaravel_shiftphp_unitspatie
标志: --force (或 -f)
必需: 否
默认值: false
可能值:无
效果:覆盖任何现有的配置文件
示例
vendor/bin/pf-create-cs-config laravel:package vendor/bin/pf-create-cs-config package -f vendor/bin/pf-create-cs-config laravel -o .php-cs-fixer.php -r spatie vendor/bin/pf-create-cs-config project --ruleset=laravel_shift vendor/bin/pf-create-cs-config custom --outfile=.my-config
关于 custom 类型的说明
“自定义”类型将提示您输入要包含和排除的目录名称,以便 php-cs-fixer 使用。生成的配置文件实现了 PhpCsFixer\Finder 类,而不是预配置的查找器类之一。
自动格式化
如果您想使用 GitHub Actions 自动应用 php-cs-fixer 格式化,请参阅 使用 GitHub Actions 的自动化 文档。
查找器预设
BasicProjectFinder
- 忽略 VCS 文件
- 忽略点文件
- 包含 PHP 文件
- 排除
vendor/目录
LaravelProjectFinder
- 继承
BasicProjectFinder预设 - 排除
*.blade.php文件 - 排除
bootstrap/、public/、resources/和storage/目录中的所有文件 - 在
app/、config/、database/、routes/、tests/中包含 PHP 文件
LaravelPackageFinder
- 继承
BasicProjectFinder预设 - 排除
*.blade.php文件 - 排除
resources/目录下的所有文件 - 在
src/、tests/、config/中包含 PHP 文件
ComposerPackageFinder
- 继承
BasicProjectFinder预设 - 在
src/、tests/中包含 PHP 文件
规则集
默认
-
该包提供的默认意见性规则集。
LaravelShift
- Laravel Shift 使用的规则集。
- 视图规则
PhpUnit
SpatieRuleset
- SpatieRuleset 使用的规则集。
- 视图规则
用法
选择一个查找器预设或创建一个 \PhpCsFixer\Finder 的实例,并从 .php-cs-fixer.dist.php 文件中返回 SharedConfig::create($finder)。
更新默认规则
更新 Zvive\Fixer\Rulesets\DefaultRuleset 类中的 rules() 方法。
创建规则集
创建一个实现 Zvive\Fixer\Rulesets\Ruleset 接口的新类,从 rules() 方法返回您的规则。
示例规则集
<?php namespace Zvive\Fixer\Rulesets; class MyCustomRulesRuleset implements RuleSet { public function allowRisky(): bool { return true; //this tells php-cs-fixer whether or not to permit "risky" rules. } public static function name(): string { return 'my_custom_rules'; //the name should omit 'ruleset' from the end. } /** * @return array */ public function rules(): array { return array_merge([ '@PSR2' => true, // additional php-cs-fixer rules ], $this->additional); //it's important that the additional rules property is merged } }
如果向此包添加新的规则集,必须在 \Zvive\Fixer\Commands\GenerateConfigCommand@rulesets() 中注册规则集,以便快速设置命令可以使用它。
如果您正在创建一个新的规则集包以供自己使用,请按照上述示例操作,但使用您包的唯一命名空间。
格式化您的代码
要格式化配置中指定的所有文件,请运行
vendor/bin/php-cs-fixer fix
要查看将要格式化的文件而不会进行任何更改,请运行
vendor/bin/php-cs-fixer fix --dry-run
测试
此包使用 PHPUnit 进行单元测试。要运行测试套件,请运行
./vendor/bin/phpunit
变更日志
有关最近更改的更多信息,请参阅 变更日志。
贡献
欢迎 Rulesets、Finders、错误修复、建议或改进的贡献。请为这些贡献之一打开一个适当标记的问题或拉取请求。
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。