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