Un ensemble de fixateurs personnalisés pour le fixateur PHP CS.
Fixer PHP CS: les fixateurs personnalisés peuvent être installés en exécutant:
composer require --dev kubawerlos/php-cs-fixer-custom-fixersDans votre fixateur de configuration de fixateur PHP CS Fixer et utilisez-les:
<?php
return (new PhpCsFixerConfig())
+ ->registerCustomFixers(new PhpCsFixerCustomFixersFixers())
->setRules([
'@PSR2' => true,
'array_syntax' => ['syntax' => 'short'],
+ PhpCsFixerCustomFixersFixerNoLeadingSlashInGlobalNamespaceFixer::name() => true,
+ PhpCsFixerCustomFixersFixerPhpdocNoSuperfluousParamFixer::name() => true,
]);php-cs-fixer/shim , nécessitant un bootstrap peut être nécessaire pour charger des classes PhpCsFixerCustomFixers :
require __DIR__ . ' /vendor/kubawerlos/php-cs-fixer-custom-fixers/bootstrap.php ' ;Les commentaires doivent être entourés d'espaces.
<?php
- /*foo*/
+ /* foo */ Les fonctions configurées doivent être commentées. Risque: lorsque l'une des fonctions configurées a des effets secondaires ou est écrasée. Options de configuration:
functions ( array ): liste des fonctions à commenter; par défaut à ['print_r', 'var_dump', 'var_export'] <?php
- var_dump($x);
+ //var_dump($x); Les accolades vides du constructeur doivent être sur une seule ligne.
<?php
class Foo {
public function __construct(
$param1,
$param2
- ) {
- }
+ ) {}
} Les noms du fournisseur de données doivent correspondre au nom du test. DÉMANNÉ: Utilisez à la place php_unit_data_provider_name . Risque: lorsqu'il s'appuie sur le nom de la fonction du fournisseur de données. Options de configuration:
prefix ( string ): Prefix qui remplace "test"; les défauts de 'provide'suffix ( string ): suffixe à ajouter à la fin "; par défaut aux 'Cases' <?php
class FooTest extends TestCase {
/**
- * @dataProvider dataProvider
+ * @dataProvider provideSomethingCases
*/
public function testSomething($expected, $actual) {}
- public function dataProvider() {}
+ public function provideSomethingCases() {}
} Le type de retour du fournisseur de données PHPUnit doit être iterable . DÉMANNÉ: Utilisez à la place php_unit_data_provider_return_type . Risque: lorsqu'il s'appuie sur la signature du fournisseur de données.
<?php
class FooTest extends TestCase {
/**
* @dataProvider provideSomethingCases
*/
public function testSomething($expected, $actual) {}
- public function provideSomethingCases(): array {}
+ public function provideSomethingCases(): iterable {}
} Les fournisseurs de données doivent être statiques. Désonnée: utilisez à la place php_unit_data_provider_static . Risque: lorsque force est réglée sur true . Options de configuration:
force ( bool ): s'il faut faire des fournisseurs de données statiques ayant des appels de classe dynamiques; par défaut est false <?php
class FooTest extends TestCase {
/**
* @dataProvider provideSomethingCases
*/
public function testSomething($expected, $actual) {}
- public function provideSomethingCases() {}
+ public static function provideSomethingCases() {}
}Déclarer l'énoncé des types stricts doit être placé sur la même ligne, après l'étiquette d'ouverture.
- <?php
+ <?php declare(strict_types=1);
$foo;
- declare(strict_types=1);
$bar; Le corps de fonction vide doit être abrégé en {} et placé sur la même ligne que le symbole précédent, séparé avec un espace.
<?php function foo(
int $x
- )
- {
- }
+ ) {} Les classes définies en interne par une extension ou le noyau doivent être référencées avec le bon cas. DÉMANNÉ: Utilisez à la place class_reference_name_casing .
<?php
- $foo = new STDClass();
+ $foo = new stdClass(); Fonction array_key_exists doit être utilisé à la place de isset lorsque cela est possible. Risque: lorsque le tableau n'est pas défini, il est multidimensionnel ou le comportement s'appuie sur la valeur nulle.
<?php
- if (isset($array[$key])) {
+ if (array_key_exists($key, $array)) {
echo $array[$key];
}Les commentaires multilines ou PHPDOC doivent contenir une ligne d'ouverture et de clôture sans contenu supplémentaire.
<?php
- /** Hello
+ /**
+ * Hello
* World!
*/Les propriétés promues doivent être sur des lignes distinctes. Options de configuration:
keep_blank_lines ( bool ): s'il faut garder les lignes vides entre les propriétés; par défaut est falseminimum_number_of_parameters ( int ): nombre minimum de paramètres dans le constructeur à corriger; par défaut est 1 <?php class Foo {
- public function __construct(private array $a, private bool $b, private int $i) {}
+ public function __construct(
+ private array $a,
+ private bool $b,
+ private int $i
+ ) {}
}Il ne doit y avoir aucun code commenté.
<?php
- //var_dump($_POST);
print_r($_POST);Il ne doit y avoir aucun commentaire généré par les migrations de la doctrine.
<?php
namespace Migrations;
use DoctrineDBALSchemaSchema;
- /**
- * Auto-generated Migration: Please modify to your needs!
- */
final class Version20180609123456 extends AbstractMigration
{
public function up(Schema $schema)
{
- // this up() migration is auto-generated, please modify it to your needs
$this->addSql("UPDATE t1 SET col1 = col1 + 1");
}
public function down(Schema $schema)
{
- // this down() migration is auto-generated, please modify it to your needs
$this->addSql("UPDATE t1 SET col1 = col1 - 1");
}
}Il ne doit pas y avoir de clés de tableau en double. Options de configuration:
ignore_expressions ( bool ): s'il faut conserver les expressions dupliquées (car elles peuvent renvoyer différentes valeurs) ou non; par défaut est true <?php
$x = [
- "foo" => 1,
"bar" => 2,
"foo" => 3,
]; Il ne doit y avoir aucune instruction use en double.
<?php
namespace FooBar;
use Foo;
- use Foo;
use Bar;Il ne doit pas y avoir d'importations à partir de l'espace de noms global.
<?php
namespace Foo;
- use DateTime;
class Bar {
- public function __construct(DateTime $dateTime) {}
+ public function __construct(DateTime $dateTime) {}
}Les classes de l'espace de noms global ne peuvent pas contenir de barres obliques.
<?php
- $x = new Foo();
+ $x = new Foo();
namespace Bar;
$y = new Baz();Il ne doit pas y avoir de types booléens nullables. Risque: lorsque le NULL est utilisé.
<?php
- function foo(?bool $bar) : ?bool
+ function foo(bool $bar) : bool
{
return $bar;
}Il ne doit y avoir aucun commentaire généré par Phpstorm.
<?php
- /**
- * Created by PhpStorm.
- * User: root
- * Date: 01.01.70
- * Time: 12:00
- */
namespace Foo;Il ne doit y avoir aucun paramètre passé par référence dans les fonctions. Risque: lorsqu'ils comptent sur la référence.
<?php
- function foo(&$x) {}
+ function foo($x) {} Il ne doit pas y avoir de concaténation superflue des cordes littérales. Options de configuration:
allow_preventing_trailing_spaces ( bool ): s'il faut conserver la concaténation si elle empêche d'avoir des espaces de fuite dans la chaîne; par défaut est falsekeep_concatenation_for_different_quotes ( bool ): s'il faut maintenir la concaténation si un seul quotté et double cité serait concaténé; par défaut est false <?php
- echo 'foo' . 'bar';
+ echo 'foobar'; Une liste d'éléments écrite sur une ligne ne peut pas contenir de virgule traînante.
<?php
- $x = ['foo', 'bar', ];
+ $x = ['foo', 'bar']; Il ne doit pas y avoir de commentaires inutiles.
<?php
/**
- * Class Foo
* Class to do something
*/
class Foo {
/**
- * Get bar
*/
function getBar() {}
} Il ne doit pas y avoir d'appels dirname inutiles.
<?php
- require dirname(__DIR__) . "/vendor/autoload.php";
+ require __DIR__ . "/../vendor/autoload.php"; Il ne peut y avoir de commentaires générés par Doctrine Orm.
<?php
- /**
- * FooRepository
- *
- * This class was generated by the Doctrine ORM. Add your own custom
- * repository methods below.
- */
class FooRepository extends EntityRepository {}Il ne doit pas y avoir de parenthèses inutiles.
<?php
- foo(($bar));
+ foo($bar); Les fonctions strlen et mb_strlen ne doivent pas être comparées à 0. Risque: lorsque la fonction strlen est remplacée.
<?php
- $isEmpty = strlen($string) === 0;
- $isNotEmpty = strlen($string) > 0;
+ $isEmpty = $string === '';
+ $isNotEmpty = $string !== ''; Les littéraux numériques doivent avoir configuré des séparateurs. DÉMANNÉ: Utilisez à la place numeric_literal_separator . Options de configuration:
binary ( bool , null ): que ce soit, supprimer ou ignorer les séparateurs en nombre binaire.; par défaut est falsedecimal ( bool , null ): que ce soit, supprimer ou ignorer les séparateurs en chiffres décimaux.; par défaut est falsefloat ( bool , null ): si ajouter, supprimer ou ignorer les séparateurs en nombres flottants.; par défaut est falsehexadecimal ( bool , null ): si ajouter, retirer ou ignorer les séparateurs en nombres hexadécimaux.; par défaut est falseoctal ( bool , null ): que ce soit, supprimer ou ignorer les séparateurs en nombres octaux.; par défaut est false <?php
- echo 0b01010100_01101000; // binary
- echo 135_798_642; // decimal
- echo 1_234.456_78e-4_321; // float
- echo 0xAE_B0_42_FC; // hexadecimal
- echo 0123_4567; // octal
+ echo 0b0101010001101000; // binary
+ echo 135798642; // decimal
+ echo 1234.45678e-4321; // float
+ echo 0xAEB042FC; // hexadecimal
+ echo 01234567; // octal Les affirmations de PHPUnit doivent avoir un argument attendu avant le réel. Risque: lorsque les méthodes de phpunit d'origine sont écrasées.
<?php
class FooTest extends TestCase {
public function testFoo() {
- self::assertSame($value, 10);
+ self::assertSame(10, $value);
}
} Les assertions phpunit comme assertCount et assertInstanceOf doivent être utilisées sur assertEquals / assertSame . Risque: lorsque les méthodes de phpunit d'origine sont écrasées.
<?php
class FooTest extends TestCase {
public function testFoo() {
- self::assertSame($size, count($elements));
- self::assertSame($className, get_class($object));
+ self::assertCount($size, $elements);
+ self::assertInstanceOf($className, $object);
}
} Les fonctions PHPUnit fail , markTestIncomplete et markTestSkipped ne doivent pas être directement suivies du return . Risque: lorsque les méthodes de phpunit d'origine sont écrasées.
<?php
class FooTest extends TestCase {
public function testFoo() {
$this->markTestSkipped();
- return;
}
} Le style de tableau générique doit être utilisé en phpdoc. Débordé: utilisez à la place phpdoc_array_type .
<?php
/**
- * @return int[]
+ * @return array<int>
*/
function foo() { return [1, 2]; } Les annotations @var doivent être utilisées correctement dans le code.
<?php
- /** @var Foo $foo */
$bar = new Foo();Il ne doit pas y avoir de paramètres superflus dans PHPDOC.
<?php
/**
* @param bool $b
- * @param int $i
* @param string $s this is string
- * @param string $s duplicated
*/
function foo($b, $s) {}Seules les annotations répertoriées sont autorisées dans PHPDOC. Options de configuration:
elements ( array ): liste des annotations à conserver dans PHPDOC; par défaut à [] <?php
/**
* @author John Doe
- * @package foo
- * @subpackage bar
* @version 1.0
*/
function foo_bar() {} Commande toutes les annotations @param dans docblocks selon la signature de la méthode. Débordé: utilisez plutôt phpdoc_param_order .
<?php
/**
+ * @param int $a
* @param int $b
- * @param int $a
* @param int $c
*/
function foo($a, $b, $c) {} Les annotations @param doivent avoir un type.
<?php
/**
* @param string $foo
- * @param $bar
+ * @param mixed $bar
*/
function a($foo, $bar) {} Dans PHPDOC, l'élément de classe ou d'interface doit être utilisé self la place du nom de classe lui-même.
<?php
class Foo {
/**
- * @var Foo
+ * @var self
*/
private $instance;
} L'annotation @var doit être sur une seule ligne si elle est le seul contenu.
<?php
class Foo {
- /**
- * @var string
- */
+ /** @var string */
private $name;
} list de types PHPDOC doit être utilisée à la place array sans type de clé. Déacré: utilisez à la place phpdoc_list_type .
<?php
/**
- * @param array<string>
+ * @param list<string>
*/
function foo($x) {}Les virgules de type PHPDOC ne doivent pas être précédés d'un espace blanc et doivent être succédés par un seul espace.
- <?php /** @var array<int,string> */
+ <?php /** @var array<int, string> */ Les types PHPDOC doivent être coupés.
<?php
/**
- * @param null | string $x
+ * @param null|string $x
*/
function foo($x) {} Convertit @var annotations pour assert les appels lorsqu'ils sont utilisés dans les affectations.
<?php
- /** @var string $x */
$x = getValue();
+ assert(is_string($x)); Les propriétés du constructeur doivent être promues si possible. Options de configuration:
promote_only_existing_properties ( bool ): s'il faut promouvoir uniquement les propriétés définies en classe; par défaut est false <?php
class Foo {
- private string $bar;
- public function __construct(string $bar) {
- $this->bar = $bar;
+ public function __construct(private string $bar) {
}
}Les propriétés promues doivent être déclarées en lecture seule. Risque: lorsque la propriété est écrite.
<?php class Foo {
public function __construct(
- public array $a,
- public bool $b,
+ public readonly array $a,
+ public readonly bool $b,
) {}
}Les déclarations non suivies d'un point-virgule doivent être suivies d'un seul espace. Options de configuration:
allow_linebreak ( bool ): s'il faut permettre une déclaration suivie de Linebreak; par défaut est false <?php
- $foo = new Foo();
- echo$foo->bar();
+ $foo = new Foo();
+ echo $foo->bar(); Les déclarations non précédées d'une rupture de ligne doivent être précédées d'un seul espace.
<?php
- $foo =new Foo();
+ $foo = new Foo(); Une classe qui implémente la méthode __toString() doit implémenter explicitement l'interface Stringable .
<?php
- class Foo
+ class Foo implements Stringable
{
public function __toString()
{
return "Foo";
}
}Demandez une fonctionnalité ou signalez un bogue en créant un problème.
Alternativement, débarquez le référentiel, engagez vos modifications et assurez-vous que tout va bien:
composer verifyet soumettre une demande de traction.