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