zenify/coding-standard

该软件包已被废弃,不再维护。作者建议使用 symplify/easy-coding-standard 软件包。

基于Nette编码标准的PHP_CodeSniffer规则集,偏好使用制表符。

v4.2 2016-12-29 23:22 UTC

README

Build Status Quality Score Code Coverage Downloads Latest stable

基于 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()
	{
	}

}