tavy315 / php-code-sniffer
PHP Code Sniffer
Requires
- php: >=5.5.9
Requires (Dev)
This package is not auto-updated.
Last update: 2020-01-21 11:07:31 UTC
README
PHP Code Sniffer 是一个基于 PHP_CodeSniffer 的 PHP 代码标准检查/美化/修复工具,包括 I2ct 在 PHP 项目中使用的 自定义嗅探器。
要求
PHP Code Sniffer 需要 PHP 5.6 或更高版本。
通过 Composer 安装
{ "require-dev": { "tavy315/php-code-sniffer": "*" } }
二进制文件
二进制文件位于 bin
目录中,但 composer 安装器会根据您的 composer 配置在您的 vendor 二进制目录下创建链接。
- phpcs : 将 PHP 文件与定义的编码标准规则进行比对。
- phpcbf : 修复可修复的编码标准违规。
- phpcs-pre-commit : 在 git 仓库中运行 phpcs 对修改的文件进行操作。
预提交钩子
将以下脚本保存为 .git/hooks/pre-commit
,并根据您的 composer 配置替换 COMPOSER_BIN_DIR
为您的 vendor 二进制目录名称。
#!/bin/sh
./COMPOSER_BIN_DIR/phpcs-pre-commit
确保钩子脚本可执行。
chmod +x .git/hooks/pre-commit
自定义
您可以通过在项目的根目录中添加一个名为 phpcs.xml
的文件来自定义配置。phpcs.xml 文件与正常的 ruleset.xml 文件格式完全相同,因此其中包含所有相同的选项。您需要定义 I2ct
规则来导入所有 I2ct
规则。
<?xml version="1.0" encoding="UTF-8"?> <ruleset> <rule ref="I2ct" /> </ruleset>
使用自定义引导文件
您可以在运行之前添加自定义引导文件。一些嗅探器需要从您的项目中加载类;因此添加一个自动加载文件将允许嗅探器执行此操作。
<?xml version="1.0" encoding="UTF-8"?> <ruleset> <rule ref="I2ct" /> <arg name="bootstrap" value="vendor/autoload.php" /> </ruleset>
导入标准
PSR2
默认情况下,除了 Squiz.WhiteSpace.ControlStructureSpacing
之外的所有 PSR2 嗅探器都已被导入。
PSR2.ControlStructures.ElseIfDeclaration.NotAllowed
规则类型被视为error
而不是warning
。
通用
导入的嗅探器
- 除了
DisallowMultipleStatements
(由I2ct.Formatting.DisallowMultipleStatements
替换) 之外的所有Generic.Formatting
类别的嗅探器NoSpaceAfterCast
SpaceAfterNot
Generic.Arrays.DisallowLongArraySyntax
Squiz
导入的嗅探器
Squiz.Commenting.DocCommentAlignment
Squiz.Commenting.InlineComment
InvalidEndChar
规则类型被视为warning
而不是error
。
Squiz.WhiteSpace.SuperfluousWhitespace
Squiz.WhiteSpace.OperatorSpacing
自定义嗅探
I2ct.Arrays.ArrayDeclaration
- 继承自
Squiz.Arrays.ArrayDeclaration
. - 按第一行(声明)的起始位置排列数组元素缩进。
- 数组元素前的空格数量从1增加到4。
- 移除的规则
NoKeySpecified
KeySpecified
MultiLineNotAllowed
NoCommaAfterLast
NoComma
I2ct.Commenting.DocComment
- 继承自
Generic.Commenting.DocComment
. - 对于PHPUnit测试类方法,忽略
MissingShort
规则[1]。 - 将
MissingShort
规则类型从error
更改为warning
。 - 移除了对具有长描述的注释的规则。
SpacingBetween
LongNotCapital
SpacingBeforeTags
ParamGroup
NonParamGroup
SpacingAfterTagGroup
TagValueIndent
ParamNotFirst
TagsNotGrouped
I2ct.Commenting.FunctionComment
- 继承自
PEAR.Commenting.FunctionComment
. - 添加了对没有文档注释的方法的PHPUnit测试类控制[1]。
- 添加了对重写方法的
{@inheritdoc}
验证[1]。 - 移除了
MissingParamComment
、MissingReturn
、SpacingAfterParamType
和SpacingAfterParamName
规则。 - 对于PHPUnit测试类方法,忽略
MissingParamTag
规则[1]。
I2ct.Commenting.VariableComment
- 继承自
Squiz.Commenting.VariableComment
. - 将
bool
和int
添加到允许的变量类型中。
I2ct.Formatting.DisallowMultipleStatements
- 继承自
Generic.Formatting.DisallowMultipleStatements
. - 修复了在应用
SameLine
修复器与Squiz.Functions.MultiLineFunctionDeclaration.ContentAfterBrace
修复器同时时添加2个空白行的问题。
I2ct.Strings.ConcatenationSpacing
此嗅探有两个规则和修复。
PaddingFound
:连接运算符(.)和要连接的字符串之间必须只有一个空格。NotAligned
:多行字符串连接必须对齐。
I2ct.WhiteSpace.FunctionSpacing
- 继承自
Squiz.WhiteSpace.FunctionSpacing
. - 期望在类定义的第一个定义元素的方法之前没有空白行。
- 期望在类定义的最后一个定义元素的方法之后没有空白行。
- 修复了修复方法定义前的空格。
I2ct.WhiteSpace.MemberVarSpacing
- 继承自
Squiz.WhiteSpace.MemberVarSpacing
. - 期望在类定义的第一个定义元素的性质之前没有空白行。
- 修复了修复性质定义前的空格。
开发
实时测试
您可以通过在scripts
目录下运行phpcs.php、phpcbf.php和phpcs-pre-commit.php脚本来测试任何修改。
构建二进制文件
运行以下命令以重新构建二进制文件
php scripts/build.php
PHP_CodeSniffer 依赖
当前版本是在PHP_CodeSniffer 2.8.1的基础上构建的,该版本在composer.lock文件中锁定。要导入新版本,如果需要,请编辑composer.json文件,然后运行composer update
命令,然后提交修改后的composer.lock文件。更新PHP_CodeSniffer版本可能会破坏一些I2ct sniffs,因此您在更新之前必须仔细跟踪PHP_CodeSniffer上的任何更改。
[1]需要一个类加载器(例如通过启动文件),否则将生成一个警告(Internal.I2ct.NeedClassLoader
)。您可以在项目的phpcs.xml
文件中覆盖此规则以防止警告。↩ ↩ ↩ ↩