ely / php-code-style
Set of PHP-CS-Fixer rules used in the development of Ely.by PHP projects
Installs: 12 916
Dependents: 7
Suggesters: 0
Security: 0
Stars: 4
Watchers: 3
Forks: 3
Open Issues: 1
Requires
- php: ^7.4 || ^8.0
- erickskrauch/php-cs-fixer-custom-fixers: ^1.0.1
- friendsofphp/php-cs-fixer: ^3.16
- kubawerlos/php-cs-fixer-custom-fixers: ^3.13
- symfony/polyfill-php80: ^1.15
Requires (Dev)
- ergebnis/composer-normalize: ^2.28
README
Set of PHP-CS-Fixer rules used in development of Ely.by PHP projects. It's suited for PHP 7.4 and above.
Installation
First of all install Ely.by PHP-CS-Fixer rules via composer with PHP-CS-Fixer:
composer require --dev friendsofphp/php-cs-fixer ely/php-code-style
Then create a file .php-cs-fixer.php
with the following contents:
<?php $finder = \PhpCsFixer\Finder::create() ->in(__DIR__); return \Ely\CS\Config::create() ->setFinder($finder);
And that's it. You can now find code style violations with following command:
vendor/bin/php-cs-fixer --diff --dry-run -v fix
And then completely fix them all with:
vendor/bin/php-cs-fixer fix
Configuration
You can pass a custom set of rules to the \Ely\CS\Config::create()
call. For example, it can be used to validate a
project with PHP 7.4 compatibility:
<?php return \Ely\CS\Config::create([ 'trailing_comma_in_multiline' => [ 'elements' => ['arrays', 'arguments'], ], ])->setFinder($finder);
Code style
Our code style is based primarily on PSR-2, while borrowing some ideas from PSR-12 with some changes.
Example
This example encompasses some of the rules below as a quick overview:
<?php declare(strict_types=1); namespace Vendor\Package; use Vendor\Package\SomeNamespace\ClassA; class Foo extends Bar implements FooInterface { use SomeTrait; private const SAMPLE_1 = 123; private const SAMPLE_2 = 321; public $field1; public Typed $field2; public function sampleFunction( int $a, private readonly int $b = null, ): array { if ($a === $this->b) { $result = bar(); } else { $result = BazClass::bar($this->field1, $this->field2); } return $result; } public function setToNull(): self { $this->field1 = null; return $this; } }
Key differences:
-
Opening braces for classes MUST be on the same line.
-
Opening braces for methods MUST be on the next line.
Additional rules:
-
There MUST be one empty line before
return
statement, except when there is only one statement before it.<?php function a() { $a = '123'; return $a . ' is a number'; } function b() { $a = '123'; $b = 'is'; return $a . ' ' . $b . ' a number'; }
-
There MUST be one blank line around class body, but there MUST be no blank lines around anonymous class body.
<?php class Test { public function method() { $obj = new class extends Foo { public function overriddenMethod() { // code body } }; } }
-
Visibility MUST be declared for all methods, properties and constants.
-
There MUST be one blank line after an each of
if
,switch
,for
,foreach
,while
anddo-while
bodies.<?php if (true) { // some actions here } echo 'the next statement is here';
-
There MUST be no alignment around multiline function parameters.
<?php function foo( string $input, int $key = 0, ): void {}