nexusphp / cs-config
PHP CS Fixer 自定义规则集的工厂。
Requires
- php: ^8.1
- ext-tokenizer: *
- friendsofphp/php-cs-fixer: ^3.60
Requires (Dev)
- nexusphp/tachycardia: ^2.1
- phpstan/extension-installer: ^1.3
- phpstan/phpstan: ^1.10
- phpstan/phpstan-phpunit: ^1.3
- phpstan/phpstan-strict-rules: ^1.5
- phpunit/phpunit: ^10.5 || ^11.0
Conflicts
- liaison/cs-config: *
- 3.x-dev
- v3.24.3
- v3.24.2
- v3.24.1
- v3.24.0
- v3.23.1
- v3.23.0
- v3.22.1
- v3.22.0
- v3.21.0
- v3.20.0
- v3.19.0
- v3.18.0
- v3.17.0
- v3.16.0
- v3.15.0
- v3.14.4
- v3.14.3
- v3.14.2
- v3.14.1
- v3.14.0
- v3.13.0
- v3.12.0
- v3.11.0
- v3.10.0
- v3.9.0
- v3.8.0
- v3.7.0
- v3.6.0
- v3.5.0
- v3.4.0
- v3.3.4
- v3.3.3
- v3.3.2
- v3.3.1
- v3.3.0
- v3.2.2
- v3.2.1
- v3.2.0
- v3.1.1
- v3.1.0
- v3.0.3
- v3.0.2
- v3.0.1
- v3.0.0
- v2.2.1
- v2.2.0
- v2.1.5
- v2.1.4
- v2.1.3
- v2.1.2
- v2.1.1
- v2.1.0
- v2.0.2
- v2.0.1
- v2.0.0
This package is auto-updated.
Last update: 2024-09-07 12:51:33 UTC
README
此库为 friendsofphp/php-cs-fixer
提供了一个用于自定义规则集的工厂。
安装
您可以使用 Composer 将此库作为本地、项目级别的依赖项添加到您的项目中
composer require nexusphp/cs-config
如果您只需要在开发过程中使用此库,例如运行项目测试套件,那么您应该将其添加为开发时依赖项
composer require --dev nexusphp/cs-config
配置
- 在项目的根目录下创建一个
.php-cs-fixer.dist.php
<?php use Nexus\CsConfig\Factory; use Nexus\CsConfig\Ruleset\Nexus82; return Factory::create(new Nexus82())->forProjects();
- 在您的
.gitignore
中包含缓存文件。默认情况下,缓存文件将保存在项目根目录中。
vendor/ +# php-cs-fixer +.php-cs-fixer.php +.php-cs-fixer.cache
高级配置
添加预格式化许可证头
您可以使用公开的 forLibrary()
方法而不是 forProjects()
来为所有 PHP 文件创建预格式化的许可证头。此方法接受两个必需参数(库名称和作者)和两个可选参数(电子邮件地址和许可证开始年份)。
- 场景 1:提供所有参数
<?php use Nexus\CsConfig\Factory; use Nexus\CsConfig\Ruleset\Nexus82; -return Factory::create(new Nexus82())->forProjects(); +return Factory::create(new Nexus82())->forLibrary('My Library', 'John Doe', '[email protected]', 2020);
此设置将配置一个类似于下面的许可证头
<?php /** * This file is part of My Library. * * (c) 2020 John Doe <[email protected]> * * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ namespace Nexus\CsConfig;
- 场景 2:只提供必需参数
如果您选择不提供任何可选参数(即,电子邮件地址、许可证开始年份),则这些参数不会显示在许可证头中,从而允许在版权部分上具有灵活性。
<?php use Nexus\CsConfig\Factory; use Nexus\CsConfig\Ruleset\Nexus82; -return Factory::create(new Nexus82())->forProjects(); +return Factory::create(new Nexus82())->forLibrary('My Library', 'John Doe');
这将给出以下许可证头
<?php /** * This file is part of My Library. * * (c) John Doe * * For the full copyright and license information, please view * the LICENSE file that was distributed with this source code. */ namespace Nexus\CsConfig;
在规则集中覆盖规则
如果您认为规则集中的某个特定规则不适合您,您可以覆盖它而不是创建一个新的规则集
<?php use Nexus\CsConfig\Factory; use Nexus\CsConfig\Ruleset\Nexus82; -return Factory::create(new Nexus82())->forProjects(); +return Factory::create(new Nexus82(), [ + 'binary_operator_spaces' => false, +])->forProjects();
为 PhpCsFixer\Config
指定选项
Factory
类返回一个 PhpCsFixer\Config
实例,并完全支持其所有属性设置。您可以将包含您希望传递的选项的数组传递给 Factory::create()
的第三个参数。
选项
<?php use Nexus\CsConfig\Factory; use Nexus\CsConfig\Ruleset\Nexus82; -return Factory::create(new Nexus82())->forProjects(); +return Factory::create(new Nexus82(), [], [ + 'usingCache' => false, + 'hideProgress => true, +])->forProjects();
自定义规则集
如果无法为组织范围内的使用创建自定义规则集,配置工厂的目的是什么,对吧?好吧,您不必局限于使用默认规则集并放置一个长列表的覆盖。这真是太糟糕了。
实现此目的的方法取决于您,但主要思想是创建一个新的规则集,它扩展 Nexus\CsConfig\Ruleset\AbstractRuleset
。是的,就这么简单。然后您只需为其所需的四个(4)受保护属性提供详细信息。
<?php namespace MyCompany\CodingStandards\Ruleset; use Nexus\CsConfig\Ruleset\AbstractRuleset; final class MyCompany extends AbstractRuleset { public function __construct() { $this->name = 'My Company'; $this->rules = [ '@PSR2' => true, ... ]; $this->requiredPHPVersion = 80200; $this->autoActivateIsRiskyAllowed = true; } }
然后,在创建您的 .php-cs-fixer.dist.php
时,使用您自己的规则集。
<?php use Nexus\CsConfig\Factory; use MyCompany\CodingStandards\Ruleset\MyCompany; return Factory::create(new MyCompany())->forProjects();
鸣谢
此项目受 ergebnis/php-cs-fixer-config
的启发,并进行了改进。
贡献
非常欢迎贡献。如果您看到改进或错误修正,现在就打开一个 PR!