symplify/easy-coding-standard
Easy Coding Standard (ECS) makes PHP coding standards effortless on PHP 7.2–8.5. Fast parallel runs, supports PHP_CodeSniffer and PHP-CS-Fixer, uses prepared rule sets, generates ecs.php config on first run, and can check and auto-fix code with --fix.
RemoveDeadVarThisFixerRemoves pointless [@var](https://github.com/var) $this docblocks above $this calls — they add noise and never help type inference. Added to the docblock level.
function someFunction()
{
- /** [@var](https://github.com/var) SomeType $this */
$this->run();
}
AddMissingVarNameFixer for array item typesThe fixer now correctly appends the variable name when the [@var](https://github.com/var) type is an array shape like int[]:
function arrayItems()
{
- /** [@var](https://github.com/var) int[] */
+ /** [@var](https://github.com/var) int[] $values */
$values = [1000];
}
The headline of this release: ECS is now a single package. The symplify/coding-standard fixers moved in-tree, and the Laravel container dependency is gone. No breaking changes for users — the Symplify\CodingStandard\Fixer\* class names are unchanged.
If you previously required symplify/coding-standard directly, drop it — it now ships inside ECS:
composer remove symplify/coding-standard --dev
composer require symplify/easy-coding-standard:^13.2 --dev
Your ecs.php needs no changes: the Symplify\CodingStandard\Fixer\* class names are unchanged. If you only ever required symplify/easy-coding-standard, a plain composer update symplify/easy-coding-standard is all you need.
symplify/coding-standard merged into ECS (#19)The 26 custom Symplify fixers ECS has always relied on now live directly in this repository under packages/coding-standard/. ECS could never run without them, and many prepared sets are tightly coupled to them — so maintaining two repos added friction for no benefit.
What this means for you:
One package instead of two. composer require symplify/easy-coding-standard --dev no longer pulls in a separate symplify/coding-standard.
Class names are unchanged — your existing ecs.php keeps working as-is:
// ecs.php — still valid, no change needed
use Symplify\EasyCodingStandard\Config\ECSConfig;
use Symplify\CodingStandard\Fixer\LineLength\LineLengthFixer;
return ECSConfig::configure()
->withRules([LineLengthFixer::class]);
->withPreparedSets(symplify: true);
withDocblockLevel() now goes much deeper (#19)Because the Symplify commenting fixers now ship in-tree, the gradual docblock level gained 11 new rules (24 total). You opt in one level per PR, safest first:
// ecs.php
use Symplify\EasyCodingStandard\Config\ECSConfig;
return ECSConfig::configure()
->withDocblockLevel(5); // ramp up one level at a time
New rules now reachable through the level include inline [@var](https://github.com/var) normalization (DoubleAsteriskInlineVarFixer, SingleLineInlineVarDocBlockFixer, AddMissingVarNameFixer), [@param](https://github.com/param) fixes (AddMissingParamNameFixer, FixParamNameTypoFixer, RemoveParamNameReferenceFixer, RemoveDeadParamFixer), and superfluous-name removal (RemoveSuperfluousReturnNameFixer, RemoveSuperfluousVarNameFixer).
illuminate/container replaced with entropy/entropy (#17)ECS's DI container no longer extends Illuminate's. ECSConfig now extends Entropy\Container\Container.
What this means for you:
illuminate/container and its bundled patch (patches/illuminate-container-container-php.patch) are gone.symfony/console stays — it's still a transitive dependency of PHP-CS-Fixer and easy-parallel, so it can't be dropped.This is an internal change. If you only use the public
ECSConfig::configure()->with...()API, nothing changes for you.
Full Changelog: https://github.com/easy-coding-standard/easy-coding-standard/compare/12.6.2...13.0.0
Full Changelog: https://github.com/easy-coding-standard/easy-coding-standard/compare/12.6.1...12.6.2
Full Changelog: https://github.com/easy-coding-standard/easy-coding-standard/compare/12.5.24...12.6.0
Full Changelog: https://github.com/easy-coding-standard/easy-coding-standard/compare/12.5.21...12.5.23
Full Changelog: https://github.com/easy-coding-standard/easy-coding-standard/compare/12.5.18...12.5.20
test Script by @Kenneth-Sills in https://github.com/easy-coding-standard/easy-coding-standard/pull/227Full Changelog: https://github.com/easy-coding-standard/easy-coding-standard/compare/12.5.6...12.5.8
Full Changelog: https://github.com/easy-coding-standard/easy-coding-standard/compare/12.5.4...12.5.5
Full Changelog: https://github.com/easy-coding-standard/easy-coding-standard/compare/12.2.0...12.2.1
--no-diffs CLI Option (#195), thanks @staabmEasyCodingStandardStyle->isDebug() (#194), thanks @staabmecs.phpRunning ECS on Symfony project can create conflict with native ContainerConfigurator. To avoid that, we introduce a new config, that is fully scoped and isolated within ECS.
Another big advantage is new configuration methods with validation and autocomplete right in your ide :+1:
Read more in https://tomasvotruba.com/blog/new-in-ecs-simpler-config/
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\EasyCodingStandard\ValueObject\Option;
// ups, possible conflict with ContainerConfigurator
return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters();
// too verbose params, constants and possible typo in param value
$parameters->set(Option::PATHS, [[ // ups, "[[" typo
__DIR__ . '/src/',
]]);
$services = $containerConfigurator->services();
$services->set(ArraySyntaxFixer::class);
};
use Symplify\EasyCodingStandard\Config\ECSConfig;
use Symplify\EasyCodingStandard\ValueObject\Set\SetList;
return static function (ECSConfig $ecsConfig): void {
$ecsConfig->paths([
__DIR__ . '/src',
]);
$ecsConfig->rule(ArraySyntaxFixer::class);
$ecsConfig->sets([SetList::PSR_12]);
};
Do you have multi-core CPUs? ECS can run in X parallel threads, where X is number of your threads. E.g. with laptop with AMD Ryzen 4750U it is 16.
That means 1600 % faster run with same amount of analysed files. Did you code base took 16 minutes to fix? Now it's 1 minute.
This feature is:
Try it:
// ecs.php
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\EasyCodingStandard\ValueObject\Option;
return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters();
$parameters->set(Option::PARALLEL, true);
};
And that's it :wink:
The parallel run is heavily based on @phpstan parallel run - thanks to Ondřej Mirtes for inspiration :pray:
Since 9.3.3, the package is downgraded to PHP 7.1 and scoped. The former package https://github.com/symplify/easy-coding-standard-prefixed is deprecated and replaced by symplify/easy-coding-standard should be used instead.
Read more in standalone post https://tomasvotruba.com/blog/introducing-ecs-prefixed-and-downgraded-to-php-71
How can I help you explore Laravel packages today?