3 declare(strict_types = 1);
17 require __DIR__ .
'/../../vendor/autoload.php';
19 if (PHP_SAPI !==
'cli') {
20 die(
'Script must be called from command line.' . chr(10));
34 private $invalidRestFiles = [];
39 private $validRestFiles = [];
44 private $existingRestFiles = [];
46 public function check():
int
50 $finder =
new Symfony\Component\Finder\Finder();
51 $matcherConfigurationFiles =
$finder->files()
52 ->in(__DIR__ .
'/../../typo3/sysext/install/Configuration/ExtensionScanner/Php');
54 foreach ($matcherConfigurationFiles as $matcherConfigurationFile) {
56 $matcherConfigurations = require $matcherConfigurationFile->getPathName();
57 foreach ($matcherConfigurations as $matcherConfiguration) {
58 if (!isset($matcherConfiguration[
'restFiles'])) {
60 foreach ($matcherConfiguration as $nestedMatcherConfiguration) {
61 $this->
checkRstFiles($nestedMatcherConfiguration, $matcherConfigurationFile);
64 $this->
checkRstFiles($matcherConfiguration, $matcherConfigurationFile);
69 if (empty($this->invalidRestFiles)) {
72 echo
"ReST files references in extension scanner configuration that could not be found:\n";
73 foreach ($this->invalidRestFiles as $invalid) {
75 " - '%s' in file '%s'\n",
76 $invalid[
'invalidFile'],
77 $invalid[
'configurationFile']
86 $finder =
new Symfony\Component\Finder\Finder();
89 ->notName([
'Changelog-*.rst',
'Index.rst',
'Master.rst'])
90 ->in(__DIR__ .
'/../../typo3/sysext/core/Documentation/Changelog');
91 $fileNames = array_map(
92 function (SplFileInfo $file) {
93 return $file->getFilename();
98 $fileNames = array_values($fileNames);
100 return array_count_values($fileNames);
103 private function checkRstFiles($matcherConfiguration, $matcherConfigurationFile): void
105 if (!is_array($matcherConfiguration[
'restFiles'] ??
null)) {
106 throw new \InvalidArgumentException(sprintf(
107 'Configuration has no `restFiles` section defined in %s',
108 $matcherConfigurationFile
111 foreach ($matcherConfiguration[
'restFiles'] as $restFile) {
112 if (in_array($restFile, $this->validRestFiles,
true)) {
116 if (($this->existingRestFiles[$restFile] ?? 0) === 1) {
117 $this->validRestFiles[] = $restFile;
119 $this->invalidRestFiles[] = [
120 'configurationFile' => $matcherConfigurationFile->getPathName(),
121 'invalidFile' => $restFile,