From d51e0b8c6561e21c0545d04b5410a7bed7ee7c6b Mon Sep 17 00:00:00 2001
From: Mitch Portier <mitch.portier@gmail.com>
Date: Fri, 8 May 2020 12:20:59 +0200
Subject: [PATCH] fix(CoreVersionRequirement): Ensure sniff is only run on
 project info.yml files (#3133361 by Arkener)

---
 .../InfoFiles/CoreVersionRequirementSniff.php      | 14 +++++++++++++-
 .../InfoFiles/CoreVersionRequirementUnitTest.php   |  1 +
 .../Test/InfoFiles/core_version.config.info.yml    |  2 ++
 3 files changed, 16 insertions(+), 1 deletion(-)
 create mode 100644 coder_sniffer/DrupalPractice/Test/InfoFiles/core_version.config.info.yml

diff --git a/coder_sniffer/DrupalPractice/Sniffs/InfoFiles/CoreVersionRequirementSniff.php b/coder_sniffer/DrupalPractice/Sniffs/InfoFiles/CoreVersionRequirementSniff.php
index dfe9a149..1ff38cfa 100644
--- a/coder_sniffer/DrupalPractice/Sniffs/InfoFiles/CoreVersionRequirementSniff.php
+++ b/coder_sniffer/DrupalPractice/Sniffs/InfoFiles/CoreVersionRequirementSniff.php
@@ -49,11 +49,18 @@ class CoreVersionRequirementSniff implements Sniff
      */
     public function process(File $phpcsFile, $stackPtr)
     {
-        $fileExtension = strtolower(substr($phpcsFile->getFilename(), -9));
+        $filename      = $phpcsFile->getFilename();
+        $fileExtension = strtolower(substr($filename, -9));
         if ($fileExtension !== '.info.yml') {
             return ($phpcsFile->numTokens + 1);
         }
 
+        // Exclude config files which might contain the info.yml extension.
+        $filenameWithoutExtension = substr($filename, 0, -9);
+        if (strpos($filenameWithoutExtension, '.') !== false) {
+            return ($phpcsFile->numTokens + 1);
+        }
+
         $contents = file_get_contents($phpcsFile->getFilename());
         try {
             $info = Yaml::parse($contents);
@@ -62,6 +69,11 @@ class CoreVersionRequirementSniff implements Sniff
             return ($phpcsFile->numTokens + 1);
         }
 
+        // Check if the type key is set, to verify if we're inside a project info.yml file.
+        if (isset($info['type']) === false) {
+            return ($phpcsFile->numTokens + 1);
+        }
+
         // Test modules can omit the core_version_requirement key.
         if (isset($info['package']) === true && $info['package'] === 'Testing') {
             return ($phpcsFile->numTokens + 1);
diff --git a/coder_sniffer/DrupalPractice/Test/InfoFiles/CoreVersionRequirementUnitTest.php b/coder_sniffer/DrupalPractice/Test/InfoFiles/CoreVersionRequirementUnitTest.php
index 03b8b6d0..fd846bce 100644
--- a/coder_sniffer/DrupalPractice/Test/InfoFiles/CoreVersionRequirementUnitTest.php
+++ b/coder_sniffer/DrupalPractice/Test/InfoFiles/CoreVersionRequirementUnitTest.php
@@ -61,6 +61,7 @@ class CoreVersionRequirementUnitTest extends CoderSniffUnitTest
         return [
             __DIR__.'/core_version.info.yml',
             __DIR__.'/core_version_test.info.yml',
+            __DIR__.'/core_version.config.info.yml',
         ];
 
     }//end getTestFiles()
diff --git a/coder_sniffer/DrupalPractice/Test/InfoFiles/core_version.config.info.yml b/coder_sniffer/DrupalPractice/Test/InfoFiles/core_version.config.info.yml
new file mode 100644
index 00000000..8b3b7469
--- /dev/null
+++ b/coder_sniffer/DrupalPractice/Test/InfoFiles/core_version.config.info.yml
@@ -0,0 +1,2 @@
+type: coder
+description: 'This is a configuration file.'
-- 
GitLab