Skip to content

Commit

Permalink
Merge pull request #238 from stronk7/enable_phpcs_check_from_phar
Browse files Browse the repository at this point in the history
Enable phpcs and phpcbf checks to run from phar
  • Loading branch information
stronk7 authored Sep 15, 2023
2 parents ed8d11b + 4d76194 commit 9aeb6ad
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 6 deletions.
8 changes: 8 additions & 0 deletions box.json
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@
"Docs",
"pix"
]
},
{
"in": "vendor/squizlabs/php_codesniffer",
"name": [
"phpcs",
"phpcbf",
"CodeSniffer.conf"
]
}
],
"compactors": "KevinGH\\Box\\Compactor\\Php",
Expand Down
1 change: 1 addition & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ The format of this change log follows the advice given at [Keep a CHANGELOG](htt
## [Unreleased]
### Fixed
- Fix the `mustache` command to work from within the PHAR archive.
- Fix the `phpcs` and `phpcbf` commands to work from within the PHAR archive.

## [4.1.3] - 2023-09-08
### Changed
Expand Down
30 changes: 27 additions & 3 deletions src/Command/CodeCheckerCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,23 @@ protected function execute(InputInterface $input, OutputInterface $output): int
return $this->outputSkip($output);
}

$cmd = [
'php', __DIR__ . '/../../vendor/squizlabs/php_codesniffer/bin/phpcs',
$filesystem = new Filesystem();
$pathToPHPCS = __DIR__ . '/../../vendor/squizlabs/php_codesniffer/bin/phpcs';
$pathToConf = __DIR__ . '/../../vendor/squizlabs/php_codesniffer/CodeSniffer.conf';
$basicCMD = ['php', $pathToPHPCS];
// If we are running phpcs within a PHAR, the command is different, and we need also to copy the .conf file.
// @codeCoverageIgnoreStart
// (This is not executed when running tests, only when within a PHAR)
if (\Phar::running() !== '') {
// Invoke phpcs from the PHAR (via include, own params after --).
$basicCMD = ['php', '-r', 'include "' . $pathToPHPCS . '";', '--'];
// Copy the .conf file to the directory where the PHAR is running. That way phpcs will find it.
$targetPathToConf = dirname(\Phar::running(false)) . '/CodeSniffer.conf';
$filesystem->copy($pathToConf, $targetPathToConf, true);
}
// @codeCoverageIgnoreEnd

$cmd = array_merge($basicCMD, [
'--standard=' . ($input->getOption('standard') ?: 'moodle'),
'--extensions=php',
'-p',
Expand All @@ -73,7 +88,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
'--report-full',
'--report-width=132',
'--encoding=utf-8',
];
]);

// If we aren't using the max-warnings option, then we can forget about warnings and tell phpcs
// to ignore them for exit-code purposes (still they will be reported in the output).
Expand All @@ -98,6 +113,15 @@ protected function execute(InputInterface $input, OutputInterface $output): int

$process = $this->execute->passThroughProcess(new Process($cmd, $this->plugin->directory, null, null, null));

// If we are running phpcs within a PHAR, we need to remove the previously copied conf file.
// @codeCoverageIgnoreStart
// (This is not executed when running tests, only when within a PHAR)
if (\Phar::running() !== '') {
$targetPathToConf = dirname(\Phar::running(false)) . '/CodeSniffer.conf';
$filesystem->remove($targetPathToConf);
}
// @codeCoverageIgnoreEnd

// If we aren't using the max-warnings option, process exit code is enough for us.
if ($input->getOption('max-warnings') < 0) {
return $process->isSuccessful() ? 0 : 1;
Expand Down
31 changes: 28 additions & 3 deletions src/Command/CodeFixerCommand.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Filesystem\Filesystem;
use Symfony\Component\Finder\Finder;
use Symfony\Component\Process\Process;

Expand Down Expand Up @@ -42,8 +43,23 @@ protected function execute(InputInterface $input, OutputInterface $output): int
return $this->outputSkip($output);
}

$cmd = [
'php', __DIR__ . '/../../vendor/squizlabs/php_codesniffer/bin/phpcbf',
$filesystem = new Filesystem();
$pathToPHPCBF = __DIR__ . '/../../vendor/squizlabs/php_codesniffer/bin/phpcbf';
$pathToConf = __DIR__ . '/../../vendor/squizlabs/php_codesniffer/CodeSniffer.conf';
$basicCMD = ['php', $pathToPHPCBF];
// If we are running phpcs within a PHAR, the command is different, and we need also to copy the .conf file.
// @codeCoverageIgnoreStart
// (This is not executed when running tests, only when within a PHAR)
if (\Phar::running() !== '') {
// Invoke phpcbf from the PHAR (via include, own params after --).
$basicCMD = ['php', '-r', 'include "' . $pathToPHPCBF . '";', '--'];
// Copy the .conf file to the directory where the PHAR is running. That way phpcbf will find it.
$targetPathToConf = dirname(\Phar::running(false)) . '/CodeSniffer.conf';
$filesystem->copy($pathToConf, $targetPathToConf, true);
}
// @codeCoverageIgnoreEnd

$cmd = array_merge($basicCMD, [
'--standard=' . ($input->getOption('standard') ?: 'moodle'),
'--extensions=php',
'-p',
Expand All @@ -54,7 +70,7 @@ protected function execute(InputInterface $input, OutputInterface $output): int
'--report-full',
'--report-width=132',
'--encoding=utf-8',
];
]);

// Add the files to process.
foreach ($files as $file) {
Expand All @@ -63,6 +79,15 @@ protected function execute(InputInterface $input, OutputInterface $output): int

$this->execute->passThroughProcess(new Process($cmd, $this->plugin->directory, null, null, null));

// If we are running phpcbf within a PHAR, we need to remove the previously copied conf file.
// @codeCoverageIgnoreStart
// (This is not executed when running tests, only when within a PHAR)
if (\Phar::running() !== '') {
$targetPathToConf = dirname(\Phar::running(false)) . '/CodeSniffer.conf';
$filesystem->remove($targetPathToConf);
}
// @codeCoverageIgnoreEnd

return 0;
}
}

0 comments on commit 9aeb6ad

Please sign in to comment.