- Use PHP_CodeSniffer || PHP-CS-Fixer - anything you like
- 2nd run under few seconds with un-changed file cache
- Skipping files for specific checkers
- Prepared sets - PSR12, Symfony, Common, Array, Symplify and more...
- Prefixed version in case of conflicts on install
Are you already using another tool?
- How to Migrate From PHP_CodeSniffer to EasyCodingStandard in 7 Steps
- How to Migrate From PHP CS Fixer to EasyCodingStandard in 6 Steps
composer require symplify/easy-coding-standard --dev
The prefix verion can be used when there are dependancy clashes. Head over to the "Easy Coding Standard Prefixed" repository for more information.
composer require symplify/easy-coding-standard-prefixed --dev
// ecs.php
use PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\EasyCodingStandard\ValueObject\Set\SetList;
return static function (ContainerConfigurator $containerConfigurator): void {
// A. standalone rule
$services = $containerConfigurator->services();
$services->set(ArraySyntaxFixer::class)
->call('configure', [[
'syntax' => 'short',
]]);
// B. full sets
$containerConfigurator->import(SetList::PSR_12);
};
# 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 Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symplify\EasyCodingStandard\ValueObject\Option;
return static function (ContainerConfigurator $containerConfigurator): void {
$parameters = $containerConfigurator->parameters();
// alternative to CLI arguments, easier to maintain and extend
$parameters->set(Option::PATHS, [__DIR__ . '/src', __DIR__ . '/tests']);
// run single rule only on specific path
$parameters->set(Option::ONLY, [
ArraySyntaxFixer::class => [__DIR__ . '/src/NewCode'],
]);
$parameters->set(Option::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]]
$parameters->set(Option::FILE_EXTENSIONS, ['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']
$parameters->set(Option::CACHE_DIRECTORY, '.ecs_cache');
// [default: \Nette\Utils\Strings::webalize(getcwd())']
$parameters->set(Option::CACHE_NAMESPACE, 'my_project_namespace');
// indent and tabs/spaces
// [default: spaces]
$parameters->set(Option::INDENTATION, 'tab');
// [default: PHP_EOL]; other options: "\n"
$parameters->set(Option::LINE_ENDING, "\r\n");
};
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 show
vendor/bin/ecs show --config ...
vendor/bin/ecs check src --clear-cache
Execution can be limited to changed files using the process
option --match-git-diff
:
vendor/bin/ecs check src --match-git-diff
This option will filter the files included by the configuration, creating an intersection with the files listed in git diff
.
ECS can be used as an External Tool
Go to Preferences
> Tools
> External Tools
and click +
to add a new tool.
- Name:
ecs
(Can be any value) - Description:
easyCodingStandard
(Can be any value) - Program:
$ProjectFileDir$/vendor/bin/ecs
(Path toecs
executable; On Windows path separators must be a\
) - Parameters:
check $FilePathRelativeToProjectRoot$
(append--fix
to auto-fix) - Working directory:
$ProjectFileDir$
Press Cmd/Ctrl
+ Shift
+ A
(Find Action), search for ecs
, and then hit Enter. It will run ecs
for the current file.
To run ecs
on a directory, right click on a folder in the project browser go to external tools and select ecs
.
You can also create a keyboard shortcut in Preferences > Keymap to run ecs
.
EasyCodingStandard for Visual Studio Code extension adds support for running EasyCodingStandard inside the editor.
Tool | Extension | Description |
---|---|---|
GrumPHP | ECS Task | Provides a new task for GrumPHP which runs ECS |
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.