3

在我的团队中,我们使用代码嗅探器来强制 Symfony 应用程序的编码风格,并且刚刚意识到没有扩展名的文件没有得到检查,即使我们明确使用该文件作为参数。这是在此github 问题上讨论的设计。

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

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

4

3 回答 3

1

从文档

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

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

所以你需要指定文件

语法是

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

其他是每行结构一个文件的文件。

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

例如

文件 1 文件 2 控制台

检查 3 个文件

于 2017-11-21T14:25:31.600 回答
0

我不知道 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());

没有理由对此进行检查。

于 2017-11-21T14:27:45.287 回答
0

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

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

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

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

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

它进一步指出:

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

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

于 2017-11-21T14:22:23.790 回答