Stars: 1039
Forks: 57
Pull Requests: 19
Issues: 0
Watchers: 25
Last Updated: 2022-12-17 13:40:57
[READ-ONLY] The Easiest way to start using PHP CS Fixer and PHP_CodeSniffer with 0-knowledge
License: MIT License
Languages: PHP
SetList
class for allAre you already using another tool?
composer require symplify/easy-coding-standard --dev
// ecs.php
use PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer;
use Symplify\EasyCodingStandard\Config\ECSConfig;
use Symplify\EasyCodingStandard\ValueObject\Set\SetList;
return static function (ECSConfig $ecsConfig): void {
// A. full sets
$ecsConfig->sets([SetList::PSR_12]);
// B. standalone rule
$ecsConfig->ruleWithConfiguration(ArraySyntaxFixer::class, [
'syntax' => 'short',
]);
};
It is highly recommended to imports sets (A) first, then add standalone rules (B).
The reason for this is that some settings are configured in the full sets too, and will therefore overwrite your standalone rules, if not configured first.
# dry
vendor/bin/ecs check src
# fix
vendor/bin/ecs check src --fix
How to load own config?
vendor/bin/ecs check src --config another-config.php
Configuration can be extended with many options. Here is list of them with example values and little description what are they for:
use PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer;
use Symplify\EasyCodingStandard\Config\ECSConfig;
return static function (ECSConfig $ecsConfig): void {
// alternative to CLI arguments, easier to maintain and extend
$ecsConfig->paths([__DIR__ . '/src', __DIR__ . '/tests']);
// bear in mind that this will override SetList skips if one was previously imported
// this is result of design decision in symfony https://github.com/symfony/symfony/issues/26713
$ecsConfig->skip([
// skip paths with legacy code
__DIR__ . '/packages/*/src/Legacy',
ArraySyntaxFixer::class => [
// path to file (you can copy this from error report)
__DIR__ . '/packages/EasyCodingStandard/packages/SniffRunner/src/File/File.php',
// or multiple files by path to match against "fnmatch()"
__DIR__ . '/packages/*/src/Command',
],
// skip rule completely
ArraySyntaxFixer::class,
// just single one part of the rule?
ArraySyntaxFixer::class . '.SomeSingleOption',
// ignore specific error message
'Cognitive complexity for method "addAction" is 13 but has to be less than or equal to 8.',
]);
// scan other file extendsions; [default: [php]]
$ecsConfig->fileExtensions(['php', 'phpt']);
// configure cache paths & namespace - useful for Gitlab CI caching, where getcwd() produces always different path
// [default: sys_get_temp_dir() . '/_changed_files_detector_tests']
$ecsConfig->cacheDirectory('.ecs_cache');
// [default: \Nette\Utils\Strings::webalize(getcwd())']
$ecsConfig->cacheNamespace('my_project_namespace');
// indent and tabs/spaces
// [default: spaces]
$ecsConfig->indentation('tab');
// [default: PHP_EOL]; other options: "\n"
$ecsConfig->lineEnding("\r\n");
};
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.
How to enable it?
use Symplify\EasyCodingStandard\Config\ECSConfig;
return static function (ECSConfig $ecsConfig): void {
$ecsConfig->parallel();
};
How to correct PHP snippets in Markdown files?
vendor/bin/ecs check-markdown README.md
vendor/bin/ecs check-markdown README.md docs/rules.md
# to fix them, add --fix
vendor/bin/ecs check-markdown README.md docs/rules.md --fix
Do you have already paths defined in ecs.php
config? Drop them from CLI and let ECS use those:
vendor/bin/ecs check-markdown --fix
vendor/bin/ecs check src --clear-cache
In case you are experiencing a bug or want to request a new feature head over to the Symplify monorepo issue tracker
The sources of this package are contained in the Symplify monorepo. We welcome contributions for this package on symplify/symplify.
The parallel run is heavily inspired by phpstan/phpstan-src by Ondřej Mirtes. Thank you.