Custom PHP-CS-Fixer rule sets for consistent code style across IWF Web projects.
This package provides two rule sets:
| Rule Set | Description |
|---|---|
@IWFWeb/standard |
Non-risky coding style rules for consistent formatting |
@IWFWeb/standard:risky |
Risky rules that may change code behavior (use with caution) |
Both rule sets build upon the excellent @PhpCsFixer rule set (which includes @Symfony and @PSR12) with customizations tailored for IWF Web projects.
- PHP 8.2 or higher
- PHP-CS-Fixer ^3.0
composer require --dev iwf-web/php-coding-standardCreate a .php-cs-fixer.dist.php file in your project root:
<?php declare(strict_types=1);
require_once __DIR__.'/vendor/autoload.php';
use IWFWeb\CodingStandard\IWFWebStandardRiskySet;
use IWFWeb\CodingStandard\IWFWebStandardSet;
use PhpCsFixer\Config;
use PhpCsFixer\Finder;
use PhpCsFixer\Runner\Parallel\ParallelConfigFactory;
return new Config()
->registerCustomRuleSets([
new IWFWebStandardSet(),
new IWFWebStandardRiskySet(),
])
->setFinder(Finder::create()
->in(__DIR__)
)
->setParallelConfig(ParallelConfigFactory::detect())
->setRiskyAllowed(true)
->setRules([
'@IWFWeb/standard' => true,
'@IWFWeb/standard:risky' => true,
])
;Run the fixer:
# Check for violations (dry run)
vendor/bin/php-cs-fixer fix --dry-run --diff
# Fix violations
vendor/bin/php-cs-fixer fixKey customizations over the base @PhpCsFixer rule set:
- No Yoda style - Uses natural comparison order (
$value === nullinstead ofnull === $value) - Strict types at top - No blank line after opening tag to keep
declare(strict_types=1);at the very top - Simplified class ordering - Only requires traits to be placed first in classes
- Preserved DocBlocks - Single-line DocBlocks are preserved;
@inheritDocis not removed - Trailing commas everywhere - In arrays, arguments, parameters, and match expressions
- PHPUnit flexibility - Does not require
@coversannotations on test classes
Key customizations over the base @PhpCsFixer:risky rule set:
- PHPUnit assertions - Uses
self::for test case static method calls - No forced strict types - Relies on PHPStan for type safety instead of enforcing
declare(strict_types=1); - Flexible data providers - Does not enforce naming conventions for PHPUnit data providers
- Ignored comment tags - Preserves
php-cs-fixer-ignoreandtodocomments
In v1.x, the namespace was IWF\CodingStandard with classes IWFSet and IWFRiskySet, and rule sets @IWF/standard and @IWF/standard:risky. These still work but are deprecated and will be removed in v2.0.
To migrate, update your .php-cs-fixer.dist.php:
-use IWF\CodingStandard\IWFRiskySet;
-use IWF\CodingStandard\IWFSet;
+use IWFWeb\CodingStandard\IWFWebStandardRiskySet;
+use IWFWeb\CodingStandard\IWFWebStandardSet;
return new Config()
->registerCustomRuleSets([
- new IWFSet(),
- new IWFRiskySet(),
+ new IWFWebStandardSet(),
+ new IWFWebStandardRiskySet(),
])
->setRules([
- '@IWF/standard' => true,
- '@IWF/standard:risky' => true,
+ '@IWFWeb/standard' => true,
+ '@IWFWeb/standard:risky' => true,
])
;Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
This project uses Conventional Commits for automated releases and changelog generation.
We use SemVer for versioning. For available versions, see the tags on this repository.
- Manuele - D3strukt0r
See also the full list of contributors who participated in this project.
We're currently looking for contributions for the following:
- Bug fixes
- Translations
- etc...
For more information, please refer to our CONTRIBUTING.md guide.
This project is licensed under the MIT License - see the LICENSE.txt file for details.
This project currently uses no third-party libraries or copied code.