iodigital-com/php-code-sniffer-baseliner

IO PHP Code Sniffer Baseliner

v3.0.0 2023-10-19 13:11 UTC

README

此工具允许您通过自动在整个代码库中添加 phpcs:ignorephpcs:disable/phpcs:enable 指令作为基线,将 PHP_CodeSniffer 集成到现有项目中。这允许您在不更改任何源代码的情况下使 PHP_CodeSniffer 通过,使其能够在例如持续集成管道或 git 钩中使用 PHP_CodeSniffer。这样,您可以在不接触现有代码的情况下强制所有新代码遵循您的编码标准。

安装

使用 composer 需要此包

composer require --dev iodigital-com/php-code-sniffer-baseliner

还可以将此包作为全局 composer 依赖项安装。

用法

为了在整个项目中添加 phpcs:ignorephpcs:disable/phpcs:enable 指令,请运行

vendor/bin/phpcs-baseliner create-baseline

它如何工作?

首先,该工具运行 vendor/bin/phpcs 并捕获报告。根据报告输出,它将为每次违规在源代码中添加 // phpcs:ignore 指令。它只忽略实际违反的嗅探器。在极少数情况下,添加这些指令可能会引入新的违规。因此,这个过程会重复进行,直到 phpcs 报告没有违规为止。

示例

假设我们想使用 PHP_CodeSniffer 强制执行 declare(strict_types = 1); 语句和本地属性类型提示。Slevomat Coding Standard 有关于此的嗅探器:SlevomatCodingStandard.TypeHints.DeclareStrictTypesSlevomatCodingStandard.TypeHints.PropertyTypeHint.MissingNativeTypeHint。我们安装 Slevomat Coding Standard 并将嗅探器添加到我们的 phpcs.xml 中的规则集。

如果我们现在在我们的项目中运行 vendor/bin/phpcs-baseliner create-baseline,它将在所有不包含 declare(strict_types = 1); 语句或本地属性类型声明的文件中添加忽略指令

- <?php
+ <?php // phpcs:ignore SlevomatCodingStandard.TypeHints.DeclareStrictTypes -- baseline
  
  class Foo {
+     // phpcs:ignore SlevomatCodingStandard.TypeHints.PropertyTypeHint.MissingNativeTypeHint -- baseline
      private $bar;
  }

在某些情况下,无法在违反的行直接上方插入 // phpcs:ignore 指令(例如,多行字符串)。在这些情况下,添加 // phpcs:disable// phpcs:enable 指令

  <?php

  class Foo {
+     // phpcs:disable Generic.Files.LineLength.TooLong -- baseline  
      public const BAR = '
      Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas malesuada, lectus vitae vestibulum vulputate, mi morbi.';
+     // phpcs:enable Generic.Files.LineLength.TooLong -- baseline
  }

功能

  • 自动缩进
  • 忽略每行多个排除项的组,例如 // phpcs:ignore Generic.Files.LineLength.TooLong, Generic.Arrays.DisallowLongArraySyntax -- baseline
  • 合并新指令与现有指令
  • 合并现有指令的消息:// phpcs:ignore Generic.Files.LineLength.TooLong, Generic.Arrays.DisallowLongArraySyntax -- existing message; baseline
  • 当无法插入 phpcs:ignore 时使用 phpcs:disable/phpcs:enable(即对于多行字符串,包括 HEREDOC 和 NOWDOC)
  • 当在带有星号的注释块中找到违规时添加星号前缀,例如
    /*
     * phpcs:ignore Generic.Files.LineLength.TooLong
     * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas malesuada, lectus vitae vestibulum vulputate, mi morbi.
     */
  • 所有功能都经过单元测试,请参阅 AddBaselineProcessorTestDataProvider 类以获取大量测试数据集。

路线图

  • 支持处理不以 <?php 开头的文件。
  • 支持处理包含 ?> 的文件。
  • 支持忽略文件第一行末尾的多行字符串上的违规,例如
    <?php echo 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas malesuada, lectus vitae vestibulum vulputate, mi
    morbi.';
    ?>
  • 支持检测并合并与较旧类型的忽略指令,例如 @phpcsSuppress