跳转至内容

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/Models
2 
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 目前支持的预设包括:laravelperpsr12symfonyempty

规则 (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": true
5 }
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: true
10 matrix:
11 php: [8.4]
12 
13 steps:
14 - name: Checkout code
15 uses: actions/checkout@v5
16 
17 - name: Setup PHP
18 uses: shivammathur/setup-php@v2
19 with:
20 php-version: ${{ matrix.php }}
21 tools: pint
22 
23 - name: Run Pint
24 run: pint
25 
26 - name: Commit linted files
27 uses: stefanzweifel/git-auto-commit-action@v6