Remove '@' char from service arguments in services file

As only other services are used as arguments, there's no need for it.

Signed-off-by: Maurício Meneghini Fauth <mauricio@mfauth.net>
This commit is contained in:
Maurício Meneghini Fauth 2026-01-07 12:41:01 -03:00
parent 4f737ab8b0
commit b4e3ba8409
No known key found for this signature in database
GPG Key ID: 6A16FD38AFC89CC8
6 changed files with 744 additions and 757 deletions

View File

@ -70,74 +70,74 @@ return [
'services' => [
Advisor::class => [
'class' => Advisor::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . ExpressionLanguage::class],
'arguments' => [DatabaseInterface::class, ExpressionLanguage::class],
],
Application::class => ['class' => Application::class, 'arguments' => ['@' . ResponseFactory::class]],
Application::class => ['class' => Application::class, 'arguments' => [ResponseFactory::class]],
BrowseForeigners::class => [
'class' => BrowseForeigners::class,
'arguments' => ['@' . Template::class, '@' . Config::class, '@' . ThemeManager::class],
'arguments' => [Template::class, Config::class, ThemeManager::class],
],
Config::class => ['class' => Config::class, 'factory' => [Config::class, 'getInstance']],
Config\PageSettings::class => [
'class' => Config\PageSettings::class,
'arguments' => ['@' . UserPreferences::class],
'arguments' => [UserPreferences::class],
],
CentralColumns::class => ['class' => CentralColumns::class, 'arguments' => ['@' . DatabaseInterface::class]],
CreateAddField::class => ['class' => CreateAddField::class, 'arguments' => ['@' . DatabaseInterface::class]],
CentralColumns::class => ['class' => CentralColumns::class, 'arguments' => [DatabaseInterface::class]],
CreateAddField::class => ['class' => CreateAddField::class, 'arguments' => [DatabaseInterface::class]],
DatabaseInterface::class => [
'class' => DatabaseInterface::class,
'factory' => [DatabaseInterface::class, 'getInstance'],
'arguments' => ['@' . Config::class],
'arguments' => [Config::class],
],
DbTableExists::class => ['class' => DbTableExists::class, 'arguments' => ['@' . DatabaseInterface::class]],
DbTableExists::class => ['class' => DbTableExists::class, 'arguments' => [DatabaseInterface::class]],
Designer::class => [
'class' => Designer::class,
'arguments' => [
'@' . DatabaseInterface::class,
'@' . Relation::class,
'@' . Template::class,
'@' . Config::class,
DatabaseInterface::class,
Relation::class,
Template::class,
Config::class,
],
],
Common::class => [
'class' => Common::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Relation::class, '@' . Config::class],
'arguments' => [DatabaseInterface::class, Relation::class, Config::class],
],
ErrorHandler::class => ['class' => ErrorHandler::class, 'factory' => [ErrorHandler::class, 'getInstance']],
ErrorReport::class => [
'class' => ErrorReport::class,
'arguments' => [
'@' . HttpRequest::class,
'@' . Relation::class,
'@' . Template::class,
'@' . Config::class,
HttpRequest::class,
Relation::class,
Template::class,
Config::class,
],
],
Events::class => [
'class' => Events::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Config::class],
'arguments' => [DatabaseInterface::class, Config::class],
],
Export::class => [
'class' => Export::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . OutputHandler::class],
'arguments' => [DatabaseInterface::class, OutputHandler::class],
],
Options::class => [
'class' => Options::class,
'arguments' => ['@' . Relation::class, '@' . TemplateModel::class],
'arguments' => [Relation::class, TemplateModel::class],
],
TemplateModel::class => ['class' => TemplateModel::class, 'arguments' => ['@' . DatabaseInterface::class]],
TemplateModel::class => ['class' => TemplateModel::class, 'arguments' => [DatabaseInterface::class]],
ExpressionLanguage::class => ['class' => ExpressionLanguage::class],
FileListing::class => ['class' => FileListing::class],
FlashMessenger::class => ['class' => FlashMessenger::class],
Header::class => [
'class' => Header::class,
'arguments' => [
'@' . Template::class,
'@' . Console::class,
'@' . Config::class,
'@' . DatabaseInterface::class,
'@' . Relation::class,
'@' . UserPreferences::class,
Template::class,
Console::class,
Config::class,
DatabaseInterface::class,
Relation::class,
UserPreferences::class,
],
],
HttpRequest::class => ['class' => HttpRequest::class],
@ -146,54 +146,54 @@ return [
'factory' => [ResponseFactory::class, 'create'],
],
Import::class => ['class' => Import::class],
SimulateDml::class => ['class' => SimulateDml::class, 'arguments' => ['@' . DatabaseInterface::class]],
SimulateDml::class => ['class' => SimulateDml::class, 'arguments' => [DatabaseInterface::class]],
InsertEdit::class => [
'class' => InsertEdit::class,
'arguments' => [
'@' . DatabaseInterface::class,
'@' . Relation::class,
'@' . Transformations::class,
'@' . FileListing::class,
'@' . Template::class,
'@' . Config::class,
DatabaseInterface::class,
Relation::class,
Transformations::class,
FileListing::class,
Template::class,
Config::class,
],
],
Middleware\ErrorHandling::class => [
'class' => Middleware\ErrorHandling::class,
'arguments' => ['@' . ErrorHandler::class],
'arguments' => [ErrorHandler::class],
],
Middleware\OutputBuffering::class => ['class' => Middleware\OutputBuffering::class],
Middleware\PhpExtensionsChecking::class => [
'class' => Middleware\PhpExtensionsChecking::class,
'arguments' => ['@' . Template::class, '@' . ResponseFactory::class],
'arguments' => [Template::class, ResponseFactory::class],
],
Middleware\ServerConfigurationChecking::class => [
'class' => Middleware\ServerConfigurationChecking::class,
'arguments' => ['@' . Template::class, '@' . ResponseFactory::class],
'arguments' => [Template::class, ResponseFactory::class],
],
Middleware\PhpSettingsConfiguration::class => ['class' => Middleware\PhpSettingsConfiguration::class],
Middleware\RouteParsing::class => ['class' => Middleware\RouteParsing::class],
Middleware\ConfigLoading::class => [
'class' => Middleware\ConfigLoading::class,
'arguments' => ['@' . Config::class, '@' . Template::class, '@' . ResponseFactory::class],
'arguments' => [Config::class, Template::class, ResponseFactory::class],
],
Middleware\UriSchemeUpdating::class => [
'class' => Middleware\UriSchemeUpdating::class,
'arguments' => ['@' . Config::class],
'arguments' => [Config::class],
],
Middleware\SessionHandling::class => [
'class' => Middleware\SessionHandling::class,
'arguments' => [
'@' . Config::class,
'@' . ErrorHandler::class,
'@' . Template::class,
'@' . ResponseFactory::class,
Config::class,
ErrorHandler::class,
Template::class,
ResponseFactory::class,
],
],
Middleware\EncryptedQueryParamsHandling::class => ['class' => Middleware\EncryptedQueryParamsHandling::class],
Middleware\UrlParamsSetting::class => [
'class' => Middleware\UrlParamsSetting::class,
'arguments' => ['@' . Config::class],
'arguments' => [Config::class],
],
Middleware\TokenRequestParamChecking::class => ['class' => Middleware\TokenRequestParamChecking::class],
Middleware\DatabaseAndTableSetting::class => ['class' => Middleware\DatabaseAndTableSetting::class],
@ -201,114 +201,114 @@ return [
Middleware\LanguageLoading::class => ['class' => Middleware\LanguageLoading::class],
Middleware\ConfigErrorAndPermissionChecking::class => [
'class' => Middleware\ConfigErrorAndPermissionChecking::class,
'arguments' => ['@' . Config::class, '@' . Template::class, '@' . ResponseFactory::class],
'arguments' => [Config::class, Template::class, ResponseFactory::class],
],
Middleware\RequestProblemChecking::class => [
'class' => Middleware\RequestProblemChecking::class,
'arguments' => ['@' . Template::class, '@' . ResponseFactory::class],
'arguments' => [Template::class, ResponseFactory::class],
],
Middleware\CurrentServerGlobalSetting::class => [
'class' => Middleware\CurrentServerGlobalSetting::class,
'arguments' => ['@' . Config::class],
'arguments' => [Config::class],
],
Middleware\ThemeInitialization::class => ['class' => Middleware\ThemeInitialization::class],
Middleware\UrlRedirection::class => [
'class' => Middleware\UrlRedirection::class,
'arguments' => ['@' . Config::class, '@' . Template::class, '@' . ResponseFactory::class],
'arguments' => [Config::class, Template::class, ResponseFactory::class],
],
Middleware\SetupPageRedirection::class => [
'class' => Middleware\SetupPageRedirection::class,
'arguments' => ['@' . Config::class, '@' . ResponseFactory::class],
'arguments' => [Config::class, ResponseFactory::class],
],
Middleware\MinimumCommonRedirection::class => [
'class' => Middleware\MinimumCommonRedirection::class,
'arguments' => ['@' . Config::class, '@' . ResponseFactory::class],
'arguments' => [Config::class, ResponseFactory::class],
],
Middleware\LanguageAndThemeCookieSaving::class => [
'class' => Middleware\LanguageAndThemeCookieSaving::class,
'arguments' => ['@' . Config::class],
'arguments' => [Config::class],
],
Middleware\LoginCookieValiditySetting::class => [
'class' => Middleware\LoginCookieValiditySetting::class,
'arguments' => ['@' . Config::class],
'arguments' => [Config::class],
],
Middleware\Authentication::class => [
'class' => Middleware\Authentication::class,
'arguments' => [
'@' . Config::class,
'@' . Template::class,
'@' . ResponseFactory::class,
'@' . AuthenticationPluginFactory::class,
'@' . DatabaseInterface::class,
'@' . Relation::class,
'@' . ResponseRenderer::class,
Config::class,
Template::class,
ResponseFactory::class,
AuthenticationPluginFactory::class,
DatabaseInterface::class,
Relation::class,
ResponseRenderer::class,
],
],
Middleware\DatabaseServerVersionChecking::class => [
'class' => Middleware\DatabaseServerVersionChecking::class,
'arguments' => ['@' . Config::class, '@' . Template::class, '@' . ResponseFactory::class],
'arguments' => [Config::class, Template::class, ResponseFactory::class],
],
Middleware\SqlDelimiterSetting::class => [
'class' => Middleware\SqlDelimiterSetting::class,
'arguments' => ['@' . Config::class],
'arguments' => [Config::class],
],
Middleware\ResponseRendererLoading::class => [
'class' => Middleware\ResponseRendererLoading::class,
'arguments' => ['@' . Config::class],
'arguments' => [Config::class],
],
Middleware\ProfilingChecking::class => ['class' => Middleware\ProfilingChecking::class],
Middleware\UserPreferencesLoading::class => [
'class' => Middleware\UserPreferencesLoading::class,
'arguments' => ['@' . Config::class],
'arguments' => [Config::class],
],
Middleware\RecentTableHandling::class => [
'class' => Middleware\RecentTableHandling::class,
'arguments' => ['@' . Config::class],
'arguments' => [Config::class],
],
Middleware\StatementHistory::class => [
'class' => Middleware\StatementHistory::class,
'arguments' => ['@' . Config::class, '@' . History::class],
'arguments' => [Config::class, History::class],
],
Navigation::class => [
'class' => Navigation::class,
'arguments' => [
'@' . Template::class,
'@' . Relation::class,
'@' . DatabaseInterface::class,
'@' . Config::class,
Template::class,
Relation::class,
DatabaseInterface::class,
Config::class,
],
],
Normalization::class => [
'class' => Normalization::class,
'arguments' => [
'@' . DatabaseInterface::class,
'@' . Relation::class,
'@' . Transformations::class,
'@' . Template::class,
DatabaseInterface::class,
Relation::class,
Transformations::class,
Template::class,
],
],
Operations::class => [
'class' => Operations::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Relation::class, '@' . TableMover::class],
'arguments' => [DatabaseInterface::class, Relation::class, TableMover::class],
],
OutputHandler::class => ['class' => OutputHandler::class],
Maintenance::class => [
'class' => Maintenance::class,
'arguments' => ['@' . DatabaseInterface::class],
'arguments' => [DatabaseInterface::class],
],
AuthenticationPluginFactory::class => ['class' => AuthenticationPluginFactory::class],
Relation::class => [
'class' => Relation::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Config::class],
'arguments' => [DatabaseInterface::class, Config::class],
],
RelationCleanup::class => [
'class' => RelationCleanup::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Relation::class],
'arguments' => [DatabaseInterface::class, Relation::class],
],
Replication::class => ['class' => Replication::class, 'arguments' => ['@' . DatabaseInterface::class]],
Replication::class => ['class' => Replication::class, 'arguments' => [DatabaseInterface::class]],
ReplicationGui::class => [
'class' => ReplicationGui::class,
'arguments' => ['@' . Replication::class, '@' . Template::class],
'arguments' => [Replication::class, Template::class],
],
ResponseRenderer::class => [
'class' => ResponseRenderer::class,
@ -316,118 +316,118 @@ return [
],
Routines::class => [
'class' => Routines::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Config::class],
'arguments' => [DatabaseInterface::class, Config::class],
],
Plugins::class => ['class' => Plugins::class, 'arguments' => ['@' . DatabaseInterface::class]],
Plugins::class => ['class' => Plugins::class, 'arguments' => [DatabaseInterface::class]],
Privileges::class => [
'class' => Privileges::class,
'arguments' => [
'@' . Template::class,
'@' . DatabaseInterface::class,
'@' . Relation::class,
'@' . RelationCleanup::class,
'@' . Plugins::class,
'@' . Config::class,
Template::class,
DatabaseInterface::class,
Relation::class,
RelationCleanup::class,
Plugins::class,
Config::class,
],
],
AccountLocking::class => [
'class' => AccountLocking::class,
'arguments' => ['@' . DatabaseInterface::class],
'arguments' => [DatabaseInterface::class],
],
Sql::class => [
'class' => Sql::class,
'arguments' => [
'@' . DatabaseInterface::class,
'@' . Relation::class,
'@' . RelationCleanup::class,
'@' . Transformations::class,
'@' . Template::class,
'@' . BookmarkRepository::class,
'@' . Config::class,
DatabaseInterface::class,
Relation::class,
RelationCleanup::class,
Transformations::class,
Template::class,
BookmarkRepository::class,
Config::class,
],
],
SqlQueryForm::class => [
'class' => SqlQueryForm::class,
'arguments' => [
'@' . Template::class,
'@' . DatabaseInterface::class,
'@' . BookmarkRepository::class,
Template::class,
DatabaseInterface::class,
BookmarkRepository::class,
],
],
Data::class => ['class' => Data::class, 'arguments' => ['@' . DatabaseInterface::class, '@' . Config::class]],
Monitor::class => ['class' => Monitor::class, 'arguments' => ['@' . DatabaseInterface::class]],
Processes::class => ['class' => Processes::class, 'arguments' => ['@' . DatabaseInterface::class]],
Data::class => ['class' => Data::class, 'arguments' => [DatabaseInterface::class, Config::class]],
Monitor::class => ['class' => Monitor::class, 'arguments' => [DatabaseInterface::class]],
Processes::class => ['class' => Processes::class, 'arguments' => [DatabaseInterface::class]],
ColumnsDefinition::class => [
'class' => ColumnsDefinition::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Relation::class, '@' . Transformations::class],
'arguments' => [DatabaseInterface::class, Relation::class, Transformations::class],
],
Indexes::class => [
'class' => Indexes::class,
'arguments' => ['@' . DatabaseInterface::class],
'arguments' => [DatabaseInterface::class],
],
\PhpMyAdmin\Table\Maintenance::class => [
'class' => \PhpMyAdmin\Table\Maintenance::class,
'arguments' => ['@' . DatabaseInterface::class],
'arguments' => [DatabaseInterface::class],
],
Search::class => ['class' => Search::class, 'arguments' => ['@' . DatabaseInterface::class]],
Template::class => ['class' => Template::class, 'arguments' => ['@' . Config::class]],
Search::class => ['class' => Search::class, 'arguments' => [DatabaseInterface::class]],
Template::class => ['class' => Template::class, 'arguments' => [Config::class]],
ThemeManager::class => ['class' => ThemeManager::class],
Tracking::class => [
'class' => Tracking::class,
'arguments' => [
'@' . SqlQueryForm::class,
'@' . Template::class,
'@' . Relation::class,
'@' . DatabaseInterface::class,
'@' . TrackingChecker::class,
SqlQueryForm::class,
Template::class,
Relation::class,
DatabaseInterface::class,
TrackingChecker::class,
],
],
TrackingChecker::class => [
'class' => TrackingChecker::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Relation::class],
'arguments' => [DatabaseInterface::class, Relation::class],
],
Transformations::class => [
'class' => Transformations::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Relation::class],
'arguments' => [DatabaseInterface::class, Relation::class],
],
Triggers::class => ['class' => Triggers::class, 'arguments' => ['@' . DatabaseInterface::class]],
Triggers::class => ['class' => Triggers::class, 'arguments' => [DatabaseInterface::class]],
UserPassword::class => [
'class' => UserPassword::class,
'arguments' => [
'@' . Privileges::class,
'@' . AuthenticationPluginFactory::class,
'@' . DatabaseInterface::class,
Privileges::class,
AuthenticationPluginFactory::class,
DatabaseInterface::class,
],
],
UserPreferences::class => [
'class' => UserPreferences::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Relation::class, '@' . Template::class],
'arguments' => [DatabaseInterface::class, Relation::class, Template::class],
],
UserPrivilegesFactory::class => [
'class' => UserPrivilegesFactory::class,
'arguments' => ['@' . DatabaseInterface::class],
'arguments' => [DatabaseInterface::class],
],
VersionInformation::class => ['class' => VersionInformation::class],
BookmarkRepository::class => [
'class' => BookmarkRepository::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Relation::class],
'arguments' => [DatabaseInterface::class, Relation::class],
],
Console::class => [
'class' => Console::class,
'arguments' => [
'@' . Relation::class,
'@' . Template::class,
'@' . BookmarkRepository::class,
'@' . History::class,
Relation::class,
Template::class,
BookmarkRepository::class,
History::class,
],
],
TableMover::class => [
'class' => TableMover::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Relation::class],
'arguments' => [DatabaseInterface::class, Relation::class],
],
History::class => [
'class' => History::class,
'arguments' => ['@' . DatabaseInterface::class, '@' . Relation::class, '@' . Config::class],
'arguments' => [DatabaseInterface::class, Relation::class, Config::class],
],
],
];

File diff suppressed because it is too large Load Diff

View File

@ -7,10 +7,10 @@ namespace Symfony\Component\DependencyInjection\Loader\Configurator;
use Symfony\Component\DependencyInjection\Reference;
use function is_string;
use function substr;
return static function (ContainerConfigurator $configurator): void {
$services = $configurator->services();
/** @param array<'services', array<string, array{class: string, arguments?: array<string>, factory?: callable}>> $servicesFile */
$loadServices = static function (array $servicesFile, ServicesConfigurator $services): void {
foreach ($servicesFile['services'] as $serviceName => $service) {
if (is_string($service)) {
@ -18,26 +18,20 @@ return static function (ContainerConfigurator $configurator): void {
continue;
}
$theService = $services->set($serviceName, $service['class'] ?? null);
if (isset($service['arguments'])) {// !== null check
foreach ($service['arguments'] as &$argumentName) {
if ($argumentName[0] !== '@') {
continue;
}
$services->alias($serviceName, substr($argumentName, 1));
$argumentName = new Reference(substr($argumentName, 1));
}
$theService->args($service['arguments']);
$theService = $services->set($serviceName, $service['class']);
if (isset($service['factory'])) {
$theService->factory($service['factory']);
}
if (! isset($service['factory'])) {
if (! isset($service['arguments'])) {
continue;
}
// !== null check
$theService->factory($service['factory']);
foreach ($service['arguments'] as &$argumentName) {
$argumentName = new Reference($argumentName);
}
$theService->args($service['arguments']);
}
};

View File

@ -30,12 +30,6 @@ parameters:
count: 1
path: app/services_loader.php
-
message: '#^Cannot access offset 0 on mixed\.$#'
identifier: offsetAccess.nonOffsetAccessible
count: 1
path: app/services_loader.php
-
message: '#^Parameter \#1 \$arguments of method Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ServiceConfigurator\:\:args\(\) expects array, mixed given\.$#'
identifier: argument.type
@ -48,10 +42,16 @@ parameters:
count: 1
path: app/services_loader.php
-
message: '#^Parameter \#1 \$id of class Symfony\\Component\\DependencyInjection\\Reference constructor expects string, mixed given\.$#'
identifier: argument.type
count: 1
path: app/services_loader.php
-
message: '#^Parameter \#1 \$id of method Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ServicesConfigurator\:\:alias\(\) expects string, mixed given\.$#'
identifier: argument.type
count: 2
count: 1
path: app/services_loader.php
-
@ -66,12 +66,6 @@ parameters:
count: 2
path: app/services_loader.php
-
message: '#^Parameter \#1 \$string of function substr expects string, mixed given\.$#'
identifier: argument.type
count: 2
path: app/services_loader.php
-
message: '#^Parameter \#2 \$class of method Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ServicesConfigurator\:\:set\(\) expects string\|null, mixed given\.$#'
identifier: argument.type

View File

@ -2,16 +2,14 @@
<files psalm-version="6.13.1@1e3b7f0a8ab32b23197b91107adc0a7ed8a05b51">
<file src="app/services_loader.php">
<MixedArgument>
<code><![CDATA[$argumentName]]></code>
<code><![CDATA[$argumentName]]></code>
<code><![CDATA[$serviceName]]></code>
<code><![CDATA[$serviceName]]></code>
<code><![CDATA[$service['arguments']]]></code>
<code><![CDATA[$service['class'] ?? null]]></code>
<code><![CDATA[$service['class']]]></code>
<code><![CDATA[$service['factory']]]></code>
</MixedArgument>
<MixedArrayAccess>
<code><![CDATA[$argumentName[0]]]></code>
<code><![CDATA[$service['arguments']]]></code>
<code><![CDATA[$service['arguments']]]></code>
<code><![CDATA[$service['class']]]></code>

View File

@ -28,22 +28,23 @@ final class ContainerBuilderTest extends AbstractTestCase
ContainerBuilder::$container = null;
}
/** @param class-string $service */
#[DataProvider('servicesProvider')]
public function testContainerEntries(string $service): void
{
Current::$lang = 'en';
DatabaseInterface::$instance = $this->createDatabaseInterface();
$container = ContainerBuilder::getContainer();
self::assertNotNull($container->get($service));
self::assertInstanceOf($service, $container->get($service));
ContainerBuilder::$container = null;
}
/** @return array<int, array<int, string>> */
/** @return array<int, array<int, class-string>> */
public static function servicesProvider(): array
{
/** @psalm-var array{services: array<string, mixed>} $services */
/** @psalm-var array{services: array<class-string, mixed>} $services */
$services = include ROOT_PATH . 'app/services.php';
/** @psalm-var array{services: array<string, mixed>} $controllerServices */
/** @psalm-var array{services: array<class-string, mixed>} $controllerServices */
$controllerServices = include ROOT_PATH . 'app/services_controllers.php';
return array_map(