【问题标题】:How can PHP CodeSniffer check files that have no extension?PHP CodeSniffer 如何检查没有扩展名的文件?
【发布时间】:2018-05-05 00:54:12
【问题描述】:

在我的团队中,我们使用codesniffer 来强制 Symfony 应用程序的编码风格,并且刚刚意识到没有扩展名的文件不会被检查,即使我们明确使用该文件作为参数。这是github issue 中讨论的设计。

这意味着像 bin/console 这样的文件不会被检查,即使它们是有效的 PHP 文件,并且 --extensions 参数不接受和空参数。

有没有办法让 CodeSniffer 也检查这些文件?

【问题讨论】:

    标签: php codesniffer phpcodesniffer


    【解决方案1】:

    我认为您可以指定* 作为通配符扩展。

    如果这不起作用,它会在文档中说明:

    如果您要求 PHP_CodeSniffer 检查特定文件而不是 整个目录,指定文件的扩展名将是 忽略。即使文件的扩展名无效,也会检查该文件 或者根本没有扩展。在以下示例中,main.inc 文件 即使 --extensions 也会被 PHP_CodeSniffer 检查 命令行参数指定只有 .php 文件应该是 检查。检查特定文件时忽略扩展名

    $ phpcs --extensions=php /path/to/code/main.inc
    

    因此,如果您明确检查没有扩展名的单个文件,它应该可以工作。

    进一步说明:

    忽略特定文件的文件扩展名是 PHP_CodeSniffer 是检查文件的唯一方法 延期。如果检查整个目录的文件,所有文件 没有扩展名将被忽略,因此您必须检查其中的每一个 单独归档。

    https://pear.php.net/manual/en/package.php.php-codesniffer.advanced-usage.php

    【讨论】:

    • 当你“想”我知道在配置<file>.</file><arg name="extensions" value="*"/> 不起作用。 **事实上,如果您从.php 切换到*,即使.php 文件它也会停止工作
    【解决方案2】:

    来自文档

    忽略特定文件的文件扩展名是 PHP_CodeSniffer 的一项功能,并且是检查没有扩展名的文件的唯一方法。如果你检查整个目录的文件,所有没有扩展名的文件都将被忽略,所以你必须分别检查每个文件

    https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage

    所以你需要指定文件

    语法是

    phpcs --file-list=path/to/file/containing/others

    其中其他文件是每行结构的文件。

    这会检查其他文件中列出的所有文件

    例如

    文件1 文件2 控制台

    检查三个文件

    【讨论】:

    • 如果是这种情况,那么肯定有一个错误,因为看起来命令php vendor/bin/phpcs ./bin/console 命令的行为就像我给它一个空文件夹作为参数而不是文件一样。会开票以防万一。
    • 看起来有一个明确的检查只是为了防止github.com/squizlabs/PHP_CodeSniffer/blob/master/src/Filters/…
    • 使用 --file-list 选项不适用于没有扩展名的文件,在 v3.3.2 的列表中
    【解决方案3】:

    我不知道 CS 是否可以做到这一点,但我认为像 bin/console 这样的文件大多长达十行,因此无需使用代码嗅探器检查它们 :) 他们应该只需要供应商并运行一些应用程序从源头上课。而且它们在所有项目中都是相同的。

    仅供参考,我们的 bin/console。

    #!/usr/bin/env php
    <?php declare(strict_types = 1);
    
    /** @var \Nette\DI\Container $container */
    $container = require __DIR__ . '/../src/bootstrap.php';
    
    /** @var \Symfony\Component\Console\Application $console */
    $console = $container->getByType(Symfony\Component\Console\Application::class);
    
    $services = $container->findByType(Symfony\Component\Console\Command\Command::class);
    
    foreach ($services as $service) {
        $console->add(
            $container->getService($service)
        );
    }
    
    exit($console->run());
    

    没有理由对此进行检查。

    【讨论】:

    • 虽然我同意你的观点,但它并没有解决 OPs 的具体问题 :-)
    • 确实如此,所以我在第一句话中就提到了。 :) 但我也认为重要的是要讨论我们应该在哪里使用这些工具以及它在哪里可以获得真正的利润:)
    • “最多十行”?因为刚刚拉了一个短的? PHP 是 awesome 的 shell 脚本,比 bash 好得多。并不是所有的脚本都需要在外部文件中构建。我有0common.php,我在其中保留了我在多个脚本中使用的一些函数,但是我有很多超过 10 行的脚本文件,我肯定希望它们检查而不必给它们.php 扩展名。
    • @redanimalwar 不,您只是没有理解正确...您谈论的是做某事的脚本...它们肯定会超过 10 行...但是这个问题是关于@ 987654325@ 是 CLI 应用程序的入口点,正如我可以说的那样,以我 10 年的经验,即使是我在 5 年前创建的项目也是如此。
    • bin/console 只是人们使用的常见入口点吗?我不想编写单个应用程序。我刚从 bash 转到 php,只想在一个文件夹中有一堆脚本......
    猜你喜欢
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2011-08-19
    • 2011-11-25
    • 1970-01-01
    • 2016-09-11
    相关资源
    最近更新 更多