refactor: fix all 105 PHPStan 2 strict type findings across core and modules
Resolve all non-false-positive PHPStan 2 findings, reducing the baseline from 486 to 382 entries (only unused-public false positives remain). Categories fixed: - Remove 39 redundant type checks (is_string, is_array, is_object, method_exists) - Remove 12 no-op array_values() on already-sequential lists - Simplify 13 null-coalesce on guaranteed offsets - Remove 8 always-true instanceof checks - Replace 12 redundant test assertions (assertTrue(true) → addToAssertionCount) - Simplify 6 unnecessary nullsafe operators (?-> → ->) - Fix 6 always-true !== '' comparisons - Fix remaining: unset.offset, return.unusedType, staticMethod narrowing 53 files changed across core/, modules/, pages/, and tests/. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -145,11 +145,7 @@ class Guard
|
||||
if (!is_callable(self::$authorizationServiceResolver)) {
|
||||
throw new \RuntimeException('Guard is not configured for dependency: ' . AuthorizationService::class);
|
||||
}
|
||||
$service = (self::$authorizationServiceResolver)();
|
||||
if (!$service instanceof AuthorizationService) {
|
||||
throw new \RuntimeException('Guard resolver returned invalid dependency: ' . AuthorizationService::class);
|
||||
}
|
||||
return $service;
|
||||
return (self::$authorizationServiceResolver)();
|
||||
}
|
||||
|
||||
private static function authService(): AuthService
|
||||
@@ -157,11 +153,7 @@ class Guard
|
||||
if (!is_callable(self::$authServiceResolver)) {
|
||||
throw new \RuntimeException('Guard is not configured for dependency: ' . AuthService::class);
|
||||
}
|
||||
$service = (self::$authServiceResolver)();
|
||||
if (!$service instanceof AuthService) {
|
||||
throw new \RuntimeException('Guard resolver returned invalid dependency: ' . AuthService::class);
|
||||
}
|
||||
return $service;
|
||||
return (self::$authServiceResolver)();
|
||||
}
|
||||
|
||||
private static function tenantService(): TenantService
|
||||
@@ -169,11 +161,7 @@ class Guard
|
||||
if (!is_callable(self::$tenantServiceResolver)) {
|
||||
throw new \RuntimeException('Guard is not configured for dependency: ' . TenantService::class);
|
||||
}
|
||||
$service = (self::$tenantServiceResolver)();
|
||||
if (!$service instanceof TenantService) {
|
||||
throw new \RuntimeException('Guard resolver returned invalid dependency: ' . TenantService::class);
|
||||
}
|
||||
return $service;
|
||||
return (self::$tenantServiceResolver)();
|
||||
}
|
||||
|
||||
private static function isAllowedByAbility(int $userId, string $ability, array $context = []): bool
|
||||
|
||||
@@ -163,9 +163,6 @@ class SearchConfig
|
||||
|
||||
try {
|
||||
$registry = (self::$moduleRegistryResolver)();
|
||||
if (!$registry instanceof ModuleRegistry) {
|
||||
return self::$moduleProviders;
|
||||
}
|
||||
foreach ($registry->getSearchResources() as $providerClass) {
|
||||
$provider = self::resolveModuleProvider($providerClass);
|
||||
if ($provider instanceof SearchResourceProvider) {
|
||||
|
||||
@@ -487,11 +487,6 @@ function appBuildLayoutNavContext(array $layoutAuth, array $session, array $quer
|
||||
$provider = \MintyPHP\App\Module\ModuleClassResolver::resolve($container, $providerClass);
|
||||
if ($provider instanceof \MintyPHP\App\Module\Contracts\LayoutContextProvider) {
|
||||
$providerData = $provider->provide($session, $container);
|
||||
if (!is_array($providerData)) {
|
||||
throw new \RuntimeException(
|
||||
"Layout context provider '{$providerClass}' must return an array."
|
||||
);
|
||||
}
|
||||
$layoutNav = appMergeLayoutNavProviderData($layoutNav, $providerData, $providerClass);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -206,9 +206,6 @@ function gridSplitToolbarSchema(array $toolbarSchema, array $searchKeys = []): a
|
||||
$search = [];
|
||||
$drawer = [];
|
||||
foreach ($toolbarSchema as $field) {
|
||||
if (!is_array($field)) {
|
||||
continue;
|
||||
}
|
||||
$key = trim((string) ($field['key'] ?? ''));
|
||||
$isSearch = (bool) ($field['search'] ?? false) || ($key !== '' && isset($searchKeyMap[$key]));
|
||||
if ($isSearch) {
|
||||
@@ -231,9 +228,6 @@ function gridSchemaByKey(array $toolbarSchema): array
|
||||
{
|
||||
$schemaByKey = [];
|
||||
foreach ($toolbarSchema as $field) {
|
||||
if (!is_array($field)) {
|
||||
continue;
|
||||
}
|
||||
$key = trim((string) ($field['key'] ?? ''));
|
||||
if ($key === '') {
|
||||
continue;
|
||||
@@ -255,9 +249,6 @@ function gridBuildToolbarFilterState(array $toolbarSchema, array $filterState):
|
||||
{
|
||||
$state = [];
|
||||
foreach ($toolbarSchema as $field) {
|
||||
if (!is_array($field)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$key = trim((string) ($field['key'] ?? ''));
|
||||
if ($key === '') {
|
||||
@@ -347,9 +338,6 @@ function gridOptionMapFromItems(array $items): array
|
||||
{
|
||||
$map = [];
|
||||
foreach ($items as $item) {
|
||||
if (!is_array($item)) {
|
||||
continue;
|
||||
}
|
||||
$id = trim((string) ($item['id'] ?? ''));
|
||||
if ($id === '') {
|
||||
continue;
|
||||
@@ -370,9 +358,6 @@ function gridOptionMapFromAllowed(array $field): array
|
||||
{
|
||||
$map = [];
|
||||
foreach ((array) ($field['allowed'] ?? []) as $item) {
|
||||
if (!is_array($item)) {
|
||||
continue;
|
||||
}
|
||||
$id = trim((string) ($item['id'] ?? ''));
|
||||
if ($id === '') {
|
||||
continue;
|
||||
|
||||
@@ -101,9 +101,6 @@ function requestNormalizeSafeInternalTarget(string $target, int $maxDepth = 5):
|
||||
|
||||
$queryParams = [];
|
||||
parse_str((string) ($safeParts['query'] ?? ''), $queryParams);
|
||||
if (!is_array($queryParams)) {
|
||||
$queryParams = [];
|
||||
}
|
||||
$nestedReturnTarget = requestExtractNestedReturnValue($queryParams['return'] ?? null);
|
||||
unset($queryParams['return']);
|
||||
$query = http_build_query($queryParams);
|
||||
@@ -185,9 +182,6 @@ function requestPathWithReturnTarget(string $path, string $returnTarget = ''): s
|
||||
}
|
||||
$queryParams = [];
|
||||
parse_str((string) ($parts['query'] ?? ''), $queryParams);
|
||||
if (!is_array($queryParams)) {
|
||||
$queryParams = [];
|
||||
}
|
||||
unset($queryParams['return']);
|
||||
$queryParams['return'] = $normalizedReturnTarget;
|
||||
$query = http_build_query($queryParams);
|
||||
|
||||
@@ -146,9 +146,6 @@ function selectFilter(
|
||||
function renderGridFilterToolbar(array $schema, array $active = [], array $optionSets = []): void
|
||||
{
|
||||
foreach ($schema as $field) {
|
||||
if (!is_array($field)) {
|
||||
continue;
|
||||
}
|
||||
if (($field['render'] ?? true) === false) {
|
||||
continue;
|
||||
}
|
||||
@@ -463,10 +460,10 @@ function appStylePathsForGroups(array $groupNames): array
|
||||
$registry = app(\MintyPHP\App\Module\ModuleRegistry::class);
|
||||
if ($registry instanceof \MintyPHP\App\Module\ModuleRegistry) {
|
||||
foreach ($registry->getAssetGroups() as $groupName => $paths) {
|
||||
if (!is_string($groupName) || $groupName === '') {
|
||||
if ($groupName === '') {
|
||||
continue;
|
||||
}
|
||||
if (!is_array($paths) || isset($groups[$groupName])) {
|
||||
if (isset($groups[$groupName])) {
|
||||
continue;
|
||||
}
|
||||
$groups[$groupName] = $paths;
|
||||
|
||||
Reference in New Issue
Block a user