1

我正在对 PHP_CodeSniffer 3.x 进行嗅探。例如,类声明class NoInlineFullyQualifiedClassNameUnitTestInc extends \PSR2R\Base\AbstractBase应拆分为 ausesclass AbstractBase。嗅探检测方法签名的类似问题。

我相信问题在于我use在同一行(即相同的标记)生成和插入多个语句,但是在单独的fixer->beginChangeset()...fixer->endChangeset()序列中这样做。修复程序将同一令牌的多组更改视为冲突,并且事情变得混乱(和错误)。

GitHub问题在这里:https ://github.com/php-fig-rectified/psr2r-sniffer/issues/9

有没有人想出如何为最新的 3.x CodeSniffer 编写自定义嗅探?

4

2 回答 2

1

你也可以使用SlevomatCodingStandard\Sniffs\Namespaces\ReferenceUsedNamesOnlySniff

它变成了这个

固定前

进入这个

固定后


如何使用它?

最好的办法是像这样将它与EasyCodingStandard一起使用:

# easy-coding-standard.neon
checkers:
    - SlevomatCodingStandard\Sniffs\Namespaces\ReferenceUsedNamesOnlySniff

安装它:

composer require --dev symplify\easy-coding-standard 

运行:

vendor/bin/ecs check src

修理它:

vendor/bin/ecs check src --fix

享受并让我知道它是如何为您工作的。

如果出现任何问题,只需在此处创建问题即可。我很高兴尽可能地改进这个工具。

于 2017-08-28T07:47:14.100 回答
0

问题是多个嗅探器(修复器)变更集编辑相同的标记。通过收集 USE 语句列表并将它们插入到 Sniff 处理的末尾,我能够让 Sniff 工作。

我通过从最后一个标记向后搜索以找到已注册标记列表的第一个标记来确定处理的结束。

编辑:这里是嗅探:https ://github.com/php-fig-rectified/psr2r-sniffer/blob/master/PSR2R/Sniffs/Namespaces/NoInlineFullyQualifiedClassNameSniff.php

于 2017-06-25T15:09:35.223 回答