Skip to content

Commit b9156a7

Browse files
committed
[TASK] Use console command loader
1 parent 7b7cb03 commit b9156a7

File tree

3 files changed

+47
-31
lines changed

3 files changed

+47
-31
lines changed

fractor/config/application.php

+45
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
use a9f\Fractor\Configuration\ConfigurationFactory;
77
use a9f\Fractor\Configuration\Option;
88
use a9f\Fractor\Configuration\ValueObject\Configuration;
9+
use a9f\Fractor\FractorApplication;
10+
use Symfony\Component\Console\Attribute\AsCommand;
11+
use Symfony\Component\DependencyInjection\ChildDefinition;
912
use Symfony\Component\DependencyInjection\ContainerBuilder;
1013
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
1114
use Symfony\Component\DependencyInjection\ParameterBag\ContainerBag;
@@ -34,13 +37,55 @@
3437
]
3538
);
3639

40+
$containerBuilder->registerAttributeForAutoconfiguration(
41+
AsCommand::class,
42+
static function (ChildDefinition $definition, AsCommand $attribute): void {
43+
$commands = explode('|', $attribute->name);
44+
$hidden = false;
45+
$name = array_shift($commands);
46+
47+
if ($name === '') {
48+
// Symfony AsCommand attribute encodes hidden flag as an empty command name
49+
$hidden = true;
50+
$name = array_shift($commands);
51+
}
52+
53+
if ($name === null) {
54+
// This happens in case no name and no aliases are given
55+
// @todo Throw exception
56+
return;
57+
}
58+
59+
$definition->addTag(
60+
'console.command',
61+
[
62+
'command' => $name,
63+
'description' => $attribute->description,
64+
'hidden' => $hidden,
65+
]
66+
);
67+
68+
foreach ($commands as $name) {
69+
$definition->addTag(
70+
'console.command',
71+
[
72+
'command' => $name,
73+
'hidden' => $hidden,
74+
'alias' => true,
75+
]
76+
);
77+
}
78+
}
79+
);
80+
3781
$services->set('parameter_bag', ContainerBag::class)
3882
->args([
3983
service('service_container'),
4084
])
4185
->alias(ContainerBagInterface::class, 'parameter_bag')
4286
->alias(ParameterBagInterface::class, 'parameter_bag');
4387

88+
$services->set(FractorApplication::class)->call('setCommandLoader', [service('console.command_loader')]);
4489
$services->set(Configuration::class)->factory([service(ConfigurationFactory::class), 'create']);
4590
$services->set(FractorRunner::class)->arg('$processors', tagged_iterator('fractor.file_processor'));
4691
$services->set(AllowedFileExtensionsResolver::class)->arg('$processors', tagged_iterator('fractor.file_processor'));

fractor/src/DependencyInjection/CompilerPass/CommandsCompilerPass.php

-29
This file was deleted.

fractor/src/DependencyInjection/ContainerContainerBuilder.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22

33
namespace a9f\Fractor\DependencyInjection;
44

5-
use a9f\Fractor\DependencyInjection\CompilerPass\CommandsCompilerPass;
65
use a9f\FractorExtensionInstaller\Generated\InstalledPackages;
76
use Symfony\Component\Config\FileLocator;
7+
use Symfony\Component\Console\DependencyInjection\AddConsoleCommandPass;
88
use Symfony\Component\DependencyInjection\ContainerBuilder;
99
use Symfony\Component\DependencyInjection\ContainerInterface;
1010
use Symfony\Component\DependencyInjection\Loader\PhpFileLoader;
@@ -20,7 +20,7 @@ public function createDependencyInjectionContainer(array $additionalConfigFiles
2020
$this->loadFile($containerBuilder, __DIR__ . '/../../config/application.php');
2121
$this->importExtensionConfigurations($containerBuilder);
2222

23-
$containerBuilder->addCompilerPass(new CommandsCompilerPass());
23+
$containerBuilder->addCompilerPass(new AddConsoleCommandPass());
2424

2525
foreach ($additionalConfigFiles as $additionalConfigFile) {
2626
if (!file_exists($additionalConfigFile)) {

0 commit comments

Comments
 (0)