Skip to content

🧹 Adds custom rule-sets to PHP CS Fixer for consistent coding standards.

License

Notifications You must be signed in to change notification settings

wayofdev/php-cs-fixer-config

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation


WayOfDev Logo

Build
Build Status

Project
Total Downloads Latest Stable Version Commits since latest release PHP Version Require

Quality
Codecov Mutation testing badge PHP Stan Level 9 of 9

Community
Discord Follow on Twitter (X)


PHP CS Fixer Config

Wrapper with pre-defined rules around the PHP-CS-Fixer package — A tool to automatically fix PHP Coding Standards issues.

This repository aims to provide a standardized way to apply coding standards across multiple projects, ensuring consistency and adherence to best practices. By using predefined rulesets, it simplifies the setup process and allows teams to quickly integrate PHP-CS-Fixer into their development workflow.


If you like/use this package, please consider ⭐️ starring it. Thanks!


📜 Custom Rulesets

WayOfDev\PhpCsFixer\Config\RuleSets\DefaultRuleset::class

Based on @Symfony ruleset

WayOfDev\PhpCsFixer\Config\RuleSets\ExtendedPERSet::class

Based on @PER-CS2.0 ruleset


💿 Installation

→ Using composer

Require as dependency:

composer req --dev wayofdev/cs-fixer-config

🛠 Configuration

→ Setup

  • Create PHP file and name it .php-cs-fixer.dist.php and place it inside root directory of project. It will be recognized by PHP CS Fixer automatically.

  • Example contents of .php-cs-fixer.dist.php file:

     <?php
    
     declare(strict_types=1);
    
     use WayOfDev\PhpCsFixer\Config\ConfigBuilder;
     use WayOfDev\PhpCsFixer\Config\RuleSets\DefaultSet;
    
     require_once 'vendor/autoload.php';
    
     $config = ConfigBuilder::createFromRuleSet(new DefaultSet())
         ->inDir(__DIR__ . '/src')
         ->inDir(__DIR__ . '/tests')
         ->addFiles([__FILE__])
         ->getConfig()
     ;
    
     $config->setCacheFile(__DIR__ . '/.build/php-cs-fixer/php-cs-fixer.cache');
    
     return $config;

→ Composer Script

  • Add scripts section to composer.json:

    {
        "scripts": {
    +       "cs:diff": "php vendor/bin/php-cs-fixer fix --dry-run -v --diff",
    +       "cs:fix": "php vendor/bin/php-cs-fixer fix -v"
        }
    }

→ Git

  • Place .build folder file into .gitignore

    +/.build/
     /vendor/

→ Makefile

  • If you are using Makefile, create a Makefile with a lint-php and lint-diff targets:

    +APP_RUNNER ?= php
    +APP_COMPOSER ?= $(APP_RUNNER) composer
    +
    +prepare:
    +  mkdir -p .build/php-cs-fixer
    +.PHONY: prepare
    
    +lint-php: prepare ## Fixes code to follow coding standards using php-cs-fixer
    +  $(APP_COMPOSER) cs:fix
    +.PHONY: lint-php
    
    +lint-diff: prepare ## Runs php-cs-fixer in dry-run mode and shows diff which will by applied
    +  $(APP_COMPOSER) cs:diff
    +.PHONY: lint-diff

Or, you can check for one of our pre-configured Makefile from any of these repositories:

https://github.com/wayofdev/php-cs-fixer-config/blob/master/Makefile

https://github.com/wayofdev/laravel-package-tpl/blob/master/Makefile

→ GitHub Actions

  • To use this package in GitHub Actions, add a coding-standards.yml workflow to your repository:

    ---
    
    on:  # yamllint disable-line rule:truthy
      pull_request:
        branches:
          - master
      push:
        branches:
          - master
    
    name: 🧹 Fix PHP coding standards
    
    jobs:
      coding-standards:
        timeout-minutes: 4
        runs-on: ${{ matrix.os }}
        concurrency:
          cancel-in-progress: true
          group: coding-standards-${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
        strategy:
          matrix:
            os:
              - ubuntu-latest
            php-version:
              - '8.1'
            dependencies:
              - locked
        permissions:
          contents: write
        steps:
          - name: ⚙️ Set git to use LF line endings
            run: |
              git config --global core.autocrlf false
              git config --global core.eol lf
    
          - name: 🛠️ Setup PHP
            uses: shivammathur/setup-php@2.30.4
            with:
              php-version: ${{ matrix.php-version }}
              extensions: none, ctype, dom, json, mbstring, phar, simplexml, tokenizer, xml, xmlwriter
              ini-values: error_reporting=E_ALL
              coverage: none
    
          - name: 📦 Check out the codebase
            uses: actions/checkout@v4.1.5
    
          - name: 🛠️ Setup problem matchers
            run: |
              echo "::add-matcher::${{ runner.tool_cache }}/php.json"
    
          - name: 🤖 Validate composer.json and composer.lock
            run: composer validate --ansi --strict
    
          - name: 🔍 Get composer cache directory
            uses: wayofdev/gh-actions/actions/composer/get-cache-directory@v3.1.0
    
          - name: ♻️ Restore cached dependencies installed with composer
            uses: actions/cache@v4.0.2
            with:
              path: ${{ env.COMPOSER_CACHE_DIR }}
              key: php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-${{ hashFiles('composer.lock') }}
              restore-keys: php-${{ matrix.php-version }}-composer-${{ matrix.dependencies }}-
    
          - name: 📥 Install "${{ matrix.dependencies }}" dependencies with composer
            uses: wayofdev/gh-actions/actions/composer/install@v3.1.0
            with:
              dependencies: ${{ matrix.dependencies }}
    
          - name: 🛠️ Prepare environment
            run: make prepare
    
          - name: 🚨 Run coding standards task
            run: composer cs:fix
            env:
              PHP_CS_FIXER_IGNORE_ENV: true
    
          - name: 📤 Commit and push changed files back to GitHub
            uses: stefanzweifel/git-auto-commit-action@v5.0.1
            with:
              commit_message: 'style(php-cs-fixer): lint php files and fix coding standards'
              branch: ${{ github.head_ref }}
              commit_author: 'github-actions <github-actions@users.noreply.github.com>'
            env:
              GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Or, you can check for one of our pre-configured workflows from any of these repositories:

https://github.com/wayofdev/php-cs-fixer-config/blob/master/.github/workflows/coding-standards.yml


💻 Usage

Fix coding standards by simply running console command:

→ Directly

vendor/bin/php-cs-fixer fix -v

→ Via Composer Script

To use via composer script commands:

  • Fixes code to follow coding standards using php-cs-fixer:

    composer cs:diff
  • Runs php-cs-fixer in dry-run mode and shows diff which will by applied:

    composer cs:fix

→ Using Makefile

To use with Makefile

  • Fixes code to follow coding standards using php-cs-fixer:

    make lint-php
  • Runs php-cs-fixer in dry-run mode and shows diff which will by applied:

    make lint-diff

🔒 Security Policy

This project has a security policy.


🙌 Want to Contribute?

Thank you for considering contributing to the wayofdev community! We are open to all kinds of contributions. If you want to:

You are more than welcome. Before contributing, kindly check our contribution guidelines.

Conventional Commits


🫡 Contributors

Contributors Badge

🌐 Social Links


🧱 Resources


⚖️ License

Licence