Laravel Pint
Introduction
Laravel Pint is an opinionated PHP code style fixer for minimalists. Pint is built on top of PHP-CS-Fixer and makes it simple to ensure that your code style stays clean and consistent.
Pint is automatically installed with all new Laravel applications so you may start using it immediately. By default, Pint does not require any configuration and will fix code style issues in your code by following the opinionated coding style of Laravel.
Installation
Pint is included in recent releases of the Laravel framework, so installation is typically unnecessary. However, for older applications, you may install Laravel Pint via Composer:
1composer require laravel/pint --dev
1composer require laravel/pint --dev
Running Pint
You can instruct Pint to fix code style issues by invoking the pint
binary that is available in your project's vendor/bin
directory:
1./vendor/bin/pint
1./vendor/bin/pint
You may also run Pint on specific files or directories:
1./vendor/bin/pint app/Models23./vendor/bin/pint app/Models/User.php
1./vendor/bin/pint app/Models23./vendor/bin/pint app/Models/User.php
Pint will display a thorough list of all of the files that it updates. You can view even more detail about Pint's changes by providing the -v
option when invoking Pint:
1./vendor/bin/pint -v
1./vendor/bin/pint -v
If you would like Pint to simply inspect your code for style errors without actually changing the files, you may use the --test
option. Pint will return a non-zero exit code if any code style errors are found:
1./vendor/bin/pint --test
1./vendor/bin/pint --test
If you would like Pint to only modify the files that have uncommitted changes according to Git, you may use the --dirty
option:
1./vendor/bin/pint --dirty
1./vendor/bin/pint --dirty
If you would like Pint to fix any files with code style errors but also exit with a non-zero exit code if any errors were fixed, you may use the --repair
option:
1./vendor/bin/pint --repair
1./vendor/bin/pint --repair
Configuring Pint
As previously mentioned, Pint does not require any configuration. However, if you wish to customize the presets, rules, or inspected folders, you may do so by creating a pint.json
file in your project's root directory:
1{2 "preset": "laravel"3}
1{2 "preset": "laravel"3}
In addition, if you wish to use a pint.json
from a specific directory, you may provide the --config
option when invoking Pint:
1./vendor/bin/pint --config vendor/my-company/coding-style/pint.json
1./vendor/bin/pint --config vendor/my-company/coding-style/pint.json
Presets
Presets define a set of rules that can be used to fix code style issues in your code. By default, Pint uses the laravel
preset, which fixes issues by following the opinionated coding style of Laravel. However, you may specify a different preset by providing the --preset
option to Pint:
1./vendor/bin/pint --preset psr12
1./vendor/bin/pint --preset psr12
If you wish, you may also set the preset in your project's pint.json
file:
1{2 "preset": "psr12"3}
1{2 "preset": "psr12"3}
Pint's currently supported presets are: laravel
, per
, psr12
, symfony
, and empty
.
Rules
Rules are style guidelines that Pint will use to fix code style issues in your code. As mentioned above, presets are predefined groups of rules that should be perfect for most PHP projects, so you typically will not need to worry about the individual rules they contain.
However, if you wish, you may enable or disable specific rules in your pint.json
file or use the empty
preset and define the rules from scratch:
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": true9 }10 }11}
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": true9 }10 }11}
Pint is built on top of PHP-CS-Fixer. Therefore, you may use any of its rules to fix code style issues in your project: PHP-CS-Fixer Configurator.
Excluding Files / Folders
By default, Pint will inspect all .php
files in your project except those in the vendor
directory. If you wish to exclude more folders, you may do so using the exclude
configuration option:
1{2 "exclude": [3 "my-specific/folder"4 ]5}
1{2 "exclude": [3 "my-specific/folder"4 ]5}
If you wish to exclude all files that contain a given name pattern, you may do so using the notName
configuration option:
1{2 "notName": [3 "*-my-file.php"4 ]5}
1{2 "notName": [3 "*-my-file.php"4 ]5}
If you would like to exclude a file by providing an exact path to the file, you may do so using the notPath
configuration option:
1{2 "notPath": [3 "path/to/excluded-file.php"4 ]5}
1{2 "notPath": [3 "path/to/excluded-file.php"4 ]5}
Continuous Integration
GitHub Actions
To automate linting your project with Laravel Pint, you can configure GitHub Actions to run Pint whenever new code is pushed to GitHub. First, be sure to grant "Read and write permissions" to workflows within GitHub at Settings > Actions > General > Workflow permissions. Then, create a .github/workflows/lint.yml
file with the following content:
1name: Fix Code Style23on: [push]45jobs:6 lint:7 runs-on: ubuntu-latest8 strategy:9 fail-fast: true10 matrix:11 php: [8.3]1213 steps:14 - name: Checkout code15 uses: actions/checkout@v41617 - name: Setup PHP18 uses: shivammathur/setup-php@v219 with:20 php-version: ${{ matrix.php }}21 extensions: json, dom, curl, libxml, mbstring22 coverage: none2324 - name: Install Pint25 run: composer global require laravel/pint2627 - name: Run Pint28 run: pint2930 - name: Commit linted files31 uses: stefanzweifel/git-auto-commit-action@v532 with:33 commit_message: "Fixes coding style"
1name: Fix Code Style23on: [push]45jobs:6 lint:7 runs-on: ubuntu-latest8 strategy:9 fail-fast: true10 matrix:11 php: [8.3]1213 steps:14 - name: Checkout code15 uses: actions/checkout@v41617 - name: Setup PHP18 uses: shivammathur/setup-php@v219 with:20 php-version: ${{ matrix.php }}21 extensions: json, dom, curl, libxml, mbstring22 coverage: none2324 - name: Install Pint25 run: composer global require laravel/pint2627 - name: Run Pint28 run: pint2930 - name: Commit linted files31 uses: stefanzweifel/git-auto-commit-action@v532 with:33 commit_message: "Fixes coding style"