zenify / coding-standard
Set of rules for PHP_CodeSniffer preferring tabs and based on Nette coding standard.
Installs: 37 861
Dependents: 12
Suggesters: 0
Security: 0
Stars: 12
Watchers: 5
Forks: 4
Open Issues: 0
pkg:composer/zenify/coding-standard
Requires
- php: ^7.0
 - squizlabs/php_codesniffer: ~2.7
 
Requires (Dev)
- phpunit/phpunit: ^5.6
 
- dev-master
 - v4.2
 - v4.1
 - v4.0.1
 - v4.0.0
 - v3.3.4
 - v3.3.3
 - v3.3.2
 - v3.3.1
 - v3.3.0
 - v3.2.2
 - v3.2.1
 - v3.2.0
 - v3.1.1
 - v3.1.0
 - v3.0.15
 - v3.0.14
 - v3.0.13
 - v3.0.12
 - v3.0.11
 - v3.0.10
 - v3.0.9
 - v3.0.8
 - v3.0.7
 - v3.0.6
 - v3.0.5
 - v3.0.4
 - v3.0.3
 - v3.0.2
 - v3.0.1
 - v3.0.0
 - v2.1.4
 - v2.1.3
 - v2.1.2
 - v2.1.1
 - v2.1.0
 - v2.0.0
 - v1.0.0
 - v0.3.1
 - v0.3.0
 - v0.2.8
 - v0.2.7
 - v0.2.6
 - v0.2.5
 - v0.2.4
 - v0.2.3
 - v0.2.2
 - v0.2.1
 - v0.2.0
 - v0.1.7
 - v0.1.6
 - v0.1.5
 - v0.1.4
 - v0.1.3
 - v0.1.2
 - v0.1.1
 - v0.1.0
 - v0.0.1
 
This package is auto-updated.
Last update: 2022-01-27 10:58:32 UTC
README
Set of rules for PHP_CodeSniffer preferring tabs and based on Nette coding standard.
Check rules overview for examples.
Install
$ composer require zenify/coding-standard --dev
Usage
Run with Php_CodeSniffer:
vendor/bin/phpcs src --standard=vendor/zenify/coding-standard/src/ZenifyCodingStandard/ruleset.xml -p
That's all!
How to be both Lazy and Safe
Composer hook
In case you don't want to use Php_CodeSniffer manually for every change in the code you make, you can add pre-commit hook via composer.json:
"scripts": { "post-install-cmd": [ "Zenify\\CodingStandard\\Composer\\ScriptHandler::addPhpCsToPreCommitHook" ], "post-update-cmd": [ "Zenify\\CodingStandard\\Composer\\ScriptHandler::addPhpCsToPreCommitHook" ] }
Every time you try to commit, Php_CodeSniffer will run on changed .php files only.
This is much faster than checking whole project, running manually or wait for CI.
Pretty cool, huh?
Testing
composer check-cs vendor/bin/phpunit
Contributing
Rules are simple:
- new feature needs tests
 - all tests must pass
 - 1 feature per PR
 
We would be happy to merge your feature then!
Rules Overview
Rules uses default numeric parameters (some can be changed to match your needs).
TOC:
1 Classes
ClassDeclarationSniff
- Opening brace for the class should be followed by 1 empty line
 - Closing brace for the class should be preceded by 1 empty line
 
Correct
class SomeClass { public function run() { } }
Wrong
class SomeClass { public function run() { } }
FinalInterfaceSniff
- Non-abstract class that implements interface should be final.
 - Except for Doctrine entities, they cannot be final.
 
Correct
final class SomeClass implements SomeInterface { public function run() { } }
Wrong
class SomeClass implements SomeInterface { public function run() { } }
2 Commenting
BlockPropertyCommentSniff
- Block comment should be used instead of one liner
 
Correct
class SomeClass { /** * @var int */ public $count; }
Wrong
class SomeClass { /** @var int */ public $count; }
ComponentFactoryCommentSniff
- CreateComponent* method should have a doc comment
 - CreateComponent* method should have a return tag
 - Return tag should contain type
 
Correct
/** * @return DisplayComponent */ protected function createComponentDisplay() { $this->displayComponentFactory->create(); }
Wrong
protected function createComponentDisplay() { $this->displayComponentFactory->create(); }
VarPropertyCommentSniff
- Property should have docblock comment.
 
Correct
class SomeClass { /** * @var int */ private $someProperty; }
Wrong
class SomeClass { private $someProperty; }
MethodCommentSniff
- Method without parameter typehints should have docblock comment.
 
Correct
class SomeClass { /** * @param int $values */ public function count($values) { } }
class SomeClass { public function count(array $values) { } }
Wrong
class SomeClass { public function count($values) { } }
MethodCommentReturnTagSniff
- Getters should have @return tag or return type.
 
Correct
class SomeClass { /** * @return int */ public function getResult() { // ... } }
Wrong
class SomeClass { /** * This will return something. */ public function getResult() { } }
3 Control Structures
NewClassSniff
- New class statement should not have empty parentheses
 
Correct
$someClass = new SomeNamespace\SomeClass; $someClass = new SomeNamespace\SomeClass($keyHandler);
Wrong
$someClass = new SomeNamespace\SomeClass();
SwitchDeclarationSniff
Correct
$suit = 'case'; switch ($suit) { case 1: echo 'ok'; break; default: echo 'not ok'; break; }
Wrong
$suit = 'case'; switch ($suit) { case 1: echo 'ok'; break; }
YodaConditionSniff
- Yoda condition should not be used; switch expression order
 
Correct
if ($i === TRUE) { return; } $go = $decide === TRUE ?: FALSE;
Wrong
if (TRUE === $i) { return; } $go = TRUE === $decide ?: FALSE;
4 Debug
DebugFunctionCallSniff
- Debug functions should not be left in the code
 
Wrong
dump('It works');
5 Namespaces
NamespaceDeclarationSniff
- There must be 2 empty lines after the namespace declaration or 1 empty line followed by use statement.
 
Correct
namespace SomeNamespace; use PHP_CodeSniffer; class SomeClass { }
or
namespace SomeNamespace; class SomeClass { }
Wrong
namespace SomeNamespace; use SomeNamespace; class SomeClass { }
or
namespace SomeNamespace; class SomeClass { }
UseDeclarationSniff
- There must be one USE keyword per declaration
 - There must be 2 blank lines after the last USE statement
 
Correct
namespace SomeNamespace; use Sth; use SthElse; class SomeClass { }
Wrong
namespace SomeNamespace; use Sth, SthElse; class SomeClass { }
6 Naming
AbstractClassNameSniff
- Abstract class should have prefix "Abstract"
 
Correct
abstract class AbstractClass { }
Wrong
abstract class SomeClass { }
InterfaceNameSniff
- Interface should have suffix "Interface"
 
Correct
interface SomeInterface { }
Wrong
interface Some { }
7 WhiteSpace
DocBlockSniff
- DocBlock lines should start with space (except first one)
 
Correct
/** * Counts feelings. */ public function ...
Wrong
/** * Counts feelings. */ public function ...
ExclamationMarkSniff
- Not operator (!) should be surrounded by spaces
 
Correct
if ( ! $s) { return $s; }
Wrong
if (!$s) { return $s; }
IfElseTryCatchFinallySniff
- Else/elseif/catch/finally statement should be preceded by 1 empty line
 
Correct
if ($i === 1) { return $i; } else { return $i * 2; }
Wrong
try (1 === 2) { return 3; } catch (2 === 3) { return 4; } finally (2 === 3) { return 4; }
InBetweenMethodSpacingSniff
- Method should have 2 empty lines after itself
 
Correct
class SomeClass { public function run() { } public function go() { } }
Wrong
class SomeClass { public function run() { } public function go() { } }
PropertiesMethodsMutualSpacingSniff
- Between properties and methods should be 2 empty lines
 
Correct
class SomeClass { private $jet; public function run() { } }
Wrong
class SomeClass { private $jet; public function run() { } }