跳到內容

Laravel Pint

簡介

Laravel Pint 是一款為極簡主義者設計的、具有主觀性的 PHP 程式碼樣式修正器。Pint 基於 PHP-CS-Fixer 建構,可輕鬆確保您的程式碼樣式保持整潔和一致。

Pint 會自動安裝在所有新的 Laravel 應用程式中,因此您可以立即開始使用它。預設情況下,Pint 不需要任何設定,並且會遵循 Laravel 的主觀程式碼樣式,來修正您程式碼中的程式碼樣式問題。

安裝

Pint 已包含在 Laravel 框架的最新版本中,因此通常不需要安裝。但是,對於較舊的應用程式,您可以使用 Composer 安裝 Laravel Pint

composer require laravel/pint --dev

執行 Pint

您可以透過呼叫專案的 vendor/bin 目錄中可用的 pint 二進位檔,來指示 Pint 修正程式碼樣式問題

./vendor/bin/pint

您也可以在特定的檔案或目錄上執行 Pint

./vendor/bin/pint app/Models
 
./vendor/bin/pint app/Models/User.php

Pint 將顯示它更新的所有檔案的詳細清單。您可以透過在呼叫 Pint 時提供 -v 選項,來檢視有關 Pint 變更的更多詳細資訊

./vendor/bin/pint -v

如果您希望 Pint 僅檢查您的程式碼是否存在樣式錯誤,而無需實際變更檔案,您可以使用 --test 選項。如果發現任何程式碼樣式錯誤,Pint 將傳回非零的退出碼

./vendor/bin/pint --test

如果您希望 Pint 僅修改根據 Git 具有未提交變更的檔案,您可以使用 --dirty 選項

./vendor/bin/pint --dirty

如果您希望 Pint 修正任何具有程式碼樣式錯誤的檔案,並且在修正任何錯誤時也以非零的退出碼退出,您可以使用 --repair 選項

./vendor/bin/pint --repair

設定 Pint

如先前所述,Pint 不需要任何設定。但是,如果您希望自訂預設配置、規則或檢查的資料夾,您可以在專案的根目錄中建立 pint.json 檔案來執行此操作

{
"preset": "laravel"
}

此外,如果您希望使用特定目錄中的 pint.json,您可以在呼叫 Pint 時提供 --config 選項

./vendor/bin/pint --config vendor/my-company/coding-style/pint.json

預設配置

預設配置定義了一組可用於修正您程式碼中程式碼樣式問題的規則。預設情況下,Pint 使用 laravel 預設配置,該配置遵循 Laravel 的主觀程式碼樣式來修正問題。但是,您可以透過向 Pint 提供 --preset 選項來指定不同的預設配置

./vendor/bin/pint --preset psr12

如果您願意,也可以在專案的 pint.json 檔案中設定預設配置

{
"preset": "psr12"
}

Pint 目前支援的預設配置為:laravelperpsr12symfonyempty

規則

規則是 Pint 將用來修正您程式碼中程式碼樣式問題的樣式指南。如上所述,預設配置是預定義的規則群組,應該非常適合大多數 PHP 專案,因此您通常不需要擔心它們包含的個別規則。

但是,如果您願意,您可以在 pint.json 檔案中啟用或停用特定的規則,或使用 empty 預設配置並從頭開始定義規則

{
"preset": "laravel",
"rules": {
"simplified_null_return": true,
"array_indentation": false,
"new_with_parentheses": {
"anonymous_class": true,
"named_class": true
}
}
}

Pint 基於 PHP-CS-Fixer 建構。因此,您可以使用它的任何規則來修正專案中的程式碼樣式問題:PHP-CS-Fixer Configurator

排除檔案 / 資料夾

預設情況下,Pint 會檢查您專案中除了 vendor 目錄中的所有 .php 檔案。如果您希望排除更多資料夾,可以使用 exclude 設定選項來執行此操作

{
"exclude": [
"my-specific/folder"
]
}

如果您希望排除所有包含指定名稱模式的檔案,可以使用 notName 設定選項來執行此操作

{
"notName": [
"*-my-file.php"
]
}

如果您希望透過提供檔案的確切路徑來排除檔案,可以使用 notPath 設定選項來執行此操作

{
"notPath": [
"path/to/excluded-file.php"
]
}

持續整合

GitHub Actions

要使用 Laravel Pint 自動化專案的程式碼檢查,您可以設定 GitHub Actions,以便在將新程式碼推送至 GitHub 時執行 Pint。首先,請務必在 GitHub 中的 設定 > Actions > 一般 > 工作流程權限中將「讀取和寫入權限」授予工作流程。然後,建立一個包含以下內容的 .github/workflows/lint.yml 檔案

name: Fix Code Style
 
on: [push]
 
jobs:
lint:
runs-on: ubuntu-latest
strategy:
fail-fast: true
matrix:
php: [8.3]
 
steps:
- name: Checkout code
uses: actions/checkout@v4
 
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: json, dom, curl, libxml, mbstring
coverage: none
 
- name: Install Pint
run: composer global require laravel/pint
 
- name: Run Pint
run: pint
 
- name: Commit linted files
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: "Fixes coding style"