From b2d21bbeb6f0614a04a31a0ac31a0b68ed88cae6 Mon Sep 17 00:00:00 2001 From: Chemaclass Date: Sat, 26 Jun 2021 22:18:53 +0200 Subject: [PATCH] Upgrade psalm to level 1 --- psalm.xml | 10 +--------- src/CodeGenerator/CodeGeneratorConfig.php | 2 +- src/CodeGenerator/Domain/CommandArgumentsParser.php | 8 +++++++- src/Framework/ClassResolver/AbstractClassResolver.php | 8 ++++++-- src/Framework/Config.php | 9 ++++++++- src/Framework/Container/Container.php | 6 +++++- src/Framework/Container/Locator.php | 5 ++++- src/Framework/Exception/Backtrace.php | 6 ++++-- 8 files changed, 36 insertions(+), 18 deletions(-) diff --git a/psalm.xml b/psalm.xml index 18262164..32408861 100644 --- a/psalm.xml +++ b/psalm.xml @@ -1,6 +1,6 @@ - - - - - - - - diff --git a/src/CodeGenerator/CodeGeneratorConfig.php b/src/CodeGenerator/CodeGeneratorConfig.php index 41563bbb..0c7908ba 100644 --- a/src/CodeGenerator/CodeGeneratorConfig.php +++ b/src/CodeGenerator/CodeGeneratorConfig.php @@ -43,6 +43,6 @@ public function getComposerJsonContentAsArray(): array throw new LogicException('composer.json file not found but it is required'); } - return json_decode(file_get_contents($filename), true); + return (array)json_decode(file_get_contents($filename), true); } } diff --git a/src/CodeGenerator/Domain/CommandArgumentsParser.php b/src/CodeGenerator/Domain/CommandArgumentsParser.php index 3a8c4f24..8698f6d8 100644 --- a/src/CodeGenerator/Domain/CommandArgumentsParser.php +++ b/src/CodeGenerator/Domain/CommandArgumentsParser.php @@ -31,7 +31,11 @@ public function parse(string $desiredNamespace): CommandArguments throw CommandArgumentsException::noAutoloadPsr4Found(); } - $psr4 = $this->composerJson['autoload']['psr-4']; + /** @var array{psr-4: string[]} $composerAutoload */ + $composerAutoload = $this->composerJson['autoload']; + + /** @var string[] $psr4 */ + $psr4 = $composerAutoload['psr-4']; $allPsr4Combinations = $this->allPossiblePsr4Combinations($desiredNamespace); foreach ($allPsr4Combinations as $psr4Combination) { @@ -53,6 +57,8 @@ public function parse(string $desiredNamespace): CommandArguments * 'App/TestModule', * 'App', * ]. + * + * @return string[] */ private function allPossiblePsr4Combinations(string $desiredNamespace): array { diff --git a/src/Framework/ClassResolver/AbstractClassResolver.php b/src/Framework/ClassResolver/AbstractClassResolver.php index 1103c159..aac935f7 100644 --- a/src/Framework/ClassResolver/AbstractClassResolver.php +++ b/src/Framework/ClassResolver/AbstractClassResolver.php @@ -8,7 +8,7 @@ abstract class AbstractClassResolver { - /** @var array */ + /** @var array */ protected static array $cachedInstances = []; protected static ?ClassResolverFactory $classResolverFactory = null; @@ -20,7 +20,10 @@ abstract public function resolve(object $callerClass): ?object; abstract protected function getResolvableType(): string; - public function doResolve(object $callerClass): ?object + /** + * @return mixed|null + */ + public function doResolve(object $callerClass) { $this->setCallerObject($callerClass); $cacheKey = $this->getCacheKey(); @@ -91,6 +94,7 @@ public function getClassInfo(): ClassInfo private function createInstance(string $resolvedClassName) { if (class_exists($resolvedClassName)) { + /** @psalm-suppress MixedMethodCall */ return new $resolvedClassName(); } diff --git a/src/Framework/Config.php b/src/Framework/Config.php index 22b96f79..1e04c220 100644 --- a/src/Framework/Config.php +++ b/src/Framework/Config.php @@ -67,6 +67,7 @@ public static function init(): void foreach (self::scanAllConfigFiles() as $filename) { $fileNameOrDir = self::fullPath($filename); if (is_dir($fileNameOrDir)) { + /** @var array{0:string} $fileInfo */ foreach (self::createRecursiveIterator($fileNameOrDir) as $fileInfo) { if (self::isPhpFile($fileInfo[0])) { $configs[] = self::readConfigFromFile($fileInfo[0]); @@ -82,6 +83,9 @@ public static function init(): void self::$config = array_merge(...$configs); } + /** + * @return string[] + */ private static function scanAllConfigFiles(): array { $configDir = self::getApplicationRootDir() . '/config/'; @@ -89,10 +93,12 @@ private static function scanAllConfigFiles(): array throw new RuntimeException('"config" directory not found on application root dir'); } - return array_diff( + $paths = array_diff( scandir($configDir), ['..', '.', self::CONFIG_LOCAL_FILENAME] ); + + return array_map(static fn ($p) => (string)$p, $paths); } public static function getApplicationRootDir(): string @@ -131,6 +137,7 @@ private static function isPhpFile(string $path): bool private static function readConfigFromFile(string $file): array { if (file_exists($file)) { + /** @var array|null $content */ $content = include $file; return is_array($content) ? $content : []; } diff --git a/src/Framework/Container/Container.php b/src/Framework/Container/Container.php index af0cf452..cc53b0e0 100644 --- a/src/Framework/Container/Container.php +++ b/src/Framework/Container/Container.php @@ -52,8 +52,12 @@ public function get(string $id) } $rawService = $this->services[$id]; + /** @psalm-suppress InvalidFunctionCall */ - $resolvedService = $this->services[$id] = $rawService($this); + $this->services[$id] = $rawService($this); + + /** @var mixed $resolvedService */ + $resolvedService = $this->services[$id]; $this->raw[$id] = $rawService; return $resolvedService; diff --git a/src/Framework/Container/Locator.php b/src/Framework/Container/Locator.php index 44cf2582..5097e292 100644 --- a/src/Framework/Container/Locator.php +++ b/src/Framework/Container/Locator.php @@ -10,7 +10,7 @@ final class Locator private static ?Locator $instance = null; - /** @var mixed[] */ + /** @var array */ private static array $instanceCache = []; public static function getInstance(): self @@ -44,7 +44,9 @@ public function get(string $className) return self::$instanceCache[$concreteClass]; } + /** @var mixed $newInstance */ $newInstance = $this->newInstance($concreteClass); + /** @psalm-suppress MixedAssignment */ self::$instanceCache[$concreteClass] = $newInstance; return $newInstance; @@ -65,6 +67,7 @@ private function getConcreteClass(string $className): string private function newInstance(string $className) { if (class_exists($className)) { + /** @psalm-suppress MixedMethodCall */ return new $className(); } diff --git a/src/Framework/Exception/Backtrace.php b/src/Framework/Exception/Backtrace.php index aab211d3..effbbe2d 100644 --- a/src/Framework/Exception/Backtrace.php +++ b/src/Framework/Exception/Backtrace.php @@ -27,7 +27,7 @@ private function __construct() private function getTraceLine(array $backtrace): string { if (isset($backtrace['file'])) { - return $backtrace['file'] . ':' . $backtrace['line']; + return ((string)$backtrace['file']) . ':' . ((string)$backtrace['line']); } return $this->getTraceLineFromTestCase($backtrace); @@ -35,6 +35,8 @@ private function getTraceLine(array $backtrace): string private function getTraceLineFromTestCase(array $backtrace): string { - return $backtrace['class'] . $backtrace['type'] . $backtrace['function']; + return ((string)$backtrace['class']) + . ((string)$backtrace['type']) + . ((string)$backtrace['function']); } }