Laravel Pint
简介
Laravel Pint 是一款专为极简主义者打造的 PHP 代码风格修复工具。Pint 基于 PHP CS Fixer 构建,让您可以轻松确保代码风格保持整洁且一致。
所有新的 Laravel 应用程序都会自动安装 Pint,因此您可以立即使用它。默认情况下,Pint 无需任何配置,它将遵循 Laravel 的代码风格规范,自动修复您代码中的格式问题。
安装
最新的 Laravel 框架版本中已内置 Pint,因此通常无需额外安装。不过,对于较旧的应用程序,您可以通过 Composer 安装 Laravel Pint:
1composer require laravel/pint --dev
运行 Pint
您可以通过调用项目 vendor/bin 目录下的 pint 二进制文件来指示 Pint 修复代码风格问题:
1./vendor/bin/pint
如果您希望以并行模式(实验性功能)运行 Pint 以提高性能,可以使用 --parallel 选项:
1./vendor/bin/pint --parallel
并行模式还允许您通过 --max-processes 选项指定运行的最大进程数。如果不提供此选项,Pint 将使用您机器上所有可用的核心:
1./vendor/bin/pint --parallel --max-processes=4
您也可以针对特定文件或目录运行 Pint:
1./vendor/bin/pint app/Models2 3./vendor/bin/pint app/Models/User.php
Pint 会显示已更新文件的详细列表。如果您想查看有关 Pint 更改的更多详细信息,可以在调用 Pint 时提供 -v 选项:
1./vendor/bin/pint -v
如果您只想检查代码是否存在风格错误而不想实际更改文件,可以使用 --test 选项。如果发现任何代码风格错误,Pint 将返回非零的退出代码:
1./vendor/bin/pint --test
如果您只想修改根据 Git 判定与指定分支相比有差异的文件,可以使用 --diff=[branch] 选项。这在您的 CI 环境(如 GitHub Actions)中非常有效,仅检查新文件或已修改的文件,从而节省时间:
1./vendor/bin/pint --diff=main
如果您只想修改根据 Git 判定有未提交更改的文件,可以使用 --dirty 选项:
1./vendor/bin/pint --dirty
如果您希望 Pint 修复所有存在风格错误的文件,且在修复了任何错误时返回非零退出代码,可以使用 --repair 选项:
1./vendor/bin/pint --repair
配置 Pint
如前所述,Pint 无需任何配置。但是,如果您希望自定义预设、规则或检查的文件夹,可以通过在项目根目录创建一个 pint.json 文件来实现:
1{2 "preset": "laravel"3}
此外,如果您希望使用特定目录下的 pint.json 文件,可以在调用 Pint 时提供 --config 选项:
1./vendor/bin/pint --config vendor/my-company/coding-style/pint.json
预设 (Presets)
预设定义了一组用于修复代码风格问题的规则。默认情况下,Pint 使用 laravel 预设,它遵循 Laravel 的代码风格规范来修复问题。当然,您也可以通过向 Pint 提供 --preset 选项来指定其他预设:
1./vendor/bin/pint --preset psr12
如果您愿意,也可以在项目的 pint.json 文件中设置预设:
1{2 "preset": "psr12"3}
Pint 目前支持的预设包括:laravel、per、psr12、symfony 和 empty。
规则 (Rules)
规则是 Pint 用于修复代码风格问题的风格指南。如上所述,预设是预定义的规则组,对于大多数 PHP 项目来说已经足够完美,因此您通常不需要担心它们包含的个别规则。
不过,如果您有需要,可以在 pint.json 文件中启用或禁用特定规则,或者使用 empty 预设从头定义规则:
1{ 2 "preset": "laravel", 3 "rules": { 4 "simplified_null_return": true, 5 "array_indentation": false, 6 "new_with_parentheses": { 7 "anonymous_class": true, 8 "named_class": true 9 }10 }11}
Pint 基于 PHP CS Fixer 构建。因此,您可以使用其任何规则来修复项目中的代码风格问题:PHP CS Fixer 配置器。
自定义规则
除了 PHP CS Fixer 的规则外,Pint 还提供了以 Pint/ 为前缀的自定义规则。这些规则默认不启用,但您可以在 pint.json 文件中启用它们。
Pint/phpdoc_type_annotations_only
此规则会从您的代码中删除所有注释和文档块中的正文描述,仅保留包含 @ 注解的行,例如 @param、@return、@var、@phpstan-type 等:
1/**2 * Get the posts for the user. 3 * 4 * @return HasMany<Post, $this>5 */6public function posts(): HasMany
不包含 @ 注解的单行注释和块注释将被完全删除。如果您想保留特定的注释,可以为其添加 @note、@warning 或 @todo 前缀:
1// @note This comment will be preserved.
要启用此规则,请将其添加到您的 pint.json 文件中:
1{2 "preset": "laravel",3 "rules": {4 "Pint/phpdoc_type_annotations_only": true5 }6}
该规则会自动跳过 config 目录中的文件,因为配置文件通常依赖注释来进行说明。
排除文件 / 文件夹
默认情况下,Pint 会检查项目中所有的 .php 文件(vendor 目录除外)。如果您希望排除更多文件夹,可以使用 exclude 配置选项:
1{2 "exclude": [3 "my-specific/folder"4 ]5}
如果您希望排除所有符合特定名称模式的文件,可以使用 notName 配置选项:
1{2 "notName": [3 "*-my-file.php"4 ]5}
如果您想通过提供文件的确切路径来排除某个文件,可以使用 notPath 配置选项:
1{2 "notPath": [3 "path/to/excluded-file.php"4 ]5}
持续集成 (CI)
GitHub Actions
为了利用 Laravel Pint 自动对项目进行 Lint 检查,您可以配置 GitHub Actions,以便在每次将新代码推送到 GitHub 时运行 Pint。首先,请确保在 GitHub 的 Settings > Actions > General > Workflow permissions 中授予工作流 "Read and write permissions" 权限。然后,创建 .github/workflows/lint.yml 文件,内容如下:
1name: Fix Code Style 2 3on: [push] 4 5jobs: 6 lint: 7 runs-on: ubuntu-latest 8 strategy: 9 fail-fast: true10 matrix:11 php: [8.4]12 13 steps:14 - name: Checkout code15 uses: actions/checkout@v516 17 - name: Setup PHP18 uses: shivammathur/setup-php@v219 with:20 php-version: ${{ matrix.php }}21 tools: pint22 23 - name: Run Pint24 run: pint25 26 - name: Commit linted files27 uses: stefanzweifel/git-auto-commit-action@v6