我正在研究PHP_CodeSniffer 3.x的嗅探。例如,类声明class NoInlineFullyQualifiedClassNameUnitTestInc extends \PSR2R\Base\AbstractBase
应该分为uses
和class AbstractBase
。嗅探检测到方法签名的类似问题。
我认为问题在于我在同一行生成并插入多个use
语句(即相同的标记),但是在单独的fixer->beginChangeset()
... {{1}中这样做序列。修复程序将多组更改视为与冲突相同的令牌,事情变得混乱(和错误)。
GitHub问题在这里:https://github.com/php-fig-rectified/psr2r-sniffer/issues/9
有没有人想出如何为最新的3.x CodeSniffer编写自定义嗅探器?
答案 0 :(得分:0)
问题是多个Sniffer(修复程序)变更集编辑相同的令牌。我能够通过收集USE语句列表并在Sniff处理结束时插入它来使Sniff工作。
我通过向后搜索最后一个令牌来找到处理结束,以找到已注册令牌列表的第一个令牌。
答案 1 :(得分:0)
您也可以使用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
欢迎并告诉我它是如何运作的。
如果出现任何问题,请create an issue here。我很乐意尽可能地改进这个工具。