From 35277fc8675b6a2cbb194f8880145a9c85c845c4 Mon Sep 17 00:00:00 2001 From: Klaus Purer <klaus.purer@protonmail.ch> Date: Fri, 14 Jun 2019 17:06:06 +0200 Subject: [PATCH] feat(Project): Improve core version handling by allowing a drupal_core_version config option (#2935144) --- .../Arrays/DisallowLongArraySyntaxSniff.php | 2 +- coder_sniffer/DrupalPractice/Project.php | 33 +++++++++++++------ .../Sniffs/Constants/GlobalConstantSniff.php | 2 +- .../Sniffs/Constants/GlobalDefineSniff.php | 2 +- .../Sniffs/FunctionCalls/DbQuerySniff.php | 2 +- .../FunctionDefinitions/HookInitCssSniff.php | 2 +- .../FunctionDefinitions/InstallTSniff.php | 2 +- .../Sniffs/Objects/GlobalFunctionSniff.php | 2 +- .../Test/ProjectDetection/ProjectUnitTest.php | 10 ++++-- 9 files changed, 37 insertions(+), 20 deletions(-) diff --git a/coder_sniffer/Drupal/Sniffs/Arrays/DisallowLongArraySyntaxSniff.php b/coder_sniffer/Drupal/Sniffs/Arrays/DisallowLongArraySyntaxSniff.php index 23808033..8f72e850 100644 --- a/coder_sniffer/Drupal/Sniffs/Arrays/DisallowLongArraySyntaxSniff.php +++ b/coder_sniffer/Drupal/Sniffs/Arrays/DisallowLongArraySyntaxSniff.php @@ -38,7 +38,7 @@ class DisallowLongArraySyntaxSniff extends GenericDisallowLongArraySyntaxSniff public function process(File $phpcsFile, $stackPtr) { $drupalVersion = Project::getCoreVersion($phpcsFile); - if ($drupalVersion !== '8.x') { + if ($drupalVersion < 8) { // No need to check this file again, mark it as done. return ($phpcsFile->numTokens + 1); } diff --git a/coder_sniffer/DrupalPractice/Project.php b/coder_sniffer/DrupalPractice/Project.php index 8b775bf8..6b38fe09 100644 --- a/coder_sniffer/DrupalPractice/Project.php +++ b/coder_sniffer/DrupalPractice/Project.php @@ -12,6 +12,7 @@ namespace DrupalPractice; use PHP_CodeSniffer\Files\File; use \Drupal\Sniffs\InfoFiles\ClassFilesSniff; use Symfony\Component\Yaml\Yaml; +use PHP_CodeSniffer\Config; /** * Helper class to retrieve project information like module/theme name for a file. @@ -234,14 +235,21 @@ class Project * * @param \PHP_CodeSniffer\Files\File $phpcsFile The file being scanned. * - * @return string|false The core version string or false if it could not - * be derived. + * @return int The core version number. Returns 8 by default. */ public static function getCoreVersion(File $phpcsFile) { + // First check if a config option was passed. + $coreVersion = Config::getConfigData('drupal_core_version'); + if (empty($coreVersion) === false) { + return (int) $coreVersion; + } + + // TRy to guess the core version from info files in the file path. $infoFile = static::getInfoFile($phpcsFile); if ($infoFile === false) { - return false; + // Default to Drupal 8. + return 8; } $pathParts = pathinfo($infoFile); @@ -249,16 +257,21 @@ class Project // Drupal 6 and 7 use the .info file extension. if ($pathParts['extension'] === 'info') { $infoSettings = ClassFilesSniff::drupalParseInfoFormat(file_get_contents($infoFile)); - if (isset($infoSettings['core']) === true) { - return $infoSettings['core']; + if (isset($infoSettings['core']) === true + && is_string($infoSettings['core']) === true + ) { + return (int) $infoSettings['core']{0}; } - } else { - // Drupal 8 uses the .yml file extension. - // @todo Revisit for Drupal 9, but I don't want to do YAML parsing - // for now. - return '8.x'; + + // Default to Drupal 7 if there is an info file. + return 7; } + // Drupal 8 uses the .yml file extension. + // @todo Revisit for Drupal 9, but I don't want to do YAML parsing + // for now. + return 8; + }//end getCoreVersion() diff --git a/coder_sniffer/DrupalPractice/Sniffs/Constants/GlobalConstantSniff.php b/coder_sniffer/DrupalPractice/Sniffs/Constants/GlobalConstantSniff.php index 98afe01d..5013691c 100644 --- a/coder_sniffer/DrupalPractice/Sniffs/Constants/GlobalConstantSniff.php +++ b/coder_sniffer/DrupalPractice/Sniffs/Constants/GlobalConstantSniff.php @@ -55,7 +55,7 @@ class GlobalConstantSniff implements Sniff } $coreVersion = Project::getCoreVersion($phpcsFile); - if ($coreVersion !== '8.x') { + if ($coreVersion < 8) { // No need to check this file again, mark it as done. return ($phpcsFile->numTokens + 1); } diff --git a/coder_sniffer/DrupalPractice/Sniffs/Constants/GlobalDefineSniff.php b/coder_sniffer/DrupalPractice/Sniffs/Constants/GlobalDefineSniff.php index c2789677..7c10d9ac 100644 --- a/coder_sniffer/DrupalPractice/Sniffs/Constants/GlobalDefineSniff.php +++ b/coder_sniffer/DrupalPractice/Sniffs/Constants/GlobalDefineSniff.php @@ -63,7 +63,7 @@ class GlobalDefineSniff extends FunctionCall } $coreVersion = Project::getCoreVersion($phpcsFile); - if ($coreVersion !== '8.x') { + if ($coreVersion < 8) { // No need to check this file again, mark it as done. return ($phpcsFile->numTokens + 1); } diff --git a/coder_sniffer/DrupalPractice/Sniffs/FunctionCalls/DbQuerySniff.php b/coder_sniffer/DrupalPractice/Sniffs/FunctionCalls/DbQuerySniff.php index d92b3381..a8e66bb4 100644 --- a/coder_sniffer/DrupalPractice/Sniffs/FunctionCalls/DbQuerySniff.php +++ b/coder_sniffer/DrupalPractice/Sniffs/FunctionCalls/DbQuerySniff.php @@ -56,7 +56,7 @@ class DbQuerySniff extends FunctionCall $closeBracket ) { // This check only applies to Drupal 7, not Drupal 6. - if (Project::getCoreVersion($phpcsFile) !== '7.x') { + if (Project::getCoreVersion($phpcsFile) !== 7) { return ($phpcsFile->numTokens + 1); } diff --git a/coder_sniffer/DrupalPractice/Sniffs/FunctionDefinitions/HookInitCssSniff.php b/coder_sniffer/DrupalPractice/Sniffs/FunctionDefinitions/HookInitCssSniff.php index 69d43a41..1064f94f 100644 --- a/coder_sniffer/DrupalPractice/Sniffs/FunctionDefinitions/HookInitCssSniff.php +++ b/coder_sniffer/DrupalPractice/Sniffs/FunctionDefinitions/HookInitCssSniff.php @@ -45,7 +45,7 @@ class HookInitCssSniff extends FunctionDefinition } // This check only applies to Drupal 7, not Drupal 6. - if (Project::getCoreVersion($phpcsFile) !== '7.x') { + if (Project::getCoreVersion($phpcsFile) !== 7) { return ($phpcsFile->numTokens + 1); } diff --git a/coder_sniffer/DrupalPractice/Sniffs/FunctionDefinitions/InstallTSniff.php b/coder_sniffer/DrupalPractice/Sniffs/FunctionDefinitions/InstallTSniff.php index 31012b01..5e431152 100644 --- a/coder_sniffer/DrupalPractice/Sniffs/FunctionDefinitions/InstallTSniff.php +++ b/coder_sniffer/DrupalPractice/Sniffs/FunctionDefinitions/InstallTSniff.php @@ -53,7 +53,7 @@ class InstallTSniff extends FunctionDefinition } // This check only applies to Drupal 7, not Drupal 8. - if (Project::getCoreVersion($phpcsFile) !== '7.x') { + if (Project::getCoreVersion($phpcsFile) !== 7) { return ($phpcsFile->numTokens + 1); } diff --git a/coder_sniffer/DrupalPractice/Sniffs/Objects/GlobalFunctionSniff.php b/coder_sniffer/DrupalPractice/Sniffs/Objects/GlobalFunctionSniff.php index 383f9901..50992778 100644 --- a/coder_sniffer/DrupalPractice/Sniffs/Objects/GlobalFunctionSniff.php +++ b/coder_sniffer/DrupalPractice/Sniffs/Objects/GlobalFunctionSniff.php @@ -70,7 +70,7 @@ class GlobalFunctionSniff extends FunctionCall $tokens = $phpcsFile->getTokens(); // Only run this sniff on Drupal 8+. - if (Project::getCoreVersion($phpcsFile) !== '8.x') { + if (Project::getCoreVersion($phpcsFile) < 8) { // No need to check this file again, mark it as done. return ($phpcsFile->numTokens + 1); } diff --git a/coder_sniffer/DrupalPractice/Test/ProjectDetection/ProjectUnitTest.php b/coder_sniffer/DrupalPractice/Test/ProjectDetection/ProjectUnitTest.php index af9c75e2..0c5cc200 100644 --- a/coder_sniffer/DrupalPractice/Test/ProjectDetection/ProjectUnitTest.php +++ b/coder_sniffer/DrupalPractice/Test/ProjectDetection/ProjectUnitTest.php @@ -96,15 +96,19 @@ class ProjectUnitTest extends \PHPUnit_Framework_TestCase return [ [ dirname(__FILE__).'/modules/drupal6/nested/test.php', - '6.x', + 6, ], [ dirname(__FILE__).'/modules/drupal7/test.php', - '7.x', + 7, ], [ dirname(__FILE__).'/modules/drupal8/test.php', - '8.x', + 8, + ], + [ + 'invalid', + 8, ], ]; -- GitLab