跳轉至內容

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