Alma Career Coding Standard for PHP
, (*1)
PHP coding standard used in Alma Career (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)
Switching from lmc/coding-standard
The package almacareer/coding-standard
is 1:1 replacement for the previous deprecated lmc/coding-standard
package.
To change the package, you only need to do the following changes in your project:, (*5)
1. Update dependency in composer.json
- "lmc/coding-standard": "^4.1",
+ "almacareer/coding-standard": "^4.2",
And then run composer update
., (*6)
2. Change path to ecs.php in your ecs.php
You can also use SetList::ALMACAREER
instead of explicitly specifying path to the file:, (*7)
->withSets(
[
- __DIR__ . '/vendor/lmc-eu/coding-standard/ecs.php',
+ \Lmc\CodingStandard\Set\SetList::ALMACAREER,
]
);
Installation
composer require --dev almacareer/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 Lmc\CodingStandard\Set\SetList;
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(
[
SetList::ALMACAREER,
]
);
- 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
., (*8)
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., (*9)
Below find examples of some more opinionated checks you may want to add depending on your needs:, (*10)
<?php declare(strict_types=1);
use Lmc\CodingStandard\Set\SetList;
use PHP_CodeSniffer\Standards\Generic\Sniffs\Files\LineLengthSniff;
use PhpCsFixer\Fixer\PhpUnit\PhpUnitTestAnnotationFixer;
use Symplify\EasyCodingStandard\Config\ECSConfig;
return ECSConfig::configure()
/* (...) */
->withSets(
[
SetList::ALMACAREER,
]
)
->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., (*11)
Exclude (skip) checks or files
You can configure your ecs.php
file to entirely skip some files, disable specific checks, or suppress specific errors., (*12)
<?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., (*13)
IDE integration
For integration with PHPStorm and other IDEs, follow instructions in EasyCodingStandard README., (*14)
Changelog
For the latest changes, see CHANGELOG.md file. This library follows Semantic Versioning., (*15)
License
This library is open-source software licensed under the MIT license., (*16)