Ely.by PHP-CS-Fixer rules
Set of PHP-CS-Fixer rules used in development of Ely.by PHP projects. It's suited for PHP 7.4 and above., (*1)
![Software License][ico-license]
![Build Status][ico-build-status], (*2)
Installation
First of all install Ely.by PHP-CS-Fixer rules via composer with
PHP-CS-Fixer:, (*3)
composer require --dev friendsofphp/php-cs-fixer ely/php-code-style
Then create a file .php-cs-fixer.php
with the following contents:, (*4)
<?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:, (*5)
vendor/bin/php-cs-fixer --diff --dry-run -v fix
And then completely fix them all with:, (*6)
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:, (*7)
<?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., (*8)
Example
This example encompasses some of the rules below as a quick overview:, (*9)
<?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:, (*10)
-
Opening braces for classes MUST be on the same line., (*11)
-
Opening braces for methods MUST be on the next line., (*12)
Additional rules:, (*13)
-
There MUST be one empty line before return
statement, except when there is only one statement before it., (*14)
<?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., (*15)
<?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., (*16)
-
There MUST be one blank line after an each of if
, switch
, for
, foreach
, while
and do-while
bodies., (*17)
<?php
if (true) {
// some actions here
}
echo 'the next statement is here';
-
There MUST be no alignment around multiline function parameters., (*18)
<?php
function foo(
string $input,
int $key = 0,
): void {}