slevomat70 / coding-standard
PHP 7.0 支持:Slevomat Coding Standard for PHP_CodeSniffer 通过提供额外的检查来补充 Consistence Coding Standard。
Requires
- php: ^7.0.0
- dealerdirect/phpcodesniffer-composer-installer: ^0.6.2 || ^0.7
- phpstan70/phpdoc-parser: 1.4.x-dev
- squizlabs/php_codesniffer: ^3.6.2
Requires (Dev)
Replaces
This package is auto-updated.
Last update: 2024-09-20 21:17:12 UTC
README
Slevomat Coding Standard for PHP_CodeSniffer 提供了属于三个类别的 sniffs
- 功能 - 提高代码的安全性和行为
- 清理 - 检测死代码
- 格式化 - 规则,以确保代码外观的一致性
目录
此标准中包含的 sniffs
🔧 = 自动错误修复
🚧 = 本地抑制 sniff 检查
功能 - 提高代码的安全性和行为
SlevomatCodingStandard.TypeHints.ParameterTypeHint 🔧🚧
- 检查在可以本地声明的情况下缺少参数类型提示。如果 phpDoc 包含可以写成原生 PHP 7.0+ 类型提示的内容,则此 sniff 会报告它。
- 检查无用的
@param
注释。如果原生方法声明包含一切,而 phpDoc 没有添加任何有用的内容,则将其报告为无用,并且可以可选地使用phpcbf
自动删除。 - 强制指定可遍历类型(如
array
、iterable
和\Traversable
)中的内容。
sniff 提供以下设置
enableObjectTypeHint
:强制将@param object
转换为原生object
类型提示。如果您在 PHP 7.2+ 上,则默认开启。enableMixedTypeHint
:强制将@param mixed
转换为原生mixed
类型提示。如果您在 PHP 8.0+ 上,则默认开启。enableUnionTypeHint
:强制将@param string|int
转换为原生string|int
类型提示。如果您在 PHP 8.0+ 上,则默认开启。traversableTypeHints
:强制指定哪些类型提示必须指定包含的类型。例如,如果您将其设置为\Doctrine\Common\Collections\Collection
,则\Doctrine\Common\Collections\Collection
必须始终与包含的类型一起提供:\Doctrine\Common\Collections\Collection|Foo[]
。
如果正在重写或实现没有类型提示的父方法,则此 sniff 可能会导致错误。在这种情况下,向方法添加 @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
注释以使此 sniff 跳过它。
SlevomatCodingStandard.TypeHints.PropertyTypeHint 🔧🚧
- 检查在可以本地声明的情况下缺少属性类型提示。如果 phpDoc 包含可以写成原生 PHP 7.4+ 类型提示的内容,则此 sniff 会报告它。
- 检查无用的
@var
注释。如果原生方法声明包含一切,而 phpDoc 没有添加任何有用的内容,则将其报告为无用,并且可以可选地使用phpcbf
自动删除。 - 强制指定可遍历类型(如
array
、iterable
和\Traversable
)中的内容。
sniff 提供以下设置
enableNativeTypeHint
:强制将@var int
转换为原生int
类型提示。如果您在 PHP 7.4+ 上,则默认开启。enableMixedTypeHint
:强制将@var mixed
转换为原生mixed
类型提示。如果您在 PHP 8.0+ 上,则默认开启。它只能在enableNativeTypeHint
也开启的情况下启用。enableUnionTypeHint
:强制将@var string|int
转换为原生string|int
类型提示。如果您在 PHP 8.0+ 上,则默认开启。它只能在enableNativeTypeHint
也开启的情况下启用。traversableTypeHints
:强制指定哪些类型提示必须指定包含的类型。例如,如果您将其设置为\Doctrine\Common\Collections\Collection
,则\Doctrine\Common\Collections\Collection
必须始终与包含的类型一起提供:\Doctrine\Common\Collections\Collection|Foo[]
。
此嗅探器可能导致错误,如果您正在重写父属性且该属性没有类型提示。在这种情况下,将 @phpcsSuppress SlevomatCodingStandard.TypeHints.PropertyTypeHint.MissingNativeTypeHint
注释添加到属性中,使此嗅探器跳过它。
SlevomatCodingStandard.TypeHints.ReturnTypeHint 🔧🚧
- 检查是否存在可以声明为本地类型提示的缺失返回类型提示。如果 phpDoc 包含可以写成 native PHP 7.0+ 类型提示的内容,则此嗅探器会报告该内容。
- 检查无用的
@return
注释。如果本地方法声明包含所有内容,而 phpDoc 没有添加任何有用的内容,则将其报告为无用,并且可以使用phpcbf
自动删除。 - 强制指定可遍历类型(如
array
、iterable
和\Traversable
)中的内容。
sniff 提供以下设置
enableObjectTypeHint
:强制将@return object
转换为 nativeobject
类型提示。如果您在 PHP 7.2+ 上,默认启用。enableStaticTypeHint
:强制将@return static
转换为 nativestatic
类型提示。如果您在 PHP 8.0+ 上,默认启用。enableMixedTypeHint
:强制将@return mixed
转换为 nativemixed
类型提示。如果您在 PHP 8.0+ 上,默认启用。enableUnionTypeHint
:强制将@return string|int
转换为 nativestring|int
类型提示。如果您在 PHP 8.0+ 上,默认启用。traversableTypeHints
:强制指定哪些类型提示必须指定包含的类型。例如,如果您将其设置为\Doctrine\Common\Collections\Collection
,则\Doctrine\Common\Collections\Collection
必须始终与包含的类型一起提供:\Doctrine\Common\Collections\Collection|Foo[]
。
如果您的父方法没有类型提示且正在重写或实现该方法,则此嗅探器可能导致错误。在这种情况下,将 @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint
注释添加到方法中,使此嗅探器跳过它。
SlevomatCodingStandard.TypeHints.UselessConstantTypeHint 🔧
报告无用的 @var
注释(或整个文档注释),因为常量的类型始终是明确的。
SlevomatCodingStandard.TypeHints.UnionTypeHintFormat 🔧
检查联合类型提示的格式。
sniff 提供以下设置
enable
:启用或禁用此嗅探器。默认情况下,对于 PHP 版本 8.0 或更高版本,它被启用。withSpaces
:yes
要求在|
两侧有空格,no
要求在|
两侧没有空格。默认情况下不设置,因此两者都启用。shortNullable
:yes
要求使用?
进行可空类型提示,no
禁止它。默认情况下不设置,因此两者都启用。nullPosition
:first
要求在类型提示的第一位置使用null
,last
要求在最后位置使用。默认情况下不设置,因此null
可以在任何位置。
SlevomatCodingStandard.Exceptions.DisallowNonCapturingCatch
此嗅探器禁止使用 PHP 8.0 中引入的非捕获 catch PHP RFC: non-capturing catches。
SlevomatCodingStandard.Exceptions.ReferenceThrowableOnly 🔧🚧
在 PHP 7.0 中,添加了 Throwable
接口,它允许在比 Exception
允许的更多情况下捕获和处理错误。因此,如果在 PHP 5.x 中 catch 语句包含 Exception
,则意味着它应该被重写为在 PHP 7.x 中引用 Throwable
。此嗅探器强制执行此操作。
SlevomatCodingStandard.Exceptions.RequireNonCapturingCatch 🔧
sniff 提供以下设置
enable
:启用或禁用此嗅探器。默认情况下,对于 PHP 版本 8.0 或更高版本,它被启用。
当异常变量未使用时,它要求使用非捕获 catch。
SlevomatCodingStandard.TypeHints.DeclareStrictTypes 🔧
强制在每个 PHP 文件顶部有 declare(strict_types = 1)
。允许配置 <?php
开启标签和 declare
语句之间应该有多少新行。
sniff 提供以下设置
declareOnFirstLine
:要求在<?php
之后的第一行使用declare
。linesCountBeforeDeclare
:允许设置 0 到 N 行,在declare
和之前的语句之间。linesCountAfterDeclare
:允许设置 0 到 N 行,在declare
和下一个语句之间。spacesCountAroundEqualsSign
: 允许设置等于号周围所需空格的数量
SlevomatCodingStandard.Arrays.DisallowImplicitArrayCreation
不允许隐式创建数组。
SlevomatCodingStandard.Classes.ClassStructure 🔧
检查类/特性/接口成员是否按正确顺序排列。
sniff 提供以下设置
groups
: 组的顺序。在一个<element value="">
中使用多个组以避免它们之间的区分。您可以使用特定组或快捷键。enableFinalMethods
: 启用final
方法的组
支持的组列表:uses, public constants, protected constants, private constants, public properties, public static properties, protected properties, protected static properties, private properties, private static properties, constructor, static constructors, destructor, magic methods, public methods, protected methods, private methods, public final methods, public static final methods, protected final methods, protected static final methods, public abstract methods, public static abstract methods, protected abstract methods, protected static abstract methods, public static methods, protected static methods, private static methods, private methods
支持的快捷键列表:constants, properties, static properties, methods, all public methods, all protected methods, all private methods, static methods, final methods, abstract methods
<rule ref="SlevomatCodingStandard.Classes.ClassStructure"> <properties> <property name="groups" type="array"> <element value="uses"/> <!-- Public constants are first but you don't care about the order of protected or private constants --> <element value="public constants"/> <element value="constants"/> <!-- You don't care about the order among the properties. The same can be done with "properties" shortcut --> <element value="public properties, protected properties, private properties"/> <!-- Constructor is first, then all public methods, then protected/private methods and magic methods are last --> <element value="constructor"/> <element value="all public methods"/> <element value="methods"/> <element value="magic methods"/> </property> </properties> </rule>
SlevomatCodingStandard.Classes.DisallowConstructorPropertyPromotion
不允许使用构造函数属性提升。
SlevomatCodingStandard.Classes.DisallowLateStaticBindingForConstants 🔧
不允许常量的后期静态绑定。
SlevomatCodingStandard.Classes.ForbiddenPublicProperty
不允许使用公共属性。
SlevomatCodingStandard.Classes.RequireAbstractOrFinal 🔧
要求将类声明为抽象或最终。
SlevomatCodingStandard.Classes.RequireConstructorPropertyPromotion 🔧
要求使用构造函数属性提升。
此嗅探器提供了以下设置
enable
:启用或禁用此嗅探器。默认情况下,对于 PHP 版本 8.0 或更高版本,它被启用。
SlevomatCodingStandard.Classes.UselessLateStaticBinding 🔧
报告无用的后期静态绑定。
SlevomatCodingStandard.ControlStructures.AssignmentInCondition
不允许在 if
、elseif
和 do-while
循环条件中使用赋值
if ($file = findFile($path)) { }
在 while
循环条件中的赋值是允许的,因为它被广泛使用。
这是对现有的 SlevomatCodingStandard.ControlStructures.DisallowYodaComparison
的一个很好的补充,因为它可以防止错误地使用赋值操作符而不是比较操作符(如 ===
)的风险。
sniff 提供以下设置
ignoreAssignmentsInsideFunctionCalls
: 忽略函数调用中的赋值,例如这样
if (in_array(1, $haystack, $strict = true)) { }
SlevomatCodingStandard.ControlStructures.DisallowContinueWithoutIntegerOperandInSwitch 🔧
不允许在 switch
中使用不带整数操作数的 continue
,因为这在 PHP 7.3 及更高版本中会发出警告。
SlevomatCodingStandard.ControlStructures.DisallowEmpty
不允许使用 empty()
。
SlevomatCodingStandard.ControlStructures.RequireNullCoalesceOperator 🔧
在可能的情况下要求使用空合并操作符。
SlevomatCodingStandard.ControlStructures.RequireNullCoalesceEqualOperator 🔧
在可能的情况下要求使用空合并等于操作符。
此嗅探器提供了以下设置
enable
: 是否启用此嗅探器。默认情况下,对于 PHP 版本 7.4 或更高版本,它是启用的。
SlevomatCodingStandard.ControlStructures.EarlyExit 🔧
要求使用早期退出。
sniff 提供以下设置
ignoreStandaloneIfInScope
: 忽略作用域中独立的if
,例如这样
foreach ($values as $value) { if ($value) { doSomething(); } }
ignoreOneLineTrailingIf
: 忽略只有一行内容并且位于作用域最后一个位置的if
,例如这样
foreach ($values as $value) { $value .= 'whatever'; if ($value) { doSomething(); } }
ignoreTrailingIfWithOneInstruction
: 忽略只有一条指令并且位于作用域最后一个位置的if
,例如这样
foreach ($values as $value) { $value .= 'whatever'; if ($value) { doSomething(function () { // Anything }); } }
SlevomatCodingStandard.Functions.StrictCall
一些函数有 $strict
参数。此嗅探器报告未使用参数或使用 $strict = false
的这些函数调用。
SlevomatCodingStandard.Functions.StaticClosure 🔧
报告未使用 $this
且未声明为 static
的闭包。
SlevomatCodingStandard.Functions.FunctionLength
不允许长函数。此嗅探器提供了以下设置
includeComments
: 是否将注释包含在计数中(默认值为 false)。includeWhitespace
: 是否将空行包含在计数中(默认值为 false)。maxLinesLength
:指定允许的最大函数行数(默认值为20)。
SlevomatCodingStandard.PHP.DisallowDirectMagicInvokeCall 🔧
禁止直接调用 __invoke()
。
SlevomatCodingStandard.Operators.DisallowEqualOperators 🔧
禁止使用松散的 ==
和 !=
比较运算符。请使用 ===
和 !==
,它们更安全且更可预测。
SlevomatCodingStandard.Operators.DisallowIncrementAndDecrementOperators
禁止使用 ++
和 --
运算符。
SlevomatCodingStandard.Operators.RequireOnlyStandaloneIncrementAndDecrementOperators
报告未单独使用的 ++
和 --
运算符。
SlevomatCodingStandard.Operators.RequireCombinedAssignmentOperator 🔧
要求使用组合赋值运算符,例如 +=
、.=
等。
清理 - 检测死代码
SlevomatCodingStandard.Functions.UnusedInheritedVariablePassedToClosure 🔧
查找通过 use
传递给闭包的未使用继承变量。
SlevomatCodingStandard.Functions.UnusedParameter 🚧
查找未使用的参数。
SlevomatCodingStandard.Functions.UselessParameterDefaultValue 🚧
查找无用的参数默认值。
SlevomatCodingStandard.Namespaces.UnusedUses 🔧
查找其他命名空间中的未使用导入。
sniff 提供以下设置
searchAnnotations
(默认为false
):启用在注解中搜索类名。ignoredAnnotationNames
:应忽略的注解名称的区分大小写的列表(仅忽略名称,注解内容仍将被搜索)。对于名称冲突(如@testCase
注解和TestCase
类)很有用。ignoredAnnotations
:完全忽略的注解名称的区分大小写的列表(忽略名称和内容)。对于名称冲突(如@group Cache
注解和Cache
类)很有用。
SlevomatCodingStandard.Namespaces.UseFromSameNamespace 🔧
禁止使用相同命名空间中的导入。
namespace Foo; use Foo\Bar;
SlevomatCodingStandard.Namespaces.UselessAlias 🔧
查找与未限定名称相同的 use
别名。
SlevomatCodingStandard.PHP.DisallowReference
禁止使用引用。
SlevomatCodingStandard.PHP.ForbiddenClasses 🔧
报告禁止使用类、接口、基类和特质的使用。并提供以下设置
forbiddenClasses
:禁止使用new
关键字创建实例或使用::
运算符访问forbiddenExtends
:禁止使用extends
关键字扩展forbiddenInterfaces
:禁止在implements
部分中使用forbiddenTraits
:禁止使用use
关键字导入
可以作为自动修复的替代方案传递。请参阅 phpcs.xml
文件示例
<rule ref="SlevomatCodingStandard.PHP.ForbiddenClasses"> <properties> <property name="forbiddenClasses" type="array"> <element key="Validator" value="Illuminate\Support\Facades\Validator"/> </property> <property name="forbiddenTraits" type="array"> <element key="\AuthTrait" value="null"/> </property> </properties> </rule>
SlevomatCodingStandard.PHP.RequireExplicitAssertion 🔧
要求通过 assert
而不是内联文档注释进行断言。
SlevomatCodingStandard.PHP.RequireNowdoc 🔧
在可能的情况下,要求使用 nowdoc 语法而不是 heredoc。
SlevomatCodingStandard.PHP.UselessParentheses 🔧
查找无用的括号。
sniff 提供以下设置
ignoreComplexTernaryConditions
(默认为false
):忽略复杂的条件三元运算符 - 条件必须包含&&
、||
等,或以行尾结束。
SlevomatCodingStandard.PHP.OptimizedFunctionsWithoutUnpacking
PHP 在 VM 层面上将一些内部函数优化为特殊 opcodes。这种优化与调用标准函数相比,执行速度要快得多。这仅在调用这些函数时不进行参数解包(...
)时有效。
这些函数的列表因 PHP 版本而异,但与必须通过其全局名称(通过 \
前缀或使用 use function
)引用的函数相同,而不是在命名空间代码中的后备名称。
SlevomatCodingStandard.PHP.UselessSemicolon 🔧
查找无用的分号。
SlevomatCodingStandard.Variables.DisallowSuperGlobalVariable
禁止使用超全局变量。
SlevomatCodingStandard.Variables.DuplicateAssignmentToVariable
查找对变量的重复赋值。
SlevomatCodingStandard.Variables.UnusedVariable
查找未使用的变量。
sniff 提供以下设置
ignoreUnusedValuesWhenOnlyKeysAreUsedInForeach
(默认为false
):在仅使用$key
时忽略 foreach 中的未使用$value
。
foreach ($values as $key => $value) { echo $key; }
SlevomatCodingStandard.Variables.UselessVariable 🔧
查找无用的变量。
SlevomatCodingStandard.Exceptions.DeadCatch
此嗅探器找到不可达的 catch 块
try { doStuff(); } catch (\Throwable $e) { log($e); } catch (\InvalidArgumentException $e) { // unreachable! }
格式化 - 规则,以确保代码外观的一致性
检查多行数组的合理结束括号放置 🔧
强制执行多行数组合理的结束括号放置。
检查单行数组声明中的空白字符 🔧
检查单行数组声明中的空白字符(括号之间、逗号周围等)。
sniff 提供以下设置
spacesAroundBrackets
:要求在数组括号周围的空格数量enableEmptyArrayCheck
(默认为false
):启用对空数组的检查
检查多行数组末尾逗号 🔧
在数组的最后一个元素后面添加逗号可以使添加新元素更容易,并导致更干净的版本差异。
此嗅探器强制执行多行数组末尾的逗号并要求使用短数组语法[]
。
sniff 提供以下设置
enableAfterHeredoc
:启用/禁用HEREDOC/NOWDOC后的尾随逗号,默认取决于PHP版本。
检查类成员间的空白 🔧
检查不同类成员之间的行数,例如,在最后一个属性和第一个方法之间。
sniff 提供以下设置
linesCountBetweenMembers
:不同类成员之间的行数
检查常量间的空白 🔧
检查常量之间是否有一定数量的空白行。
sniff 提供以下设置
minLinesCountBeforeWithComment
:带有文档注释的常量之前的最小行数maxLinesCountBeforeWithComment
:带有文档注释的常量之前的最大行数minLinesCountBeforeWithoutComment
:没有文档注释的常量之前的最小行数maxLinesCountBeforeWithoutComment
:没有文档注释的常量之前的最大行数
不允许多个常量定义 🔧
不允许多个常量定义。
不允许多个属性定义 🔧
不允许多个属性定义。
检查方法间的空白 🔧
检查方法之间是否有一定数量的空白行。
sniff 提供以下设置
minLinesCount
:最小空白行数maxLinesCount
:最大空白行数
使用现代类名引用 🔧
报告使用__CLASS__
、get_parent_class()
、get_called_class()
、get_class()
和get_class($this)
。如果可能,应通过::class
常量引用类名。
sniff 提供以下设置
enableOnObjects
:在所有对象上启用::class
。如果您使用的是PHP 8.0+,则默认启用。
检查父方法调用间的空白 🔧
强制在父方法调用周围有可配置的行数。
sniff 提供以下设置
linesCountBefore
:允许配置父调用之前的行数。linesCountBeforeFirst
:允许配置第一个父调用之前的行数。linesCountAfter
:允许配置父调用之后的行数。linesCountAfterLast
:允许配置最后一个父调用之后的行数。
检查属性间的空白 🔧
检查属性之间是否有一定数量的空白行。
sniff 提供以下设置
minLinesCountBeforeWithComment
:带有文档注释的属性之前的最小行数maxLinesCountBeforeWithComment
:带有文档注释的属性之前的最大行数minLinesCountBeforeWithoutComment
:没有文档注释的属性之前的最小行数maxLinesCountBeforeWithoutComment
:没有文档注释的属性之前的最大行数
要求多行方法签名 🔧
强制将方法签名分割到更多行,使每个参数都在其自己的行上。
sniff 提供以下设置
-
minLineLength
:指定最小行长度以强制执行签名分割。使用0值强制对所有方法执行,无论长度如何。 -
includedMethodPatterns
:允许配置哪些方法包含在嗅探器检测中。这是一个带有分隔符的正则表达式数组(PCRE)。您不应与excludedMethodPatterns
一起使用,因为这将无法正常工作。 -
excludedMethodPatterns
:允许配置哪些方法应排除在嗅探器检测之外。这是一个带有分隔符的正则表达式数组(PCRE)。您不应与includedMethodPatterns
一起使用,因为这将无法正常工作。
要求单行方法签名 🔧
强制方法签名在单行上。
sniff 提供以下设置
-
maxLineLength
:指定允许的最大行长度。如果签名可以适应它,则会强制执行。使用0值强制执行所有方法,无论长度如何。 -
includedMethodPatterns
:允许配置哪些方法包含在嗅探器检测中。这是一个带有分隔符的正则表达式数组(PCRE)。您不应与excludedMethodPatterns
一起使用,因为这将无法正常工作。 -
excludedMethodPatterns
:允许配置哪些方法应排除在嗅探器检测之外。这是一个带有分隔符的正则表达式数组(PCRE)。您不应与includedMethodPatterns
一起使用,因为这将无法正常工作。
SlevomatCodingStandard.Classes.SuperfluousAbstractClassNaming
报告对抽象类使用多余的“Abstract”前缀或后缀。
SlevomatCodingStandard.Classes.SuperfluousInterfaceNaming
报告对接口使用多余的“Interface”前缀或后缀。
SlevomatCodingStandard.Classes.SuperfluousExceptionNaming
报告对异常使用多余的“Exception”后缀。
SlevomatCodingStandard.Classes.SuperfluousErrorNaming
报告对错误使用多余的“Error”后缀。
SlevomatCodingStandard.Classes.SuperfluousTraitNaming
报告对特质使用多余的“Trait”后缀。
SlevomatCodingStandard.Classes.TraitUseDeclaration 🔧
禁止在一个use
语句中用逗号分隔多个特质。
SlevomatCodingStandard.Classes.TraitUseSpacing 🔧
强制执行在第一个use
之前、最后一个use
之后以及两个use
语句之间的可配置行数。
sniff 提供以下设置
linesCountBeforeFirstUse
:允许配置第一个use
之前的行数。linesCountBeforeFirstUseWhenFirstInClass
:允许配置当use
是类中的第一条语句时,第一个use
之前的行数。linesCountBetweenUses
:允许配置两个use
语句之间的行数。linesCountAfterLastUse
:允许配置最后一个use
之后的行数。linesCountAfterLastUseWhenLastInClass
:允许配置当use
是类中的最后一条语句时,最后一个use
之后的行数。
SlevomatCodingStandard.ControlStructures.BlockControlStructureSpacing 🔧
强制执行在块控制结构(if、foreach等)周围的行数。
sniff 提供以下设置
linesCountBefore
:允许配置控制结构之前的行数。linesCountBeforeFirst
:允许配置第一个控制结构之前的行数。linesCountAfter
:允许配置控制结构之后的行数。linesCountAfterLast
:允许配置最后一个控制结构之后的行数。controlStructures
:允许缩小要检查的控制结构的列表。
例如,以下设置仅检查if
和switch
关键字。
<rule ref="SlevomatCodingStandard.ControlStructures.BlockControlStructureSpacing"> <properties> <property name="controlStructures" type="array"> <element value="if"/> <element value="switch"/> </property> </properties> </rule>
SlevomatCodingStandard.ControlStructures.JumpStatementsSpacing 🔧
强制执行在跳转语句(continue、return等)周围的行数。
sniff 提供以下设置
allowSingleLineYieldStacking
:是否允许在一行内无空白行地使用多个yield/yield from语句。linesCountBefore
:允许配置跳转语句之前的行数。linesCountBeforeFirst
:允许配置第一个跳转语句之前的行数。linesCountBeforeWhenFirstInCaseOrDefault
:允许配置在case
或default
中的第一个跳转语句之前的行数。linesCountAfter
:允许配置跳转语句之后的行数。linesCountAfterLast
:允许配置最后一个跳转语句之后的行数。linesCountAfterWhenLastInCaseOrDefault
:允许配置在case
或default
中的最后一个跳转语句之后的行数。linesCountAfterWhenLastInLastCaseOrDefault
:允许配置在最后一个case
或default
中的最后一个跳转语句之后的行数。jumpStatements
:允许缩小要检查的跳转语句的列表。
例如,以下设置仅检查continue
和break
关键字。
<rule ref="SlevomatCodingStandard.ControlStructures.JumpStatementsSpacing"> <properties> <property name="jumpStatements" type="array"> <element value="continue"/> <element value="break"/> </property> </properties> </rule>
SlevomatCodingStandard.ControlStructures.LanguageConstructWithParentheses 🔧
LanguageConstructWithParenthesesSniff
检查并修复使用括号的编程结构。
SlevomatCodingStandard.ControlStructures.NewWithParentheses 🔧
要求使用带括号的new
。
SlevomatCodingStandard.ControlStructures.NewWithoutParentheses 🔧
报告无用的括号中的 new
。
SlevomatCodingStandard.ControlStructures.DisallowNullSafeObjectOperator
禁止使用 ?->
操作符。
SlevomatCodingStandard.ControlStructures.DisallowShortTernaryOperator 🔧
禁止使用短三元运算符 ?:
。
sniff 提供以下设置
fixable
:默认情况下,该嗅探器是可修复的,但在严格代码中,禁止这种弱类型的三元形式是有意义的,您可以通过此选项禁用可修复性。
SlevomatCodingStandard.ControlStructures.RequireMultiLineTernaryOperator 🔧
当行长度超过给定限制时,三元运算符必须重格式化为更多行。
sniff 提供以下设置
lineLengthLimit
(默认为0
)minExpressionsLength
(默认为null
):当?
后的表达式长度短于此长度时,三元运算符不必重格式化。
SlevomatCodingStandard.ControlStructures.RequireNullSafeObjectOperator 🔧
要求使用 ?->
操作符。
sniff 提供以下设置
enable
:启用或禁用此嗅探器。默认情况下,对于 PHP 版本 8.0 或更高版本,它被启用。
SlevomatCodingStandard.ControlStructures.RequireSingleLineCondition 🔧
强制 if
、elseif
、while
和 do-while
的条件在单行上。
sniff 提供以下设置
maxLineLength
:指定最大允许的行长度。如果条件(以及该行的其余部分)适合于此长度,则强制执行。使用 0 值强制所有条件,无论长度如何。alwaysForSimpleConditions
:允许强制所有简单条件(即没有&&
、||
或xor
)为单行,无论长度如何。
SlevomatCodingStandard.ControlStructures.RequireMultiLineCondition 🔧
强制将包含一个或多个布尔运算符的 if
、elseif
、while
和 do-while
的条件拆分为更多行,以便每个条件部分都在其自己的行上。
sniff 提供以下设置
minLineLength
:指定强制拆分条件的最小行长度。使用 0 值强制所有条件,无论长度如何。booleanOperatorOnPreviousLine
:在修复时,布尔运算符放置在上一行的末尾。alwaysSplitAllConditionParts
:要求所有条件部分都在其自己的行上 - 即使条件已经是多行,但某些条件部分在同一行上,也会报告错误。
SlevomatCodingStandard.ControlStructures.RequireShortTernaryOperator 🔧
在可能的情况下要求使用短三元运算符 ?:
。
SlevomatCodingStandard.ControlStructures.RequireTernaryOperator 🔧
在可能的情况下要求使用三元运算符。
sniff 提供以下设置
ignoreMultiLine
(默认为false
):忽略多行语句。
SlevomatCodingStandard.ControlStructures.DisallowYodaComparison/RequireYodaComparison 🔧
Yoda 条件 通过在比较运算符周围交换操作数来降低代码的可理解性和可读性,迫使读者以不自然的方式阅读代码。
sniff 提供以下设置
alwaysVariableOnRight
(默认为false
):总是将变量移到右侧。
DisallowYodaComparisonSniff
不仅在 if
语句中,而且在整个代码中查找并修复此类比较。
但是,如果您更喜欢 Yoda 条件,则可以使用 RequireYodaComparisonSniff
。
SlevomatCodingStandard.Files.LineLength
强制单行代码的最大长度。
sniff 提供以下设置
lineLengthLimit
:行长实际限制ignoreComments
:是否忽略注释的行长度ignoreImports
:是否忽略导入(使用)语句的行长度
SlevomatCodingStandard.Functions.ArrowFunctionDeclaration 🔧
检查 fn
声明。
sniff 提供以下设置
spacesCountAfterKeyword
:在fn
后的空间数。spacesCountBeforeArrow
:在=>
之前的空间数。spacesCountAfterArrow
:在=>
之后的空间数。allowMultiLine
:允许多行声明。
SlevomatCodingStandard.Functions.DisallowEmptyFunction
报告空函数体并要求至少包含一条注释。
SlevomatCodingStandard.Functions.DisallowArrowFunction
禁止箭头函数。
SlevomatCodingStandard.Functions.RequireArrowFunction 🔧
要求使用箭头函数。
sniff 提供以下设置
allowNested
(默认为true
)enable
: 是否启用此嗅探器。默认情况下,对于 PHP 版本 7.4 或更高版本,它是启用的。
SlevomatCodingStandard.Functions.RequireMultiLineCall 🔧
强制函数调用拆分为多行,使每个参数都位于其自己的行上。
sniff 提供以下设置
minLineLength
:指定强制拆分的最小行长度。使用0值强制所有调用,无论长度。
SlevomatCodingStandard.Functions.RequireSingleLineCall 🔧
强制函数调用位于一行上。
sniff 提供以下设置
maxLineLength
:指定允许的最大行长度。如果调用可以适应它,则强制执行。使用0值强制所有调用,无论长度。ignoreWithComplexParameter
(默认为true
):忽略包含数组、闭包、箭头函数和嵌套调用的调用。
SlevomatCodingStandard.Functions.DisallowNamedArguments
此嗅探器禁止使用命名参数。
SlevomatCodingStandard.Functions.DisallowTrailingCommaInCall 🔧
此嗅探器禁止在多行调用中使用尾随逗号。
SlevomatCodingStandard.Functions.RequireTrailingCommaInCall 🔧
函数或方法调用中最后一个参数后面的逗号可以使添加新参数更容易,并产生更干净的版本差异。
此嗅探器强制在多行调用中添加尾随逗号。
此嗅探器提供了以下设置
enable
:启用或禁用此嗅探器。默认情况下,对于7.3或更高版本的PHP,它被启用。
SlevomatCodingStandard.Functions.DisallowTrailingCommaInDeclaration 🔧
此嗅探器禁止在多行声明中使用尾随逗号。
SlevomatCodingStandard.Functions.RequireTrailingCommaInDeclaration 🔧
函数或方法声明中最后一个参数后面的逗号可以使添加新参数更容易,并产生更干净的版本差异。
此嗅探器强制在多行声明中添加尾随逗号。
此嗅探器提供了以下设置
enable
:启用或禁用此嗅探器。默认情况下,对于 PHP 版本 8.0 或更高版本,它被启用。
SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses 🔧
检查文件顶部的uses是否按字母顺序排序。遵循自然排序并考虑特殊情况下的符号。以下代码片段是正确排序的uses的示例
use LogableTrait; use LogAware; use LogFactory; use LoggerInterface; use LogLevel; use LogStandard;
sniff 提供以下设置
psr12Compatible
(默认为true
):设置所需顺序为classes
、functions
和constants
。false
将所需顺序设置为classes
、constants
和functions
。caseSensitive
:比较命名空间时区分大小写,这使得此顺序正确
use LogAware; use LogFactory; use LogLevel; use LogStandard; use LogableTrait; use LoggerInterface;
SlevomatCodingStandard.Namespaces.RequireOneNamespaceInFile
要求文件中只有一个命名空间。
SlevomatCodingStandard.Namespaces.NamespaceDeclaration 🔧
强制在namespace
后有一个空格,禁止在命名空间名称和分号之间使用内容,并禁止使用括号语法。
SlevomatCodingStandard.Namespaces.NamespaceSpacing 🔧
强制在namespace
前后配置行数。
sniff 提供以下设置
linesCountBeforeNamespace
:允许配置在namespace
之前的行数。linesCountAfterNamespace
:允许配置在namespace
之后的行数。
SlevomatCodingStandard.Namespaces.UseSpacing 🔧
强制在第一个use
之前、最后一个use
之后以及两种不同类型的use
之间配置行数(例如,在use function
和use const
之间)。还强制相同类型的use
之间没有行数。
sniff 提供以下设置
linesCountBeforeFirstUse
:允许配置第一个use
之前的行数。linesCountBetweenUseTypes
:允许配置两种不同类型的use
之间的行数。linesCountAfterLastUse
:允许配置最后一个use
之后的行数。
SlevomatCodingStandard.Numbers.DisallowNumericLiteralSeparator 🔧
禁止使用数字字面量分隔符。
SlevomatCodingStandard.Numbers.RequireNumericLiteralSeparator
要求使用数字字面量分隔符。
此嗅探器提供了以下设置
enable
: 是否启用此嗅探器。默认情况下,对于 PHP 版本 7.4 或更高版本,它是启用的。minDigitsBeforeDecimalPoint
:要求分隔符的最小小数点前数字。minDigitsAfterDecimalPoint
:要求分隔符的最小小数点后数字。ignoreOctalNumbers
:忽略八进制数字。
SlevomatCodingStandard.PHP.ReferenceSpacing 🔧
强制在引用后配置空格数。
sniff 提供以下设置
spacesCountAfterReference
:&
后面的空格数。
SlevomatCodingStandard.Operators.NegationOperatorSpacing 🔧
检查否定操作符后面的空格数量是否与预期相同。
sniff 提供以下设置
spacesCount
:否定操作符后面的预期空格数量
SlevomatCodingStandard.Operators.SpreadOperatorSpacing 🔧
强制在 ...
操作符后面使用可配置的空格数量。
sniff 提供以下设置
spacesCountAfterOperator
:在...
操作符后面的空格数量。
SlevomatCodingStandard.TypeHints.DisallowArrayTypeHintSyntax 🔧
禁止在 phpDocs 中使用数组类型提示语法(例如 int[]
,bool[][]
),而应使用泛型类型提示语法(例如 array<int>
,array<array<bool>>
)。
sniff 提供以下设置
traversableTypeHints
:帮助修复器检测可遍历类型提示,因此\Traversable|int[]
可以转换为\Traversable<int>
。
SlevomatCodingStandard.TypeHints.DisallowMixedTypeHint
禁止在 phpDocs 中使用 "mixed" 类型提示。
SlevomatCodingStandard.TypeHints.LongTypeHints 🔧
强制在 phpDocs 中使用缩写标量类型提示变体:使用 int
而不是 integer
,使用 bool
而不是 boolean
。这是与仅允许缩写变体的原生标量类型提示保持一致。
SlevomatCodingStandard.TypeHints.NullTypeHintOnLastPosition 🔧
强制在注释中将 null
类型提示放在最后一个位置。
SlevomatCodingStandard.PHP.ShortList 🔧
强制使用列表语法的简写形式,使用 [...]
而不是 list(...)
。
SlevomatCodingStandard.PHP.TypeCast 🔧
强制使用缩写类型转换操作符,禁止使用 unset 和二元类型转换操作符:(bool)
而不是 (boolean)
,(int)
而不是 (integer)
,(float)
而不是 (double)
或 (real)
。禁止使用 (binary)
和 (unset)
。
SlevomatCodingStandard.Whitespaces.DuplicateSpaces 🔧
检查任何地方的重复空格,因为不是每个代码部分的格式都可以进行检查。
sniff 提供以下设置
ignoreSpacesBeforeAssignment
:允许多个空格对齐赋值。ignoreSpacesInAnnotation
:允许多个空格对齐注释。ignoreSpacesInComment
:允许多个空格对齐注释的内容。ignoreSpacesInParameters
:允许多个空格对齐参数。
SlevomatCodingStandard.Files.TypeNameMatchesFileName
对于不遵循 PSR-0 或 PSR-4 自动加载标准的项目,此嗅探器检查命名空间和类/接口/特质名称是否遵循约定的方式组织代码到目录和文件中。
除了强制类型名称必须与包含它的文件名称匹配外,此嗅探器非常可配置。考虑以下示例配置
<rule ref="SlevomatCodingStandard.Files.TypeNameMatchesFileName"> <properties> <property name="rootNamespaces" type="array"> <element key="app/ui" value="Slevomat\UI"/> <element key="app" value="Slevomat"/> <element key="build/SlevomatSniffs/Sniffs" value="SlevomatSniffs\Sniffs"/> <element key="tests/ui" value="Slevomat\UI"/> <element key="tests" value="Slevomat"/> </property> <property name="skipDirs" type="array"> <element value="components"/> <element value="forms"/> <element value="model"/> <element value="models"/> <element value="services"/> <element value="stubs"/> <element value="data"/> <element value="new"/> </property> <property name="ignoredNamespaces" type="array"> <element value="Slevomat\Services"/> </property> </properties> </rule>
sniff 提供以下设置
rootNamespaces
属性期望类似于 PSR-4 的配置 - 项目目录映射到特定的命名空间。skipDirs
在将路径与命名空间进行比较时不予考虑。例如,根据上述设置,路径为app/services/Product/Product.php
的文件应包含Slevomat\Product\Product
,而不是Slevomat\services\Product\Product
。extensions
:允许不同的文件扩展名。默认为php
。ignoredNamespaces
:在这些命名空间上不执行嗅探。
SlevomatCodingStandard.Classes.ClassConstantVisibility 🔧
从 PHP 7.1 开始,可以声明 类常量的可见性。与属性和方法的可选可见性声明类似,这在合理的编码标准中实际上是必需的,此嗅探器还要求声明所有类常量的可见性。
sniff 提供以下设置
fixable
:默认情况下,此嗅探器不可修复,因为我们认为最好逐个决定每个常量的可见性,但是您可以启用此选项以启用修复性。
const FOO = 1; // visibility missing! public const BAR = 2; // correct
SlevomatCodingStandard.TypeHints.ReturnTypeHintSpacing 🔧
强制返回类型提示的一致格式化,如下所示
function foo(): ?int
sniff 提供以下设置
spacesCountBeforeColon
:期望在闭合花括号和冒号之间空格的数量。
SlevomatCodingStandard.TypeHints.NullableTypeForNullDefaultValue 🔧🚧
检查每个可空和可选参数(标记为= null
)之前是否存在可空性符号?
。
function foo( int $foo = null, // ? missing ?int $bar = null // correct ) { }
SlevomatCodingStandard.TypeHints.ParameterTypeHintSpacing 🔧
- 检查类型提示和参数名称之间只有一个空格:
Foo $foo
- 检查可空性符号和类型提示之间没有空格:
?Foo
SlevomatCodingStandard.TypeHints.PropertyTypeHintSpacing 🔧
- 检查类型提示和属性名称之间只有一个空格:
Foo $foo
- 检查可空性符号和类型提示之间没有空格:
?Foo
- 检查可空性符号或类型提示之前只有一个空格:
private ?Foo
或private Foo
SlevomatCodingStandard.Namespaces.DisallowGroupUse
分组使用声明很丑,会使差异显示很丑,并且这个嗅探器禁止了它们。
SlevomatCodingStandard.Namespaces.FullyQualifiedExceptions 🔧
这个嗅探器减少了以下代码片段中的混淆
try { $this->foo(); } catch (Exception $e) { // Is this the general exception all exceptions must extend from? Or Exception from the current namespace? }
所有名为Exception
或以Exception
结尾的类型引用必须通过完全限定名称进行引用。
try { $this->foo(); } catch (\FooCurrentNamespace\Exception $e) { } catch (\Exception $e) { }
sniff 提供以下设置
- 可以在
specialExceptionNames
属性中配置不同名称的异常。 - 如果您的代码库使用看起来像异常的类(因为它们有
Exception
或Error
后缀),但实际上不是,可以将它们添加到ignoredNames
属性中,嗅探器将不会强制要求它们是完全限定的。具有Error
后缀的类必须仅在根命名空间中添加到忽略列表(例如LibXMLError
)。
SlevomatCodingStandard.Namespaces.FullyQualifiedGlobalConstants 🔧
所有对全局常量的引用必须通过完全限定名称进行引用。
sniff 提供以下设置
include
:必须通过完全限定名称引用的全局常量列表。如果未设置,则认为所有常量都必须设置。exclude
:允许不通过完全限定名称引用的全局常量列表。
SlevomatCodingStandard.Namespaces.FullyQualifiedGlobalFunctions 🔧
所有对全局函数的引用必须通过完全限定名称进行引用。
sniff 提供以下设置
include
:必须通过完全限定名称引用的全局函数列表。如果未设置,则认为所有函数都必须设置。includeSpecialFunctions
:包含可以通过完全限定名称引用进行优化的PHP内部函数的完整列表。exclude
:允许不通过完全限定名称引用的全局函数列表。
SlevomatCodingStandard.Namespaces.MultipleUsesPerLine
禁止使用逗号分隔的多个使用。
use Foo, Bar;
SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly 🔧
sniff 提供以下设置
searchAnnotations
(默认为false
):启用在注释中搜索提及。namespacesRequiredToUse
:如果没有设置,则所有命名空间都需要使用。当设置时,仅需要提到的命名空间。与UseOnlyWhitelistedNamespaces嗅探器一起使用很有用。allowFullyQualifiedExceptions
、specialExceptionNames
和ignoredNames
:允许完全限定异常。与FullyQualifiedExceptions嗅探器一起使用很有用。allowFullyQualifiedNameForCollidingClasses
:允许具有冲突使用语句的类的完全限定名称。allowFullyQualifiedNameForCollidingFunctions
:允许具有冲突使用语句的函数的完全限定名称。allowFullyQualifiedNameForCollidingConstants
:允许具有冲突使用语句的常量的完全限定名称。allowFullyQualifiedGlobalClasses
:允许使用全局空间中的完全限定类(例如\DateTimeImmutable
)。allowFullyQualifiedGlobalFunctions
:允许使用全局空间中的完全限定函数(例如\phpversion()
)。allowFullyQualifiedGlobalConstants
:允许使用全局空间中的完全限定常量(例如\PHP_VERSION
)。allowFallbackGlobalFunctions
:允许使用没有use
的回退名称使用全局函数(例如phpversion()
)。allowFallbackGlobalConstants
: 允许使用全局常量通过回退名称而不使用use
(例如PHP_VERSION
)。allowPartialUses
: 允许使用和引用整个命名空间。
SlevomatCodingStandard.Namespaces.UseOnlyWhitelistedNamespaces
禁止使用除配置的命名空间之外的其他命名空间。
sniff 提供以下设置
namespacesRequiredToUse
: 此数组中的命名空间是唯一允许使用的。例如,根项目命名空间。allowUseFromRootNamespace
: 还允许使用顶级命名空间
use DateTimeImmutable;
SlevomatCodingStandard.Namespaces.UseDoesNotStartWithBackslash 🔧
禁止在 use 语句中使用前导反斜杠
use \Foo\Bar;
SlevomatCodingStandard.Classes.EmptyLinesAroundClassBraces 🔧
强制在类/接口/特质的大括号之后配置一个行数,并在大括号之前有一个空行。
sniff 提供以下设置
linesCountAfterOpeningBrace
: 允许配置大括号之后行数。linesCountBeforeClosingBrace
: 允许配置大括号之前行数。
SlevomatCodingStandard.Namespaces.FullyQualifiedClassNameInAnnotation 🔧
强制在 phpDocs 中的类和接口使用完全限定名称 - 在注释中。这导致无歧义的 phpDocs。
SlevomatCodingStandard.Commenting.DeprecatedAnnotationDeclaration
报告没有描述的 @deprecated
注释。
SlevomatCodingStandard.Commenting.DisallowCommentAfterCode 🔧
禁止在同一行中的代码之后使用注释。
SlevomatCodingStandard.Commenting.ForbiddenAnnotations 🔧
报告禁止的注释。默认情况下没有禁止注释,配置完全由用户决定。建议禁止过时和不合适的注释,如
@author
、@created
、@version
:我们有版本控制系统。@package
:我们有命名空间。@copyright
、@license
:不需要在每个文件中重复许可信息。@throws
:无法强制此注释,且信息可能过时。
sniff 提供以下设置
forbiddenAnnotations
:允许配置禁止使用的注释。
SlevomatCodingStandard.Commenting.ForbiddenComments 🔧
报告描述中的禁止注释。默认情况下没有禁止注释,配置完全由用户决定。建议禁止自动生成或不合适的消息,如
构造函数。
由 PhpStorm 创建。
sniff 提供以下设置
forbiddenCommentPatterns
:允许配置禁止使用的注释。这是一个具有分隔符的正则表达式数组(PCRE)。
SlevomatCodingStandard.Commenting.DocCommentSpacing 🔧
强制在第一内容(描述或注释)之前、在最后一内容(描述或注释)之后、在描述和注释之间、在两种不同的注释类型之间(例如,在 @param
和 @return
之间)配置可配置的行数。
sniff 提供以下设置
linesCountBeforeFirstContent
:允许配置第一内容(描述或注释)之前的行数。linesCountBetweenDescriptionAndAnnotations
:允许配置描述和注释之间的行数。linesCountBetweenDifferentAnnotationsTypes
:允许配置两种不同的注释类型之间的行数。linesCountBetweenAnnotationsGroups
:允许配置注释组之间的行数。linesCountAfterLastContent
:允许配置最后一内容(描述或注释)之后的行数。annotationsGroups
:允许配置注释组的顺序,甚至每个组中注释的顺序。支持前缀,例如@ORM\
。
<rule ref="SlevomatCodingStandard.Commenting.DocCommentSpacing"> <properties> <property name="annotationsGroups" type="array"> <element value=" @ORM\, "/> <element value=" @var, @param, @return, "/> </property> </properties> </rule>
如果设置了 annotationsGroups
,则忽略 linesCountBetweenDifferentAnnotationsTypes
,并应用 linesCountBetweenAnnotationsGroups
。如果没有设置 annotationsGroups
,则忽略 linesCountBetweenAnnotationsGroups
,并应用 linesCountBetweenDifferentAnnotationsTypes
。
不属于任何组的注释将放置在自动创建的最后一个组中。
SlevomatCodingStandard.Commenting.EmptyComment 🔧
报告空注释。
SlevomatCodingStandard.Commenting.InlineDocCommentDeclaration 🔧
报告无效的行内 phpDocs,其中包含 @var
。
sniff 提供以下设置
allowDocCommentAboveReturn
:允许在return
语句上方没有变量名的文档注释。allowAboveNonAssignment
:如果行包含正确的变量名,允许在非赋值语句上方有文档注释。
SlevomatCodingStandard.Commenting.RequireOneLinePropertyDocComment 🔧
要求属性注释的单一行内容应写为单行。
SlevomatCodingStandard.Commenting.RequireOneLineDocComment 🔧
要求单一行内容的注释应写为单行。
SlevomatCodingStandard.Commenting.DisallowOneLinePropertyDocComment 🔧
要求单一行内容的注释应写为多行。
SlevomatCodingStandard.Commenting.UselessFunctionDocComment 🔧
- 检查无用的文档注释。如果原生方法声明包含一切,而 phpDoc 没有添加任何有用的内容,则将其报告为无用,并且可以可选地使用
phpcbf
自动删除。 - 即使某些 phpDoc 没有添加任何类型提示信息,它们也可能仍然有用。它们可以包含代码元素的文本描述,还可以包含一些有意义的注释,如
@expectException
或@dataProvider
。
sniff 提供以下设置
traversableTypeHints
:强制指定哪些类型提示必须指定包含的类型。例如,如果您将其设置为\Doctrine\Common\Collections\Collection
,则\Doctrine\Common\Collections\Collection
必须始终与包含的类型一起提供:\Doctrine\Common\Collections\Collection|Foo[]
。
如果正在重写或实现没有类型提示的父方法,则此 sniff 可能会导致错误。在这种情况下,向方法添加 @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
注释以使此 sniff 跳过它。
SlevomatCodingStandard.Commenting.UselessInheritDocComment 🔧
报告仅包含 {@inheritDoc}
注释的文档注释,因为继承是自动的,不需要使用特殊注释。
SlevomatCodingStandard.ControlStructures.UselessIfConditionWithReturn 🔧
报告两个分支都返回 true
或 false
的无用条件。
sniff 提供以下设置
assumeAllConditionExpressionsAreAlreadyBoolean
(默认为false
)。
SlevomatCodingStandard.ControlStructures.UselessTernaryOperator 🔧
报告两个分支都返回 true
或 false
的无用三元运算符。
sniff 提供以下设置
assumeAllConditionExpressionsAreAlreadyBoolean
(默认为false
)。
安装
安装 Slevomat Coding Standard 的推荐方式是通过 Composer。
{ "require-dev": { "slevomat/coding-standard": "~7.0" } }
还建议安装 php-parallel-lint/php-parallel-lint,该工具检查源代码的语法错误。Sniffs 假定处理后的代码在语法上是有效的(没有解析错误),否则它们可能表现得不可预测。建议在运行 PHP_CodeSniffer
和退出构建过程之前,在构建工具中运行 PHP-Parallel-Lint
,如果 PHP-Parallel-Lint
失败,则提前退出构建过程。
如何运行 sniffs
您可以选择两种方式之一来在您的代码库上仅运行标准中的选定 sniffs
选择要运行的 sniffs
推荐的方式是编写自己的 ruleset.xml,只引用选定的 sniffs。这是一个示例 ruleset.xml
<?xml version="1.0"?> <ruleset name="AcmeProject"> <config name="installed_paths" value="../../slevomat/coding-standard"/><!-- relative path from PHPCS source location --> <rule ref="SlevomatCodingStandard.Arrays.TrailingArrayComma"/> <!-- other sniffs to include --> </ruleset>
然后像往常一样运行 phpcs
可执行文件
vendor/bin/phpcs --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests
排除不希望运行的 sniffs
您还可以在项目的 ruleset.xml
中提及 Slevomat Coding Standard,并仅排除某些 sniffs
<?xml version="1.0"?> <ruleset name="AcmeProject"> <rule ref="vendor/slevomat/coding-standard/SlevomatCodingStandard/ruleset.xml"><!-- relative path to your ruleset.xml --> <!-- sniffs to exclude --> </rule> </ruleset>
然而,这不是推荐使用 Slevomat Coding Standard 的方法,因为您的构建在标准之间的次要版本之间移动时可能会中断(如果您在 composer.json
中使用 ^
或 ~
版本约束)。我们经常在次要版本中添加新的 sniffs,这意味着您的代码很可能不符合新次要版本的包。
自动修复错误
此标准中标记为 🔧 符号的 sniffs 支持通过 自动修复编码标准违规。要自动修复您的代码,请运行 phpcbf 而不是 phpcs
vendor/bin/phpcbf --standard=ruleset.xml --extensions=php --tab-width=4 -sp src tests
请始终记得在执行自动修复之前备份您的代码,并亲自检查结果,因为自动修复器有时会产生不希望的结果。
本地抑制 sniffs
此标准中标记为 🚧 符号的选定 sniffs 可以使用注解抑制特定代码片段。考虑以下示例
/** * @param int $max */ public function createProgressBar($max = 0): ProgressBar { }
参数 $max
可能有一个原生的 int
原始类型提示。但由于父类中的方法没有此类型提示,因此这个方法也不能有。PHP_CodeSniffer 显示以下错误
----------------------------------------------------------------------
FOUND 1 ERROR AFFECTING 1 LINE
----------------------------------------------------------------------
67 | ERROR | [x] Method ErrorsConsoleStyle::createProgressBar()
| | does not have native type hint for its parameter $max
| | but it should be possible to add it based on @param
| | annotation "int".
| | (SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint)
如果我们想抑制此错误而不是修复它,我们可以使用错误代码(SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint
)并使用 @phpcsSuppress
注解,如下所示
/** * @phpcsSuppress SlevomatCodingStandard.TypeHints.ParameterTypeHint.MissingNativeTypeHint * @param int $max */ public function createProgressBar($max = 0): ProgressBar { }
贡献
要使此存储库在您的机器上运行,请克隆它,然后在存储库的根目录中运行这两个命令
composer install
bin/phing
编写一些代码并对单元测试进行编辑或添加后,再次运行phing以检查一切是否正常
bin/phing
我们始终期待您的错误报告、功能请求和拉取请求。感谢。
行为准则
本项目遵循贡献者行为准则。通过参与本项目及其社区,您应遵守此准则。