From f3a8cd5ce6e56e474d5f253a74565548ce355ccf Mon Sep 17 00:00:00 2001 From: Christian Schiffler Date: Mon, 29 Apr 2024 15:19:54 +0200 Subject: [PATCH] Fix issues detected by psalm --- src/ContaoDictionaryProvider.php | 2 +- .../AbstractSerializingCompoundExtractor.php | 8 ++++++-- src/Extractor/ArrayExtractor.php | 17 ++++++++++++++--- src/Extractor/TableExtractor.php | 2 +- .../Terminal42ChangeLanguage/ContaoDatabase.php | 3 ++- src/TranslationValue.php | 4 ++-- 6 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/ContaoDictionaryProvider.php b/src/ContaoDictionaryProvider.php index 83d7c5a..9f00655 100644 --- a/src/ContaoDictionaryProvider.php +++ b/src/ContaoDictionaryProvider.php @@ -66,7 +66,7 @@ public function __construct( $this->extractorFactory = $extractorFactory; $this->mapBuilder = $mapBuilder; - if (empty($dictionaryMeta)) { + if ([] === $dictionaryMeta || null === $dictionaryMeta) { $dictionaryMeta = [ 'tl_page', 'tl_article', diff --git a/src/Extractor/AbstractSerializingCompoundExtractor.php b/src/Extractor/AbstractSerializingCompoundExtractor.php index fe636ed..4444a9c 100644 --- a/src/Extractor/AbstractSerializingCompoundExtractor.php +++ b/src/Extractor/AbstractSerializingCompoundExtractor.php @@ -25,7 +25,7 @@ abstract class AbstractSerializingCompoundExtractor implements MultiStringExtrac * * @var array */ - private $extractors = []; + private array $extractors = []; /** * @param string $colName The column name. @@ -144,7 +144,11 @@ public function set(string $path, array &$row, ?string $value): void switch (true) { case $extractor instanceof MultiStringExtractorInterface: - $extractor->set($chunks[1], $content, $value); + $subKey = ($chunks[1] ?? ''); + if ('' === $subKey) { + throw new InvalidArgumentException('Invalid path value'); + } + $extractor->set($subKey, $content, $value); break; case $extractor instanceof StringExtractorInterface: if (1 < count($chunks)) { diff --git a/src/Extractor/ArrayExtractor.php b/src/Extractor/ArrayExtractor.php index 5a3a31f..003d7bd 100644 --- a/src/Extractor/ArrayExtractor.php +++ b/src/Extractor/ArrayExtractor.php @@ -9,10 +9,12 @@ use function array_key_exists; use function array_slice; +use function assert; use function explode; use function get_class; use function implode; use function is_array; +use function is_string; /** * This extracts numerical indexed arrays of values. @@ -100,12 +102,17 @@ public function get(string $path, array $row): ?string /** @var mixed $content */ $content = $arrayContent[$chunks[0]]; $this->ensureArray($this->colName . '.' . $chunks[0], $content); - - $extractor = $this->getExtractor($chunks[1]); + $extractorName = $chunks[1] ?? null; + assert(is_string($extractorName)); + $extractor = $this->getExtractor($extractorName); switch (true) { case $extractor instanceof MultiStringExtractorInterface: - return $extractor->get($chunks[2], $content); + $subKey = ($chunks[2] ?? ''); + if ('' === $subKey) { + throw new InvalidArgumentException('Invalid path value'); + } + return $extractor->get($subKey, $content); case $extractor instanceof StringExtractorInterface: return $extractor->get($content); default: @@ -114,6 +121,10 @@ public function get(string $path, array $row): ?string throw new InvalidArgumentException('Unknown extractor type ' . get_class($extractor)); } + /** + * @psalm-suppress UnsupportedPropertyReferenceUsage + * @psalm-suppress UnsupportedReferenceUsage + */ public function set(string $path, array &$row, ?string $value): void { if (!$this->supports($row)) { diff --git a/src/Extractor/TableExtractor.php b/src/Extractor/TableExtractor.php index 0fbe85b..dad617a 100644 --- a/src/Extractor/TableExtractor.php +++ b/src/Extractor/TableExtractor.php @@ -61,7 +61,7 @@ public function get(string $path, array $row): ?string } [$rowIndex, $colIndex] = $this->extractPath($path); - if ($value = ($content[$rowIndex][$colIndex] ?? null)) { + if ((bool) ($value = ($content[$rowIndex][$colIndex] ?? null))) { return $value; } diff --git a/src/Mapping/Terminal42ChangeLanguage/ContaoDatabase.php b/src/Mapping/Terminal42ChangeLanguage/ContaoDatabase.php index fcc4f8b..16ca7e1 100644 --- a/src/Mapping/Terminal42ChangeLanguage/ContaoDatabase.php +++ b/src/Mapping/Terminal42ChangeLanguage/ContaoDatabase.php @@ -4,6 +4,7 @@ namespace CyberSpectrum\I18N\Contao\Mapping\Terminal42ChangeLanguage; +use Doctrine\DBAL\ArrayParameterType; use Doctrine\DBAL\Connection; use Doctrine\DBAL\Query\QueryBuilder; use Doctrine\DBAL\Result; @@ -67,7 +68,7 @@ public function getPagesByPidList(array $pidList): array ->select('id', 'pid', 'languageMain', 'type') ->from('tl_page') ->where('pid IN (:lookupQueue)') - ->setParameter('lookupQueue', $pidList, Connection::PARAM_INT_ARRAY) + ->setParameter('lookupQueue', $pidList, ArrayParameterType::INTEGER) ->orderBy('sorting')); $result = []; while ($row = $rows->fetchAssociative()) { diff --git a/src/TranslationValue.php b/src/TranslationValue.php index c099778..4b70e4d 100644 --- a/src/TranslationValue.php +++ b/src/TranslationValue.php @@ -71,12 +71,12 @@ public function getTarget(): ?string public function isSourceEmpty(): bool { - return empty($this->getSource()); + return !(bool) $this->getSource(); } public function isTargetEmpty(): bool { - return empty($this->getTarget()); + return !(bool) $this->getTarget(); } /**