Skip to content

Commit b50a812

Browse files
committed
Runner::checkRequirements(): check all required extensions
This adjusts the `Runner::checkRequirements()` method to check all PHP extension requirements as listed in the `composer.json` `require` section. This ensures that requirements are also properly checked for PHAR, PEAR and git-clone based installs. Fixes 2369
1 parent 49a3e26 commit b50a812

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

src/Runner.php

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,34 @@ public function checkRequirements()
243243
throw new DeepExitException($error, 3);
244244
}
245245

246-
if (extension_loaded('tokenizer') === false) {
247-
$error = 'ERROR: PHP_CodeSniffer requires the tokenizer extension to be enabled.'.PHP_EOL;
246+
$requiredExtensions = [
247+
'tokenizer',
248+
'xmlwriter',
249+
'SimpleXML',
250+
];
251+
$missingExtensions = [];
252+
253+
foreach ($requiredExtensions as $extension) {
254+
if (extension_loaded($extension) === false) {
255+
$missingExtensions[] = $extension;
256+
}
257+
}
258+
259+
if (empty($missingExtensions) === false) {
260+
$last = array_pop($requiredExtensions);
261+
$required = implode(', ', $requiredExtensions);
262+
$required .= ' and '.$last;
263+
264+
if (count($missingExtensions) === 1) {
265+
$missing = $missingExtensions[0];
266+
} else {
267+
$last = array_pop($missingExtensions);
268+
$missing = implode(', ', $missingExtensions);
269+
$missing .= ' and '.$last;
270+
}
271+
272+
$error = 'ERROR: PHP_CodeSniffer requires the %s extensions to be enabled. Please enable %s.'.PHP_EOL;
273+
$error = sprintf($error, $required, $missing);
248274
throw new DeepExitException($error, 3);
249275
}
250276

0 commit comments

Comments
 (0)