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']);
}
}