diff --git a/fractor-xml/config/application.php b/fractor-xml/config/application.php index be45e400..c991e62b 100644 --- a/fractor-xml/config/application.php +++ b/fractor-xml/config/application.php @@ -1,12 +1,21 @@ services(); $services->defaults() ->autowire() ->autoconfigure(); $services->load('a9f\\FractorXml\\', __DIR__ . '/../src/'); + + + $services->set(XmlFileProcessor::class)->arg('$rules', tagged_iterator('fractor.xml_rule')); + + $containerBuilder->registerForAutoconfiguration(XmlFractor::class)->addTag('fractor.xml_rule'); }; diff --git a/fractor-xml/config/fractor.php b/fractor-xml/config/fractor.php deleted file mode 100644 index 0c926c79..00000000 --- a/fractor-xml/config/fractor.php +++ /dev/null @@ -1,8 +0,0 @@ -addCompilerPass(new XmlFractorCompilerPass()); -}; diff --git a/fractor-xml/src/AbstractXmlFractor.php b/fractor-xml/src/AbstractXmlFractor.php index 4b21abd3..ab0eb35c 100644 --- a/fractor-xml/src/AbstractXmlFractor.php +++ b/fractor-xml/src/AbstractXmlFractor.php @@ -6,7 +6,7 @@ use a9f\FractorXml\Contract\DomNodeVisitor; use a9f\FractorXml\Contract\XmlFractor; -abstract class AbstractXmlFractor implements DomNodeVisitor, XmlFractor, FractorRule +abstract class AbstractXmlFractor implements DomNodeVisitor, XmlFractor { public function beforeTraversal(\DOMNode $rootNode): void { diff --git a/fractor-xml/src/DependencyInjection/XmlFractorCompilerPass.php b/fractor-xml/src/DependencyInjection/XmlFractorCompilerPass.php deleted file mode 100644 index fdcc3c08..00000000 --- a/fractor-xml/src/DependencyInjection/XmlFractorCompilerPass.php +++ /dev/null @@ -1,34 +0,0 @@ -hasDefinition(XmlFileProcessor::class)) { - return; - } - - $taggedServices = $container->findTaggedServiceIds('fractor.rule'); - $xmlRules = array_filter( - $taggedServices, - static fn (string $class) => in_array(XmlFractor::class, class_implements($class) ?: []), - ARRAY_FILTER_USE_KEY - ); - $references = array_map(static fn ($id) => new Reference($id), array_keys($xmlRules)); - - $definition = $container->findDefinition(XmlFileProcessor::class); - $definition->setArgument('$rules', $references); - } -} diff --git a/fractor-xml/src/XmlFileProcessor.php b/fractor-xml/src/XmlFileProcessor.php index 061cc1c2..fe60f41b 100644 --- a/fractor-xml/src/XmlFileProcessor.php +++ b/fractor-xml/src/XmlFileProcessor.php @@ -10,7 +10,7 @@ final class XmlFileProcessor implements FileProcessor /** * @param list $rules */ - public function __construct(private readonly array $rules) + public function __construct(private readonly iterable $rules) { } diff --git a/fractor/config/application.php b/fractor/config/application.php index b62661be..1447a00c 100644 --- a/fractor/config/application.php +++ b/fractor/config/application.php @@ -1,10 +1,13 @@ services(); $services->defaults() ->autowire() @@ -14,6 +17,9 @@ $services->load('a9f\\Fractor\\', __DIR__ . '/../src/') ->exclude('../src/Configuration/'); + $services->set(FractorRunner::class)->arg('$processors', tagged_iterator('fractor.file_processor')); $services->set(FractorConfig::class) ->lazy(); + + $containerBuilder->registerForAutoconfiguration(FileProcessor::class)->addTag('fractor.file_processor'); }; diff --git a/fractor/src/Contract/FractorRule.php b/fractor/src/Contract/FractorRule.php deleted file mode 100644 index e1f5f8a3..00000000 --- a/fractor/src/Contract/FractorRule.php +++ /dev/null @@ -1,7 +0,0 @@ -has(FractorRunner::class)) { - return; - } - - $taggedServices = $container->findTaggedServiceIds('fractor.file_processor'); - $references = array_map(static fn ($id) => new Reference($id), array_keys($taggedServices)); - - $definition = $container->findDefinition(FractorRunner::class); - $definition->setArgument('$processors', $references); - } -} diff --git a/fractor/src/DependencyInjection/ContainerBuilder.php b/fractor/src/DependencyInjection/ContainerBuilder.php index ea9bf44d..70afdec1 100644 --- a/fractor/src/DependencyInjection/ContainerBuilder.php +++ b/fractor/src/DependencyInjection/ContainerBuilder.php @@ -4,7 +4,6 @@ use a9f\Fractor\Configuration\FractorConfig; use a9f\Fractor\DependencyInjection\CompilerPass\CommandsCompilerPass; -use a9f\Fractor\DependencyInjection\CompilerPass\FileProcessorCompilerPass; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\Container; use Symfony\Component\DependencyInjection\ContainerInterface; @@ -28,7 +27,6 @@ public function createDependencyInjectionContainer(?string $fractorConfigFile, a $this->importExtensionConfigurations($config); $config->addCompilerPass(new CommandsCompilerPass()); - $config->addCompilerPass(new FileProcessorCompilerPass()); if ($fractorConfigFile !== null && is_file($fractorConfigFile)) { $config->import($fractorConfigFile); @@ -39,30 +37,11 @@ public function createDependencyInjectionContainer(?string $fractorConfigFile, a $fileLoader->load($additionalConfigFile); } - $this->registerConfiguredRules($config); - $this->registerConfiguredFileProcessors($config); - $config->compile(); return $config; } - private function registerConfiguredRules(FractorConfig $config): void - { - foreach ($config->getRules() as $rule) { - $config->registerForAutoconfiguration($rule) - ->addTag('fractor.rule'); - } - } - - private function registerConfiguredFileProcessors(FractorConfig $config): void - { - foreach ($config->getFileProcessors() as $processor) { - $config->registerForAutoconfiguration($processor) - ->addTag('fractor.file_processor'); - } - } - private function importExtensionConfigurations(FractorConfig $config): void { if (!class_exists('a9f\\FractorExtensionInstaller\\Generated\\InstalledPackages')) { diff --git a/fractor/tests/Helper/Contract/TextRule.php b/fractor/tests/Helper/Contract/TextRule.php index dfa3408a..6088bd86 100644 --- a/fractor/tests/Helper/Contract/TextRule.php +++ b/fractor/tests/Helper/Contract/TextRule.php @@ -5,7 +5,7 @@ use a9f\Fractor\Contract\FractorRule; -interface TextRule extends FractorRule +interface TextRule { public function apply(string $fileContent): string; } \ No newline at end of file