zenify / coding-standard
v4.2
2016-12-29 23:22 UTC
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
基于 PHP_CodeSniffer 的规则集,偏好使用制表符,并基于 Nette 编码标准。
查看 规则概述 获取示例。
安装
$ composer require zenify/coding-standard --dev
使用
使用 Php_CodeSniffer 运行
vendor/bin/phpcs src --standard=vendor/zenify/coding-standard/src/ZenifyCodingStandard/ruleset.xml -p
就这些!
如何既偷懒又安全
Composer 插件
如果您不想手动为代码中的每个更改使用 Php_CodeSniffer,可以通过 composer.json
添加 pre-commit 插件。
"scripts": { "post-install-cmd": [ "Zenify\\CodingStandard\\Composer\\ScriptHandler::addPhpCsToPreCommitHook" ], "post-update-cmd": [ "Zenify\\CodingStandard\\Composer\\ScriptHandler::addPhpCsToPreCommitHook" ] }
每次您尝试提交时,只有更改的 .php
文件将运行 Php_CodeSniffer。
这比检查整个项目、手动运行或等待 CI 快得多。
很酷,不是吗?
测试
composer check-cs vendor/bin/phpunit
贡献
规则很简单
- 新功能需要测试
- 所有测试必须通过
- 每个PR一个功能
我们很高兴能合并您的功能!
规则概述
规则使用默认的数值参数(一些可以根据您的需求进行更改)。
目录
1 类
ClassDeclarationSniff
- 类的开头大括号后应跟一个空行
- 类的大括号应前有一个空行
正确
class SomeClass { public function run() { } }
错误
class SomeClass { public function run() { } }
FinalInterfaceSniff
- 实现接口的非抽象类应该是final。
- 除了Doctrine实体,它们不能是final。
正确
final class SomeClass implements SomeInterface { public function run() { } }
错误
class SomeClass implements SomeInterface { public function run() { } }
2 注释
BlockPropertyCommentSniff
- 应使用块注释而不是单行注释
正确
class SomeClass { /** * @var int */ public $count; }
错误
class SomeClass { /** @var int */ public $count; }
ComponentFactoryCommentSniff
- CreateComponent* 方法应该有文档注释
- CreateComponent* 方法应该有返回标签
- 返回标签应包含类型
正确
/** * @return DisplayComponent */ protected function createComponentDisplay() { $this->displayComponentFactory->create(); }
错误
protected function createComponentDisplay() { $this->displayComponentFactory->create(); }
VarPropertyCommentSniff
- 属性应该有文档注释。
正确
class SomeClass { /** * @var int */ private $someProperty; }
错误
class SomeClass { private $someProperty; }
MethodCommentSniff
- 没有参数类型提示的方法应该有文档注释。
正确
class SomeClass { /** * @param int $values */ public function count($values) { } }
class SomeClass { public function count(array $values) { } }
错误
class SomeClass { public function count($values) { } }
MethodCommentReturnTagSniff
- 获取器应该有 @return 标签或返回类型。
正确
class SomeClass { /** * @return int */ public function getResult() { // ... } }
错误
class SomeClass { /** * This will return something. */ public function getResult() { } }
3 控制结构
NewClassSniff
- 新类声明不应有空括号。
正确
$someClass = new SomeNamespace\SomeClass; $someClass = new SomeNamespace\SomeClass($keyHandler);
错误
$someClass = new SomeNamespace\SomeClass();
SwitchDeclarationSniff
正确
$suit = 'case'; switch ($suit) { case 1: echo 'ok'; break; default: echo 'not ok'; break; }
错误
$suit = 'case'; switch ($suit) { case 1: echo 'ok'; break; }
YodaConditionSniff
- 不应使用 Yoda 条件;按 switch 表达式顺序
正确
if ($i === TRUE) { return; } $go = $decide === TRUE ?: FALSE;
错误
if (TRUE === $i) { return; } $go = TRUE === $decide ?: FALSE;
4 调试
DebugFunctionCallSniff
- 调试函数不应留在代码中
错误
dump('It works');
5 命名空间
NamespaceDeclarationSniff
- 命名空间声明后必须有两行空行或一行空行后跟 use 语句。
正确
namespace SomeNamespace; use PHP_CodeSniffer; class SomeClass { }
或
namespace SomeNamespace; class SomeClass { }
错误
namespace SomeNamespace; use SomeNamespace; class SomeClass { }
或
namespace SomeNamespace; class SomeClass { }
UseDeclarationSniff
- 每个声明必须有一个 USE 关键字
- 最后一个 USE 语句之后必须有两行空白
正确
namespace SomeNamespace; use Sth; use SthElse; class SomeClass { }
错误
namespace SomeNamespace; use Sth, SthElse; class SomeClass { }
6 命名
AbstractClassNameSniff
- 抽象类应该有前缀 "Abstract"
正确
abstract class AbstractClass { }
错误
abstract class SomeClass { }
InterfaceNameSniff
- 接口应该有后缀 "Interface"
正确
interface SomeInterface { }
错误
interface Some { }
7 空白字符
DocBlockSniff
- DocBlock 行应该以空格开头(除了第一行)
正确
/** * Counts feelings. */ public function ...
错误
/** * Counts feelings. */ public function ...
ExclamationMarkSniff
- 非操作符 (!) 应该被空格包围
正确
if ( ! $s) { return $s; }
错误
if (!$s) { return $s; }
IfElseTryCatchFinallySniff
- else/elseif/catch/finally 语句前面应该有一个空行
正确
if ($i === 1) { return $i; } else { return $i * 2; }
错误
try (1 === 2) { return 3; } catch (2 === 3) { return 4; } finally (2 === 3) { return 4; }
InBetweenMethodSpacingSniff
- 方法之后应该有 2 个空行
正确
class SomeClass { public function run() { } public function go() { } }
错误
class SomeClass { public function run() { } public function go() { } }
PropertiesMethodsMutualSpacingSniff
- 属性和方法之间应该有两行空行
正确
class SomeClass { private $jet; public function run() { } }
错误
class SomeClass { private $jet; public function run() { } }