gamegos/php-code-sniffer

Gamegos PHP 代码规范检查/美化/修复工具

0.8.0 2023-08-23 07:04 UTC

This package is auto-updated.

Last update: 2024-09-23 09:21:48 UTC


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

通用

导入的嗅探器

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}验证。
  • 删除了MissingParamCommentMissingReturnSpacingAfterParamTypeSpacingAfterParamName规则。
  • 对于PHPUnit测试类方法忽略了MissingParamTag规则。

Gamegos.Commenting.VariableComment

  • 继承自Squiz.Commenting.VariableComment
  • boolint添加到允许的变量类型中。

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.phpphpcbf.phpphpcs-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许可证下发布的。