isaac/php-code-sniffer-baseliner

此软件包已被废弃,不再维护。作者建议使用 iodigital-com/php-code-sniffer-baseliner 软件包。

ISAAC PHP Code Sniffer Baseliner

v2.3.1 2022-11-16 13:51 UTC

README

此仓库已被存档并重命名,移动到 iO PHP_CodeSniffer Baseliner。功能嗅探和更改将在 iO 仓库中处理。

PHP_CodeSniffer Baseliner

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

安装

使用 composer 安装软件包

composer require --dev isaac/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