zvive/fixer

基于 permafrost-dev/phpcsfixer-preset 的 PHP CS Fixer 及其附加修复器

v10.0 2023-02-24 22:27 UTC

This package is auto-updated.

Last update: 2024-09-25 01:54:18 UTC


README



phpcsfixer-preset

version license downloads Run Tests Coverage Status


此包允许您在整个项目中使用相同的 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:project
  • laravel:package

标志: --outfile (或 -o)

必需:

默认值: .php-cs-fixer.dist.php

可能值:任何有效文件名

标志: --ruleset (或 -r)

必需:

默认值: default

可能值

  • default
  • laravel_shift
  • php_unit
  • spatie

标志: --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

规则集

默认

LaravelShift

PhpUnit

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

变更日志

有关最近更改的更多信息,请参阅 变更日志

贡献

欢迎 RulesetsFinders、错误修复、建议或改进的贡献。请为这些贡献之一打开一个适当标记的问题或拉取请求。

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件