在我的团队中,我们使用代码嗅探器来强制 Symfony 应用程序的编码风格,并且刚刚意识到没有扩展名的文件没有得到检查,即使我们明确使用该文件作为参数。这是在此github 问题上讨论的设计。
这意味着像bin/console这样的文件不会被检查,即使它们是有效的 PHP 文件,并且--extensions
参数不接受并且为空参数。
有没有办法让 CodeSniffer 也检查这些文件?
在我的团队中,我们使用代码嗅探器来强制 Symfony 应用程序的编码风格,并且刚刚意识到没有扩展名的文件没有得到检查,即使我们明确使用该文件作为参数。这是在此github 问题上讨论的设计。
这意味着像bin/console这样的文件不会被检查,即使它们是有效的 PHP 文件,并且--extensions
参数不接受并且为空参数。
有没有办法让 CodeSniffer 也检查这些文件?
从文档
忽略特定文件的文件扩展名是 PHP_CodeSniffer 的一项功能,并且是检查没有扩展名的文件的唯一方法。如果您检查整个目录的文件,所有没有扩展名的文件都将被忽略,因此您必须分别检查每个文件
https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage
所以你需要指定文件
语法是
phpcs --file-list=path/to/file/containing/others
其他是每行结构一个文件的文件。
这会检查其他文件中列出的所有文件
例如
文件 1 文件 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());
没有理由对此进行检查。
我认为您可以指定*
为通配符扩展名。
如果这不起作用,它会在文档中说明:
如果您要求 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