Skip to content

Commit 16c9bf4

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

File tree

3 files changed

+46
-31
lines changed

3 files changed

+46
-31
lines changed

fractor/config/application.php

+44
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,54 @@
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+
return;
56+
}
57+
58+
$definition->addTag(
59+
'console.command',
60+
[
61+
'command' => $name,
62+
'description' => $attribute->description,
63+
'hidden' => $hidden,
64+
]
65+
);
66+
67+
foreach ($commands as $name) {
68+
$definition->addTag(
69+
'console.command',
70+
[
71+
'command' => $name,
72+
'hidden' => $hidden,
73+
'alias' => true,
74+
]
75+
);
76+
}
77+
}
78+
);
79+
3780
$services->set('parameter_bag', ContainerBag::class)
3881
->args([
3982
service('service_container'),
4083
])
4184
->alias(ContainerBagInterface::class, 'parameter_bag')
4285
->alias(ParameterBagInterface::class, 'parameter_bag');
4386

87+
$services->set(FractorApplication::class)->call('setCommandLoader', [service('console.command_loader')]);
4488
$services->set(Configuration::class)->factory([service(ConfigurationFactory::class), 'create']);
4589
$services->set(FractorRunner::class)->arg('$processors', tagged_iterator('fractor.file_processor'));
4690
$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)