LaravelDocs(中文)

Pint

Laravel Pint 是一個專為 Laravel 設計的 PHP 程式碼風格修復工具

簡介 (Introduction)

Laravel Pint 是一個專為極簡主義者設計的 PHP 程式碼風格修復工具。Pint 建立在 PHP CS Fixer 之上,讓您可以輕鬆地確保程式碼風格保持整潔和一致。

Pint 會自動安裝在所有新的 Laravel 應用程式中,因此您可以立即開始使用。預設情況下,Pint 不需要任何設定,並且會依照 Laravel 的程式碼風格規範來修復您的程式碼風格問題。

安裝 (Installation)

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

composer require laravel/pint --dev

執行 Pint (Running Pint)

您可以透過呼叫專案 vendor/bin 目錄下的 pint 二進位檔來指示 Pint 修復程式碼風格問題:

./vendor/bin/pint

如果您希望 Pint 以平行模式(實驗性)執行以提高效能,可以使用 --parallel 選項:

./vendor/bin/pint --parallel

平行模式也允許您透過 --max-processes 選項指定最大執行程序數量。如果未提供此選項,Pint 將使用機器上所有可用的核心:

./vendor/bin/pint --parallel --max-processes=4

您也可以針對特定檔案或目錄執行 Pint:

./vendor/bin/pint app/Models

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

Pint 會顯示所有已更新檔案的詳細清單。您可以在呼叫 Pint 時提供 -v 選項來查看更多關於 Pint 變更的詳細資訊:

./vendor/bin/pint -v

如果您只想檢查程式碼是否有風格錯誤而不實際更改檔案,可以使用 --test 選項。如果發現任何程式碼風格錯誤,Pint 將回傳非零的結束代碼:

./vendor/bin/pint --test

如果您只想修改與 Git 提供的分支有差異的檔案,可以使用 --diff=[branch] 選項。這在 CI 環境(如 GitHub Actions)中非常有效,可以透過只檢查新增或修改的檔案來節省時間:

./vendor/bin/pint --diff=main

如果您只想修改 Git 中尚未提交變更的檔案,可以使用 --dirty 選項:

./vendor/bin/pint --dirty

如果您希望 Pint 修復任何有程式碼風格錯誤的檔案,但如果有任何錯誤被修復時也以非零結束代碼退出,可以使用 --repair 選項:

./vendor/bin/pint --repair

設定 Pint (Configuring Pint)

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

{
  "preset": "laravel"
}

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

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

預設配置 (Presets)

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

./vendor/bin/pint --preset psr12

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

{
  "preset": "psr12"
}

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

規則 (Rules)

規則是 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

排除檔案 / 資料夾 (Excluding Files / Folders)

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

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

如果您希望排除所有包含特定名稱模式的檔案,可以使用 notName 設定選項:

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

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

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

持續整合 (Continuous Integration)

GitHub Actions

要使用 Laravel Pint 自動化專案的 Linting,您可以設定 GitHub Actions 以便在將新程式碼推送到 GitHub 時執行 Pint。首先,請務必在 GitHub 的 Settings > Actions > General > Workflow permissions 中授予工作流程「Read and write permissions」。然後,建立一個包含以下內容的 .github/workflows/lint.yml 檔案:

name: Fix Code Style

on: [push]

jobs:
  lint:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: true
      matrix:
        php: [8.4]

    steps:
      - name: Checkout code
        uses: actions/checkout@v5

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ matrix.php }}
          tools: pint

      - name: Run Pint
        run: pint

      - name: Commit linted files
        uses: stefanzweifel/git-auto-commit-action@v6