Skip to content

Coding Standard rules for PHP projects with focus on Clean Architecture

License

Notifications You must be signed in to change notification settings

symplify/coding-standard

Repository files navigation

Coding Standard

Downloads

Set of rules for PHP_CodeSniffer and PHP-CS-Fixer used by Symplify projects.

They run best with EasyCodingStandard.


Install

composer require symplify/coding-standard --dev
composer require symplify/easy-coding-standard --dev
  1. Run with ECS:
# ecs.php
 use Symplify\EasyCodingStandard\Config\ECSConfig;
+use Symplify\EasyCodingStandard\ValueObject\Set\SetList;

 return static function (ECSConfig $ecsConfig): void {
+    $ecsConfig->sets([SetList::SYMPLIFY]);

12 Rules Overview

ArrayListItemNewlineFixer

Indexed PHP array item has to have one line per item

-$value = ['simple' => 1, 'easy' => 2];
+$value = ['simple' => 1,
+'easy' => 2];

ArrayOpenerAndCloserNewlineFixer

Indexed PHP array opener [ and closer ] must be on own line

-$items = [1 => 'Hey'];
+$items = [
+1 => 'Hey'
+];

BlankLineAfterStrictTypesFixer

Strict type declaration has to be followed by empty line

 declare(strict_types=1);
+
 namespace App;

LineLengthFixer

Array items, method parameters, method call arguments, new arguments should be on same/standalone line to fit line length.

🔧 configure it!

-function some($veryLong, $superLong, $oneMoreTime)
-{
+function some(
+    $veryLong,
+    $superLong,
+    $oneMoreTime
+) {
 }

-function another(
-    $short,
-    $now
-) {
+function another($short, $now) {
 }

MethodChainingNewlineFixer

Each chain method call must be on own line

-$someClass->firstCall()->secondCall();
+$someClass->firstCall()
+->secondCall();

ParamReturnAndVarTagMalformsFixer

Fixes @param, @return, @var and inline @var annotations broken formats

 /**
- * @param string
+ * @param string $name
  */
 function getPerson($name)
 {
 }

RemovePHPStormAnnotationFixer

Remove "Created by PhpStorm" annotations

-/**
- * Created by PhpStorm.
- * User: ...
- * Date: 17/10/17
- * Time: 8:50 AM
- */
 class SomeClass
 {
 }

RemoveUselessDefaultCommentFixer

Remove useless PHPStorm-generated @todo comments, redundant "Class XY" or "gets service" comments etc.

-/**
- * class SomeClass
- */
 class SomeClass
 {
-    /**
-     * SomeClass Constructor.
-     */
     public function __construct()
     {
-        // TODO: Change the autogenerated stub
-        // TODO: Implement whatever() method.
     }
 }

SpaceAfterCommaHereNowDocFixer

Add space after nowdoc and heredoc keyword, to prevent bugs on PHP 7.2 and lower, see https://laravel-news.com/flexible-heredoc-and-nowdoc-coming-to-php-7-3

 $values = [
     <<<RECTIFY
 Some content
-RECTIFY,
+RECTIFY
+,
     1000
 ];

StandaloneLineConstructorParamFixer

Constructor param should be on a standalone line to ease git diffs on new dependency

 final class PromotedProperties
 {
-    public function __construct(int $age, string $name)
-    {
+    public function __construct(
+        int $age,
+        string $name
+    ) {
     }
 }

StandaloneLineInMultilineArrayFixer

Indexed arrays must have 1 item per line

-$friends = [1 => 'Peter', 2 => 'Paul'];
+$friends = [
+    1 => 'Peter',
+    2 => 'Paul'
+];

StandaloneLinePromotedPropertyFixer

Promoted property should be on standalone line

 final class PromotedProperties
 {
-    public function __construct(public int $age, private string $name)
-    {
+    public function __construct(
+        public int $age,
+        private string $name
+    ) {
     }
 }