vicimus/standard

安装次数: 9,714

依赖项: 7

建议者: 0

安全性: 0

星级: 1

关注者: 5

分支: 1

开放问题: 0

类型:项目


README

这是Vicimus编码标准的phpcs实现。结合PSR2编码标准,Vicimus编码标准填补了PSR2没有涉及的一些空白(主要是PHP 7相关的内容,但也包括一些其他内容)。

值得注意的是,其中许多规则/嗅探器来自现有的phpcs代码标准嗅探器,因此许多规则描述直接取自它们的文档。

规则/嗅探器

以下规则扩展了PSR2的编码标准。

数组

禁止长数组语法

确保所有数组定义使用短语法[]而不是长语法array()

数组尾随逗号

在数组中最后一个元素后使用逗号可以更容易地添加新元素,并产生更干净的版本差异。

此嗅探器强制多行数组使用尾随逗号,并要求使用短数组语法[]

类常量可见性

在PHP 7.1中,可以声明类常量的可见性。类似于对于属性和方法的可选可见性声明(这在合理的编码标准中实际上是必需的),此嗅探器还要求声明所有类常量的可见性。

const FOO = 1; // visibility missing!
public const BAR = 2; // correct

文档注释

确保文档块遵循基本格式。这确保了在所有文档块内容中都有适当的间距、换行等。

函数调用参数间距

确保函数参数之间有适当的间距。

小写常量

有点冗余,但包括在内,确保常量不是小写的。

未使用私有元素

检查未使用的方法、类中的未使用或只写属性以及未使用的私有常量。报告的未使用元素可以安全地删除。

这在重构过程中非常有用,可以清理死代码和注入的依赖项。

大写常量

确保常量声明为大写。

格式化

禁止制表符缩进

确保所有缩进使用空格而不是制表符。

文档注释对齐

确保所有文档注释使用适当的对齐和间距,在参数和返回值之间,包括类型、名称和描述。

// Good --
/**
 * A method!
 *
 * @param string $value  This is the value to pass
 * @param int    $number Another parameter here
 *
 * @return Response
 */

 // Bad --
 /**
  * A method!
  *
  * @param  string $value
  * @param int $number Another parameter here
  *
  * @return Response
  */

函数注释

确保所有方法都有准确的文档块注释。

行内文档注释声明

报告行内phpDocs中@var的无效格式。

行长度限制

强制字符限制为80个字符,如果超过120个字符,则会抛出错误。

类型提示

声明严格类型

强制在每个PHP文件顶部有declare(strict_types = 1)。应遵循此示例

<?php declare(strict_types = 1);

namespace ...

有关此声明的更多信息,请阅读手册中的章节

长类型提示

强制在phpDocs中使用简写标量类型提示变体:int而不是integer和bool而不是boolean。这是与仅允许简写变体的本地标量类型提示保持一致。

为空默认值使用可为空的类型

检查每个可空和可选参数(标记为 = null)之前是否存在可空性 ? 符号

function foo(
    int $foo = null, // ? missing
    ?int $bar = null // correct
) {

}

参数类型提示间隔

  • 检查类型提示和参数名称之间只有一个空格:Foo $foo
  • 检查类型提示和可空性符号之间没有空格:?Foo

返回类型提示间隔

强制执行返回类型提示的一致格式,如下所示

    function foo(): ?int

缺少标量类型提示

确保所有方法参数(字符串、布尔值、整数)在可能的情况下使用标量类型提示。

类型提示声明

  • 检查 phpDoc @var 中缺少属性类型。

  • 检查是否缺少类型提示,如果它们可以本地声明。如果 phpDoc 包含可以写成 PHP 7.0 或 7.1 本地类型提示的内容,此嗅探器会报告。

  • 检查方法体包含带值的返回时是否缺少 @return 和/或本地返回类型提示。

  • 检查无用的文档注释。如果本地方法声明包含所有内容且 phpDoc 没有添加任何有用的内容,则报告为无用,并且可以选择性地自动删除 phpcbf。

  • 一些 phpDoc 即使不添加任何类型提示信息也可能仍然有用。它们可以包含代码元素的文本描述,以及一些有意义的注释,如 @expectException 或 @dataProvider。

  • 强制指定可遍历类型(如 arrayiterable\Traversable)中的内容。

缺少类型提示

确保所有方法参数在可能的情况下都使用类型提示。

异常

无效的捕获

此嗅探器找到无法到达的捕获块

try {
    doStuff();
} catch (\Throwable $e) {
    log($e);
} catch (\InvalidArgumentException $e) {
    // unreachable!
}

仅引用 Throwable

在 PHP 7.0 中,添加了 Throwable 接口,它允许在比 Exception 原来允许的情况下更多的情况下捕获和处理错误。因此,如果在 PHP 5.x 中的捕获语句包含 Exception,则意味着它可能需要在 PHP 7.x 中重写为引用 Throwable

控制结构

条件中的赋值

禁止在 if、elseif 和 do-while 循环条件中进行赋值

if ($file = findFile($path)) {

}

由于这是常用的,因此允许在 while 循环条件中进行赋值。

禁止使用相等运算符

禁止使用松散的 == 和 != 比较运算符。使用 === 和 !== 而不是,它们要安全得多,也更可预测。

命名空间

按字母顺序排序的 uses

检查文件顶部是否按字母顺序排序。遵循自然排序并考虑特殊符号的边缘情况。以下代码片段是正确排序的 uses 的示例

use LogableTrait;
use LogAware;
use LogFactory;
use LoggerInterface;
use LogLevel;
use LogStandard;

禁止分组使用

分组使用声明很丑陋,使差异很丑陋,此嗅探器禁止它们。在 官方 RFC 中可以找到不应做的事情的示例。

每行多个 uses

禁止使用逗号分隔的多个 uses

use Foo, Bar;

仅引用使用的名称

强制使用所有引用的名称。这意味着,您必须始终在文档顶部使用 use,然后通过短名称引用它们。

未使用 uses

寻找来自其他命名空间的无用导入。

uses 语句不以反斜杠开头

禁止使用语句以反斜杠开头

use \Foo\Bar;

从同一命名空间使用

禁止从同一命名空间使用

namespace Foo;

use Foo\Bar;

因为您已经在 Foo 命名空间中,所以 use 语句是多余的,并增加了视觉债务。