Files
PhpSpreadsheet/bin/check-phpdoc-types
oleibman 3eedf9e2f0 Better Typing in Test Members
Change "mixed" declarations to more accurate types in test members; in particular, change those that would be flagged if we were to run Phpstan at level 9 (we currently run level 8). I may or may not follow up with source code (over 700 level-9 problems remain for src), but, as with strict typing, there is no reason to avoid the effort for test members.

It was necessary to update some doc blocks in src to accommodate this change. However, no executable code is touched.
2024-01-05 01:43:50 -08:00

30 lines
1.1 KiB
PHP
Executable File

#!/usr/bin/env php
<?php
/**
* This will check that the "current patch" does not add or modify lines that contain types as PHPDoc when we can express
* them with PHP native types. The "current patch" is either the file about to be committed, the non-committed file, or
* the latest commit.
*
* This will help us slowly migrate away from PHPDoc typing to PHP native typing.
*/
function checkPhpDocTypes(): void
{
$content = shell_exec('git diff --cached') ?? shell_exec('git diff') ?? shell_exec('git show HEAD');
preg_match_all('~^\+ +\* @(param|var) (mixed|string|int|float|bool|null|array|\?|\|)+( \$\w+)?$~m', "$content", $parameters);
preg_match_all('~^\+ +\* @return (mixed|string|int|float|bool|null|array|void|\?|\|)+$~m', "$content", $returns);
$errors = [
...$parameters[0],
...$returns[0],
];
if ($errors) {
echo 'PHP native types must be used instead of PHPDoc types (without comments), for the following lines:' . PHP_EOL . PHP_EOL;
echo implode(PHP_EOL, $errors) . PHP_EOL;
exit(1);
}
}
checkPhpDocTypes();