From c01bd6f79a78a4819ec0a44f5d38c38d829bc629 Mon Sep 17 00:00:00 2001 From: jrfnl Date: Wed, 2 Feb 2022 15:48:12 +0100 Subject: [PATCH] Plugin: add new `getPhpcsCommand()` method (bug fix) PR 80 in response to bug 79 fixed the issue of the command to set the installed paths failing when the system default PHP version was being used instead of the PHP version used by Composer. However, PHPCS is also called for the `--config-show` command to retrieve the originally set paths as well as to verify a successful save. This `--config-show` command was not adjusted at the time and was still being run using the system default PHP version, which could lead to valid `installed_paths` which were present before the installation of the plugin being removed, as `--config-show` would silently fail, leading to the initial `$this->installedPaths` being empty. This commit fixes that by: 1. Introducing a new `getPhpcsCommand()` method which will cobble together the PHP executable + the PHPCS executable to a runnable command. 2. Using that new method in both places in the plugin were PHPCS is called. This fixes the bug and improves consistency in the plugin. It also happens to work as a work-around for upstream by composer/composer 10504 as it removes the call to `$this->composer->getConfig()->get('bin-dir')` which would result in an incorrect execution directory on Windows with Composer 2.2.2+. --- src/Plugin.php | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) diff --git a/src/Plugin.php b/src/Plugin.php index 75653e49..1cb5af0f 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -234,9 +234,9 @@ private function loadInstalledPaths() { if ($this->isPHPCodeSnifferInstalled() === true) { $this->processExecutor->execute( - 'phpcs --config-show', + $this->getPhpcsCommand() . ' --config-show', $output, - $this->composer->getConfig()->get('bin-dir') + $this->getPHPCodeSnifferInstallPath() ); $regex = sprintf(self::PHPCS_CONFIG_REGEX, self::PHPCS_CONFIG_KEY); @@ -287,27 +287,16 @@ private function saveInstalledPaths() self::PHPCS_CONFIG_KEY ); - // Determine the path to the main PHPCS file. - $phpcsPath = $this->getPHPCodeSnifferInstallPath(); - if (file_exists($phpcsPath . '/bin/phpcs') === true) { - // PHPCS 3.x. - $phpcsExecutable = './bin/phpcs'; - } else { - // PHPCS 2.x. - $phpcsExecutable = './scripts/phpcs'; - } - // Okay, lets rock! $command = vsprintf( - '%s %s %s', + '%s %s', array( - 'php executable' => $this->getPhpExecCommand(), - 'phpcs executable' => $phpcsExecutable, - 'arguments' => implode(' ', $arguments), + 'phpcs command' => $this->getPhpcsCommand(), + 'arguments' => implode(' ', $arguments), ) ); - $exitCode = $this->processExecutor->execute($command, $configResult, $phpcsPath); + $exitCode = $this->processExecutor->execute($command, $configResult, $this->getPHPCodeSnifferInstallPath()); if ($exitCode === 0) { $exitCode = $this->verifySaveSuccess(); } @@ -359,6 +348,30 @@ private function verifySaveSuccess() return $exitCode; } + /** + * Get the command to call PHPCS. + */ + protected function getPhpcsCommand() + { + // Determine the path to the main PHPCS file. + $phpcsPath = $this->getPHPCodeSnifferInstallPath(); + if (file_exists($phpcsPath . '/bin/phpcs') === true) { + // PHPCS 3.x. + $phpcsExecutable = './bin/phpcs'; + } else { + // PHPCS 2.x. + $phpcsExecutable = './scripts/phpcs'; + } + + return vsprintf( + '%s %s', + array( + 'php executable' => $this->getPhpExecCommand(), + 'phpcs executable' => $phpcsExecutable, + ) + ); + } + /** * Get the path to the current PHP version being used. *