tavy315/php-code-sniffer

此包已废弃,不再维护。没有建议的替代包。

PHP Code Sniffer

0.6.1 2017-06-20 09:41 UTC

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

通用

导入的嗅探器

  • 除了
  • 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]
  • 移除了MissingParamCommentMissingReturnSpacingAfterParamTypeSpacingAfterParamName规则。
  • 对于PHPUnit测试类方法,忽略MissingParamTag规则[1]

I2ct.Commenting.VariableComment

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

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.phpphpcbf.phpphpcs-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文件中覆盖此规则以防止警告。

许可声明

PHP_CodeSniffer采用BSD 3-Clause许可证。