Used by:
- Use PHP_CodeSniffer || PHP-CS-Fixer - anything you like
- 2nd run under few seconds with caching
- Skipping files for specific checkers
- Prepared checker sets - PSR2, Symfony, Common, Symplify and more...
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 --dev symplify/easy-coding-standard
Create an easy-coding-standard.yml
in your root directory and add Sniffs or Fixers you'd love to use.
Let's start with the most common one - array()
=> []
:
services:
PhpCsFixer\Fixer\ArrayNotation\ArraySyntaxFixer:
syntax: short
# dry
vendor/bin/ecs check src
# fix
vendor/bin/ecs check src --fix
Tip: Do you want autocomplete too? Just use Symfony Plugin
There are prepared sets in /config
directory that you can use:
You pick config in CLI with --config
:
vendor/bin/ecs check src --config vendor/symplify/easy-coding-standard/config/clean-code.yml
Too long? Try --level
shortcut:
vendor/bin/ecs check src --level clean-code
or include more of them in config:
# easy-coding-standard.yml
imports:
- { resource: 'vendor/symplify/easy-coding-standard/config/clean-code.yml' }
- { resource: 'vendor/symplify/easy-coding-standard/config/psr2.yml' }
In case of custom coding standard and include e.g. psr2.yml
form this package, you might want to use %vendor_dir%
or %current_working_dir%
for:
# lmc-coding-standard.yml
imports:
- { resource: '%vendor_dir%/symplify/easy-coding-standard/config/psr2.yml' }
# or
- { resource: '%current_working_dir%/vendor/symplify/easy-coding-standard/config/psr2.yml' }
That would load file always from vendor dir, no matter where you are.
What if you add symfony.yml
set, but don't like PhpCsFixer\Fixer\PhpTag\BlankLineAfterOpeningTagFixer
?
imports:
- { resource: 'vendor/symplify/easy-coding-standard/config/symfony.yml' }
parameters:
skip:
PhpCsFixer\Fixer\PhpTag\BlankLineAfterOpeningTagFixer: ~
Sometimes, checker finds an error in code that inherits from code you can't change.
No worries! Just skip checker for this file:
parameters:
skip:
SlevomatCodingStandard\Sniffs\TypeHints\TypeHintDeclarationSniff:
# relative path to file (you can copy this from error report)
- 'packages/EasyCodingStandard/packages/SniffRunner/src/File/File.php'
# or multiple files by path to match against "fnmatch()"
- '*packages/CodingStandard/src/Sniffs/*/*Sniff.php'
You can also skip specific codes or messages that you know from PHP_CodeSniffer:
parameters:
skip:
# code to skip for all files
SlevomatCodingStandard\Sniffs\TypeHints\TypeHintDeclarationSniff.UselessDocComment: ~
# same syntax is used for skipping specific sniff messages
'Cognitive complexity for method "addAction" is 13 but has to be less than or equal to 8.': ~
# code to skip for specific files/patterns
SlevomatCodingStandard\Sniffs\TypeHints\TypeHintDeclarationSniff.MissingTraversableParameterTypeHintSpecification:
- '*src/Form/Type/*Type.php'
Or just 2 files?
parameters:
exclude_files:
# generated files
- 'lib/PhpParser/Parser/Php5.php'
- 'lib/PhpParser/Parser/Php7.php'
# or with fnmatch() pattern
- '*/lib/PhpParser/Parser/Php*.php'
Normally you want to exclude these files, because they're not common code - they're just test files or dummy fixtures. In case you want to check them as well, you can.
Let's say you want to include *.phpt
files.
-
Create a class in
src/Finder/PhpAndPhptFilesProvider.php
-
Implement
Symplify\EasyCodingStandard\Contract\Finder\CustomSourceProviderInterface
-
Register it as services to
easy-coding-standard.yml
like any other Symfony service:services: App\Finder\PhpAndPhptFilesProvider: ~
The PhpAndPhptFilesProvider
might look like this:
namespace App\Finder;
use IteratorAggregate;
use Nette\Utils\Finder;
use SplFileInfo;
use Symplify\EasyCodingStandard\Contract\Finder\CustomSourceProviderInterface;
final class PhpAndPhptFilesProvider implements CustomSourceProviderInterface
{
/**
* @param string[] $source
* @return mixed[]
*/
public function find(array $source)
{
# $source is "source" argument passed in CLI
# inc CLI: "vendor/bin/ecs check /src" => here: ['/src']
return Finder::find('*.php', '*.phpt')->in($source);
}
}
Don't forget to autoload it with composer.
Use any Finder you like: Nette\Finder or Symfony\Finder.
You can also return array of files or SplFileInfo
s.
vendor/bin/ecs show
vendor/bin/ecs show --config ...
vendor/bin/ecs find
vendor/bin/ecs find symplify # for Symplify rules
vendor/bin/ecs find array # for array-related rules
vendor/bin/ecs check src --clear-cache
parameters:
cache_directory: .ecs_cache # defaults to sys_get_temp_dir() . '/_easy_coding_standard/_changed_files_detector_tests'
parameters:
indentation: "tab" # "spaces" by default, you can also use " " (2 spaces), " " (4 spaces) or " " (tab)
line_ending: "\r\n" # PHP_EOL by default; you can also use "\n"
EasyCodingStandard 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.
Send issue or pull-request to main repository.