diff --git a/phpcs.xml.dist b/phpcs.xml.dist index 0a0545c5bb..14f318645f 100644 --- a/phpcs.xml.dist +++ b/phpcs.xml.dist @@ -4,7 +4,8 @@ autoload.php requirements.php - bin + bin/phpcs + bin/phpcbf scripts src tests diff --git a/src/Filters/Filter.php b/src/Filters/Filter.php index 8376d15c3b..343cf64b83 100644 --- a/src/Filters/Filter.php +++ b/src/Filters/Filter.php @@ -27,6 +27,15 @@ class Filter extends RecursiveFilterIterator */ protected $basedir = null; + /** + * Whether the basedir is a file or a directory. + * + * TRUE if the basedir is actually a directory. + * + * @var boolean + */ + protected $isBasedirDir = false; + /** * The config data for the run. * @@ -82,6 +91,10 @@ public function __construct($iterator, $basedir, Config $config, Ruleset $rulese $this->config = $config; $this->ruleset = $ruleset; + if (is_dir($basedir) === true || Common::isPharFile($basedir) === true) { + $this->isBasedirDir = true; + } + }//end __construct() @@ -172,7 +185,17 @@ protected function shouldProcessFile($path) $fileName = basename($path); $fileParts = explode('.', $fileName); if ($fileParts[0] === $fileName || $fileParts[0] === '') { - return false; + if ($this->isBasedirDir === true) { + // We are recursing a directory, so ignore any + // files with no extension. + return false; + } + + // We are processing a single file, so always + // accept files with no extension as they have been + // explicitly requested and there is no config setting + // to ignore them. + return true; } // Checking multi-part file extensions, so need to create a diff --git a/tests/Core/Filters/Filter/ShouldProcessFileWithoutExtensionTest.php b/tests/Core/Filters/Filter/ShouldProcessFileWithoutExtensionTest.php new file mode 100644 index 0000000000..91a0f2718a --- /dev/null +++ b/tests/Core/Filters/Filter/ShouldProcessFileWithoutExtensionTest.php @@ -0,0 +1,71 @@ +assertSame([$fileWithoutExt], $this->getFilteredResultsAsArray($filter)); + + }//end testFileWithoutExtensionIsAcceptedWhenExplicitlyRequested() + + + /** + * Verify that when (recursively) scanning a directory, files without extension are filtered out. + * + * @return void + */ + public function testFileWithoutExtensionIsRejectedWhenRecursingDirectory() + { + $baseDir = self::getBaseDir(); + $fakeFileList = [ + $baseDir.'/autoload.php', + $baseDir.'/bin', + $baseDir.'/bin/phpcs', + $baseDir.'/scripts', + $baseDir.'/scripts/build-phar.php', + ]; + $fakeDI = new RecursiveArrayIterator($fakeFileList); + $filter = new Filter($fakeDI, self::getBaseDir(), self::$config, self::$ruleset); + + $expectedOutput = [ + $baseDir.'/autoload.php', + $baseDir.'/bin', + $baseDir.'/scripts', + $baseDir.'/scripts/build-phar.php', + ]; + + $this->assertSame($expectedOutput, $this->getFilteredResultsAsArray($filter)); + + }//end testFileWithoutExtensionIsRejectedWhenRecursingDirectory() + + +}//end class