From e12a39957be20163c504fcd41250ce7fc8b793dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Tue, 23 Jan 2024 21:19:41 -0300 Subject: [PATCH] Refactor Loader::listLocales() to make it stricter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MaurĂ­cio Meneghini Fauth --- phpstan-baseline.neon | 25 ------------------------- psalm-baseline.xml | 11 +---------- src/Loader.php | 33 +++++++++++++++++---------------- 3 files changed, 18 insertions(+), 51 deletions(-) diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 3364094..4ed289e 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -15,11 +15,6 @@ parameters: count: 1 path: src/Cache/ApcuCache.php - - - message: "#^Call to function in_array\\(\\) requires parameter \\#3 to be set\\.$#" - count: 1 - path: src/Loader.php - - message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#" count: 1 @@ -30,26 +25,6 @@ parameters: count: 1 path: src/Loader.php - - - message: "#^Only booleans are allowed in an elseif condition, string\\|null given\\.$#" - count: 2 - path: src/Loader.php - - - - message: "#^Only booleans are allowed in an if condition, int\\|false given\\.$#" - count: 1 - path: src/Loader.php - - - - message: "#^Only booleans are allowed in an if condition, string given\\.$#" - count: 1 - path: src/Loader.php - - - - message: "#^Only booleans are allowed in an if condition, string\\|null given\\.$#" - count: 5 - path: src/Loader.php - - message: "#^Casting to int something that's already int\\.$#" count: 1 diff --git a/psalm-baseline.xml b/psalm-baseline.xml index 63de50f..c7e25bd 100644 --- a/psalm-baseline.xml +++ b/psalm-baseline.xml @@ -1,5 +1,5 @@ - + $cached @@ -18,15 +18,6 @@ - - $lang - $lang - $lang - $lang - $lang - $lang - $lang - diff --git a/src/Loader.php b/src/Loader.php index 6a2935a..9c05525 100644 --- a/src/Loader.php +++ b/src/Loader.php @@ -105,12 +105,13 @@ public static function loadFunctions(): void * @param string $locale Locale code * * @return string[] list of locales to try for any POSIX-style locale specification + * @psalm-return list */ public static function listLocales(string $locale): array { $localeNames = []; - if ($locale) { + if ($locale !== '') { if ( preg_match( '/^(?P[a-z]{2,3})' // language code @@ -119,44 +120,44 @@ public static function listLocales(string $locale): array . '(?:@(?P[-A-Za-z0-9_]+))?$/', // @ modifier $locale, $matches, - ) + ) === 1 ) { - $lang = $matches['lang'] ?? null; - $country = $matches['country'] ?? null; - $charset = $matches['charset'] ?? null; - $modifier = $matches['modifier'] ?? null; - - if ($modifier) { - if ($country) { - if ($charset) { + $lang = $matches['lang'] ?? ''; + $country = $matches['country'] ?? ''; + $charset = $matches['charset'] ?? ''; + $modifier = $matches['modifier'] ?? ''; + + if ($modifier !== '') { + if ($country !== '') { + if ($charset !== '') { $localeNames[] = sprintf('%s_%s.%s@%s', $lang, $country, $charset, $modifier); } $localeNames[] = sprintf('%s_%s@%s', $lang, $country, $modifier); - } elseif ($charset) { + } elseif ($charset !== '') { $localeNames[] = sprintf('%s.%s@%s', $lang, $charset, $modifier); } $localeNames[] = sprintf('%s@%s', $lang, $modifier); } - if ($country) { - if ($charset) { + if ($country !== '') { + if ($charset !== '') { $localeNames[] = sprintf('%s_%s.%s', $lang, $country, $charset); } $localeNames[] = sprintf('%s_%s', $lang, $country); - } elseif ($charset) { + } elseif ($charset !== '') { $localeNames[] = sprintf('%s.%s', $lang, $charset); } - if ($lang !== null) { + if ($lang !== '') { $localeNames[] = $lang; } } // If the locale name doesn't match POSIX style, just include it as-is. - if (! in_array($locale, $localeNames)) { + if (! in_array($locale, $localeNames, true)) { $localeNames[] = $locale; } }