From b1d24fbdb7d1cc948c946295035dad6df550fb7e Mon Sep 17 00:00:00 2001 From: Alexandre Alapetite Date: Fri, 27 Dec 2024 12:12:49 +0100 Subject: PHPStan 2.0 (#7131) * PHPStan 2.0 fix https://github.com/FreshRSS/FreshRSS/issues/6989 https://github.com/phpstan/phpstan/releases/tag/2.0.0 https://github.com/phpstan/phpstan/blob/2.0.x/UPGRADING.md * More * More * Done * fix i18n CLI * Restore a PHPStan Next test For work towards PHPStan Level 10 * 4 more on Level 10 * fix getTagsForEntry * API at Level 10 * More Level 10 * Finish Minz at Level 10 * Finish CLI at Level 10 * Finish Controllers at Level 10 * More Level 10 * More * Pass bleedingEdge * Clean PHPStan options and add TODOs * Level 10 for main config * More * Consitency array vs. list * Sanitize themes get_infos * Simplify TagDAO->getTagsForEntries() * Finish reportAnyTypeWideningInVarTag * Prepare checkBenevolentUnionTypes and checkImplicitMixed * Fixes * Refix * Another fix * Casing of __METHOD__ constant --- cli/i18n/I18nFile.php | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'cli/i18n/I18nFile.php') diff --git a/cli/i18n/I18nFile.php b/cli/i18n/I18nFile.php index 5d310d6bf..6771dfbff 100644 --- a/cli/i18n/I18nFile.php +++ b/cli/i18n/I18nFile.php @@ -4,6 +4,23 @@ declare(strict_types=1); require_once __DIR__ . '/I18nValue.php'; class I18nFile { + + /** + * @param array $array + * @phpstan-assert-if-true array> $array + */ + public static function is_array_recursive_string(array $array): bool { + foreach ($array as $key => $value) { + if (!is_string($key)) { + return false; + } + if (!is_string($value) && !(is_array($value) && self::is_array_recursive_string($value))) { + return false; + } + } + return true; + } + /** * @return array>> */ @@ -45,7 +62,7 @@ class I18nFile { /** * Process the content of an i18n file - * @return array> + * @return array> */ private function process(string $filename): array { $fileContent = file_get_contents($filename) ?: []; @@ -71,7 +88,7 @@ class I18nFile { die(1); } - if (is_array($content)) { + if (is_array($content) && self::is_array_recursive_string($content)) { return $content; } @@ -81,7 +98,7 @@ class I18nFile { /** * Flatten an array of translation * - * @param array> $translation + * @param array|mixed> $translation * @return array */ private function flatten(array $translation, string $prefix = ''): array { @@ -92,9 +109,9 @@ class I18nFile { } foreach ($translation as $key => $value) { - if (is_array($value)) { + if (is_array($value) && is_array_keys_string($value)) { $a += $this->flatten($value, $prefix . $key); - } else { + } elseif (is_string($value) || $value instanceof I18nValue) { $a[$prefix . $key] = new I18nValue($value); } } -- cgit v1.2.3