From a82b8e22a8e540debce77cc53e659d5ebd0612f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maur=C3=ADcio=20Meneghini=20Fauth?= Date: Tue, 15 Jul 2025 18:11:24 -0300 Subject: [PATCH] Add static analysis stub for PSR ContainerInterface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: MaurĂ­cio Meneghini Fauth --- .gitattributes | 1 + .phpstorm.meta.php | 5 +++++ app/services.php | 13 ++++++++----- phpstan.neon.dist | 1 + psalm.xml | 1 + src/Application.php | 6 +----- src/Controllers/Export/ExportController.php | 1 - src/Controllers/Table/IndexesController.php | 1 - src/Controllers/View/CreateController.php | 1 - src/Display/Results.php | 1 - src/Header.php | 1 - src/Http/Handler/QueueRequestHandler.php | 2 -- src/Http/Middleware/Authentication.php | 4 +--- .../Middleware/LanguageAndThemeCookieSaving.php | 1 - src/Http/Middleware/MinimumCommonRedirection.php | 1 - src/Http/Middleware/SetupPageRedirection.php | 1 - src/Http/Middleware/ThemeInitialization.php | 1 - src/Http/Middleware/UrlRedirection.php | 1 - src/Http/Middleware/UserPreferencesLoading.php | 1 - src/Navigation/Navigation.php | 1 - src/Plugins.php | 14 ++++++++------ src/ResponseRenderer.php | 1 - src/Routing/Routing.php | 7 ++----- tests/stubs/psr.stub | 13 +++++++++++++ tests/unit/ApplicationTest.php | 1 - .../Controllers/Export/ExportControllerTest.php | 6 ++---- 26 files changed, 43 insertions(+), 44 deletions(-) create mode 100644 .phpstorm.meta.php create mode 100644 tests/stubs/psr.stub diff --git a/.gitattributes b/.gitattributes index f6ab619e88..f5ca857d11 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,6 +3,7 @@ .gitattributes export-ignore .gitignore export-ignore .github export-ignore +.phpstorm.meta.php export-ignore .scrutinizer.yml export-ignore .jshintrc export-ignore .stylelintrc.json export-ignore diff --git a/.phpstorm.meta.php b/.phpstorm.meta.php new file mode 100644 index 0000000000..4060ecee36 --- /dev/null +++ b/.phpstorm.meta.php @@ -0,0 +1,5 @@ + ['@http_request', '@relation', '@template', '@config'], ], 'events' => ['class' => Events::class, 'arguments' => ['@dbi']], - 'export' => ['class' => Export::class, 'arguments' => ['@dbi']], + Export::class => ['class' => Export::class, 'arguments' => ['@dbi']], + 'export' => Export::class, 'export_options' => [ 'class' => Options::class, 'arguments' => ['@relation', '@export_template_model'], @@ -239,7 +240,8 @@ return [ 'arguments' => ['$dbi' => '@dbi'], ], AuthenticationPluginFactory::class => ['class' => AuthenticationPluginFactory::class], - 'relation' => ['class' => Relation::class, 'arguments' => ['$dbi' => '@dbi', '$config' => '@config']], + Relation::class => ['class' => Relation::class, 'arguments' => ['$dbi' => '@dbi', '$config' => '@config']], + 'relation' => Relation::class, 'relation_cleanup' => ['class' => RelationCleanup::class, 'arguments' => ['@dbi', '@relation']], 'replication' => ['class' => Replication::class, 'arguments' => ['$dbi' => '@dbi']], 'replication_gui' => [ @@ -293,7 +295,8 @@ return [ ], 'table_maintenance' => ['class' => PhpMyAdmin\Table\Maintenance::class, 'arguments' => ['$dbi' => '@dbi']], 'table_search' => ['class' => Search::class, 'arguments' => ['$dbi' => '@dbi']], - 'template' => ['class' => Template::class, 'arguments' => ['$config' => '@config']], + Template::class => ['class' => Template::class, 'arguments' => ['$config' => '@config']], + 'template' => Template::class, ThemeManager::class => ['class' => ThemeManager::class], 'tracking' => [ 'class' => Tracking::class, @@ -309,8 +312,8 @@ return [ 'class' => TrackingChecker::class, 'arguments' => ['$dbi' => '@dbi', '$relation' => '@relation'], ], - 'transformations' => ['class' => Transformations::class, 'arguments' => ['@dbi', '@relation']], - Transformations::class => 'transformations', + Transformations::class => ['class' => Transformations::class, 'arguments' => ['@dbi', '@relation']], + 'transformations' => Transformations::class, 'triggers' => ['class' => Triggers::class, 'arguments' => ['@dbi']], 'user_password' => [ 'class' => UserPassword::class, diff --git a/phpstan.neon.dist b/phpstan.neon.dist index 77840d8aa4..34262df8d2 100644 --- a/phpstan.neon.dist +++ b/phpstan.neon.dist @@ -13,6 +13,7 @@ parameters: bootstrapFiles: - tests/phpstan-constants.php stubFiles: + - tests/stubs/psr.stub - tests/stubs/uploadprogress.stub excludePaths: - app/cache/* diff --git a/psalm.xml b/psalm.xml index 717b1adfda..46c5e6fd58 100644 --- a/psalm.xml +++ b/psalm.xml @@ -34,6 +34,7 @@ + diff --git a/src/Application.php b/src/Application.php index c1786276cd..ca99d9cd06 100644 --- a/src/Application.php +++ b/src/Application.php @@ -51,7 +51,6 @@ use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; use Throwable; -use function assert; use function sprintf; readonly class Application @@ -62,10 +61,7 @@ readonly class Application public static function init(): self { - $application = ContainerBuilder::getContainer()->get(self::class); - assert($application instanceof self); - - return $application; + return ContainerBuilder::getContainer()->get(self::class); } public function run(bool $isSetupPage = false): void diff --git a/src/Controllers/Export/ExportController.php b/src/Controllers/Export/ExportController.php index 266d71aed6..d14394203d 100644 --- a/src/Controllers/Export/ExportController.php +++ b/src/Controllers/Export/ExportController.php @@ -289,7 +289,6 @@ final readonly class ExportController implements InvocableController Current::$message = Message::error( __('No tables found in database.'), ); - /** @var DatabaseExportController $controller */ $controller = ContainerBuilder::getContainer()->get(DatabaseExportController::class); return $controller($request); diff --git a/src/Controllers/Table/IndexesController.php b/src/Controllers/Table/IndexesController.php index d238826dd5..9aa0b3d507 100644 --- a/src/Controllers/Table/IndexesController.php +++ b/src/Controllers/Table/IndexesController.php @@ -159,7 +159,6 @@ final readonly class IndexesController implements InvocableController return $this->response->response(); } - /** @var StructureController $controller */ $controller = ContainerBuilder::getContainer()->get(StructureController::class); return $controller($request); diff --git a/src/Controllers/View/CreateController.php b/src/Controllers/View/CreateController.php index 7bca872cb0..cbed23fccd 100644 --- a/src/Controllers/View/CreateController.php +++ b/src/Controllers/View/CreateController.php @@ -219,7 +219,6 @@ final class CreateController implements InvocableController if ($ajaxdialog) { Current::$message = Message::success(); - /** @var StructureController $controller */ $controller = ContainerBuilder::getContainer()->get(StructureController::class); return $controller($request); diff --git a/src/Display/Results.php b/src/Display/Results.php index ac686d25ac..0db05567c2 100644 --- a/src/Display/Results.php +++ b/src/Display/Results.php @@ -1117,7 +1117,6 @@ class Results $urlParamsFullText['pftext'] = self::DISPLAY_FULL_TEXT; } - /** @var ThemeManager $themeManager */ $themeManager = ContainerBuilder::getContainer()->get(ThemeManager::class); $tmpImage = '