php-forge/coding-standard

Centralized ECS and Rector configurations for PHP projects.

Maintainers

Package info

github.com/php-forge/coding-standard

pkg:composer/php-forge/coding-standard

Statistics

Installs: 60 740

Dependents: 31

Suggesters: 0

Stars: 2

Open Issues: 0

0.3.1 2026-05-06 12:32 UTC

README

PHP Forge

Coding standard


Centralized ECS and Rector configuration for PHP projects
Share one set of rules across multiple repositories via Composer.

System requirements

  • PHP 8.3 or higher.
  • Composer for dependency management.

Installation

composer require php-forge/coding-standard:^0.3 --dev

Or add the dependency manually to composer.json:

{
    "require-dev": {
        "php-forge/coding-standard": "^0.3"
    }
}

Then run composer update.

Configuration files

This package ships shared ECS and Rector configurations under vendor/php-forge/coding-standard/src/:

File Purpose
src/ecs.php Shared ECS base rules, no PHP migration set
src/ecs-81.php Base + @PHP81Migration PHP-CS-Fixer set
src/ecs-82.php Base + @PHP82Migration
src/ecs-83.php Base + @PHP83Migration
src/ecs-84.php Base + @PHP84Migration
src/rector.php Shared Rector base rules, no PHP level set
src/rector-81.php Base + SetList::PHP_81 + LevelSetList::UP_TO_PHP_81
src/rector-82.php Base + SetList::PHP_82 + LevelSetList::UP_TO_PHP_82
src/rector-83.php Base + SetList::PHP_83 + LevelSetList::UP_TO_PHP_83
src/rector-84.php Base + SetList::PHP_84 + LevelSetList::UP_TO_PHP_84

Pick the version that matches the minimum PHP your project supports; Rector upgrades code up to that level and PHP-CS-Fixer enforces matching syntax. The plain ecs.php / rector.php apply no PHP-version migrations.

ECS wrapper (ecs.php)

Create ecs.php in your repository root, requiring the version that matches the minimum PHP your project supports (ecs-83.php for PHP 8.3, etc.):

<?php

declare(strict_types=1);

/** @var \Symplify\EasyCodingStandard\Configuration\ECSConfigBuilder $ecsConfigBuilder */
$ecsConfigBuilder = require __DIR__ . '/vendor/php-forge/coding-standard/src/ecs-83.php';

return $ecsConfigBuilder
    ->withPaths(
        [
            __DIR__ . '/src',
            __DIR__ . '/tests',
        ],
    )
    ->withSkip(
        [
            // project-specific skips here.
        ],
    );

Rector wrapper (rector.php)

Create rector.php in your repository root, importing the version that matches your minimum PHP target:

<?php

declare(strict_types=1);

use Rector\Config\RectorConfig;

return static function (RectorConfig $rectorConfig): void {
    $rectorConfig->import(__DIR__ . '/vendor/php-forge/coding-standard/src/rector-83.php');

    $rectorConfig->paths(
        [
            __DIR__ . '/src',
            __DIR__ . '/tests',
        ],
    );

    // project-specific overrides can be added after the import.
    // $rectorConfig->skip([...]);
};

Yii2-specific rules

For framework-specific rules, keep them in a separate config file (or a separate package) and import it after the base configuration. Do not mix Yii2 rules into the generic base:

<?php

declare(strict_types=1);

use Rector\Config\RectorConfig;

return static function (RectorConfig $rectorConfig): void {
    $rectorConfig->import(__DIR__ . '/vendor/php-forge/coding-standard/src/rector.php');
    $rectorConfig->import(__DIR__ . '/rector-yii2.php');

    $rectorConfig->paths(
        [
            __DIR__ . '/src',
            __DIR__ . '/tests',
        ],
    );
};

Scaffolded distribution

This package is a yii2-extensions/scaffold provider for the root ecs.php and rector.php wrapper templates (sourced from src/config/ via scaffold.json). Consumers can opt in by allowing the plugin and listing this package as an authorised provider:

composer require yii2-extensions/scaffold:^0.1 --dev
{
    "config": {
        "allow-plugins": {
            "yii2-extensions/scaffold": true
        }
    },
    "extra": {
        "scaffold": {
            "auto": false,
            "allowed-packages": [
                "php-forge/coding-standard"
            ]
        }
    }
}

With auto: false, the plugin does not run on composer install; sync the wrappers manually:

vendor/bin/scaffold reapply --provider=php-forge/coding-standard

Both wrappers ship in mode preserve; written once on first install, never overwritten so consumer edits to paths or PHP target version survive subsequent runs.

Related packages

For dev environment scaffolding, see php-forge/baseline. The two packages are independent; adopt either, both, or neither.

Composer scripts

Follow the same convention used across PHP Forge repositories:

{
    "scripts": {
        "ecs": "./vendor/bin/ecs --fix",
        "rector": "./vendor/bin/rector process"
    }
}

Package information

PHP Latest Stable Version Total Downloads

Quality code

Super-Linter StyleCI

Our social networks

Follow on X

License

License