如何在sniff中创建多个USE语句

时间:2017-06-19 23:12:53

标签: codesniffer phpcodesniffer

我正在研究PHP_CodeSniffer 3.x的嗅探。例如,类声明class NoInlineFullyQualifiedClassNameUnitTestInc extends \PSR2R\Base\AbstractBase应该分为usesclass AbstractBase。嗅探检测到方法签名的类似问题。

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

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

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

2 个答案:

答案 0 :(得分:0)

问题是多个Sniffer(修复程序)变更集编辑相同的令牌。我能够通过收集USE语句列表并在Sniff处理结束时插入它来使Sniff工作。

我通过向后搜索最后一个令牌来找到处理结束,以找到已注册令牌列表的第一个令牌。

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

答案 1 :(得分:0)

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

它变成了这个

Before fixing

进入此

After fixing

如何使用它?

最好是将它与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

欢迎并告诉我它是如何运作的。

如果出现任何问题,请create an issue here。我很乐意尽可能地改进这个工具。