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