【问题标题】:How to create multiple USE statements in sniff如何在嗅探中创建多个 USE 语句
【发布时间】:2017-06-19 23:12:52
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: codesniffer phpcodesniffer


    【解决方案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
    

    尽情享受吧,让我知道它是如何为您工作的。

    如果遇到任何问题,只需create an issue here。我很高兴尽可能地改进这个工具。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

      • 你能链接嗅探吗?
      • @TomášVotruba 我编辑了答案以提供链接。好主意;谢谢。
      猜你喜欢
      • 2020-12-12
      • 1970-01-01
      • 2020-06-25
      • 1970-01-01
      • 2014-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      相关资源
      最近更新 更多