nexusphp/cs-config

PHP CS Fixer 自定义规则集的工厂。

v3.24.3 2024-09-07 12:51 UTC

README

PHP version build Coverage Status Latest Stable Version license MIT Total Downloads

此库为 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