Alma Career Czechia Coding Standard for PHP
, (*1)
PHP coding standard used in Alma Career Czechia (formerly LMC) products., (*2)
The standard is based on PSR-12 and partially PER 2.0 and adds
various checks to make sure the code is readable, follows the same conventions, and does not contain common mistakes., (*3)
We use EasyCodingStandard to define and execute checks created for both PHP-CS-Fixer and PHP_CodeSniffer., (*4)
Installation
composer require --dev lmc/coding-standard
Usage
- Create
ecs.php
file in the root directory of your project and import the code-style rules:
<?php declare(strict_types=1);
use Symplify\EasyCodingStandard\Config\ECSConfig;
return ECSConfig::configure()
->withPaths([__DIR__ . '/src', __DIR__ . '/tests']) // optionally add 'config' or other directories with PHP files
->withRootFiles() // to also check ecs.php and all other php files in the root directory
->withSets(
[
__DIR__ . '/vendor/lmc/coding-standard/ecs.php',
]
);
- Run the check command
vendor/bin/ecs check
- Optionally we recommend adding this to
scripts
section of your composer.json
:
"scripts": {
"analyze": [
"vendor/bin/ecs check --ansi",
"[... other scripts, like PHPStan etc.]"
],
"fix": [
"...",
"vendor/bin/ecs check --ansi --fix"
],
}
Now you will be able to run the fix using composer analyze
and execute automatic fixes with composer fix
., (*5)
Add custom checks or override default settings
On top of the default code-style rules, you are free to add any rules from PHP-CS-Fixer or PHP_CodeSniffer.
If needed, you can also override any default settings., (*6)
Below find examples of some more opinionated checks you may want to add depending on your needs:, (*7)
<?php declare(strict_types=1);
use PHP_CodeSniffer\Standards\Generic\Sniffs\Files\LineLengthSniff;
use PhpCsFixer\Fixer\PhpUnit\PhpUnitTestAnnotationFixer;
use Symplify\EasyCodingStandard\Config\ECSConfig;
return ECSConfig::configure()
/* (...) */
->withSets(
[
__DIR__ . '/vendor/lmc/coding-standard/ecs.php',
]
)
->withRules(
[
// PHPUnit attributes must be used over their respective PHPDoc-based annotations. (Use with PHPUnit 10+.)
PhpUnitAttributesFixer::class,
// Single-line comments must have proper spacing (one space after `//`).
SingleLineCommentSpacingFixer::class,
// Convert multiline string to heredoc or nowdoc.
MultilineStringToHeredocFixer::class,
]
)
// Enforce line-length to 120 characters.
->withConfiguredRule(LineLengthSniff::class, ['absoluteLineLimit' => 120])
// Tests must have @test annotation.
->withConfiguredRule(PhpUnitTestAnnotationFixer::class, ['style' => 'annotation'])
// Specify elements separation.
->withConfiguredRule(ClassAttributesSeparationFixer::class, ['elements' => ['const' => 'none', 'method' => 'one', 'property' => 'none']])
/* (...) */
See EasyCodingStandard docs for more configuration options., (*8)
Exclude (skip) checks or files
You can configure your ecs.php
file to entirely skip some files, disable specific checks, or suppress specific errors., (*9)
<?php declare(strict_types=1);
use PHP_CodeSniffer\Standards\Generic\Sniffs\PHP\ForbiddenFunctionsSniff;
use PHP_CodeSniffer\Standards\Squiz\Sniffs\Arrays\ArrayDeclarationSniff;
use Symplify\EasyCodingStandard\Config\ECSConfig;
return ECSConfig::configure()
/* (...) */
->withSkip(
[
// Ignore specific check only in specific files
ForbiddenFunctionsSniff::class => [__DIR__ . '/src-tests/bootstrap.php'],
// Disable check entirely
ArrayDeclarationSniff::class,
// Skip one file
__DIR__ . '/file/to/be/skipped.php',
// Skip entire directory
__DIR__ . '/ignored/directory/*',
]
)
/* (...) */
See EasyCodingStandard docs for more configuration options., (*10)
IDE integration
For integration with PHPStorm and other IDEs, follow instructions in EasyCodingStandard README., (*11)
Changelog
For the latest changes, see CHANGELOG.md file. This library follows Semantic Versioning., (*12)
License
This library is open-source software licensed under the MIT license., (*13)