public function process(ContainerBuilder $container) { $compiler = $container->getCompiler(); $formatter = $compiler->getLoggingFormatter(); $tags = array_unique(array_merge($container->findTags(), $this->whitelist)); foreach ($container->findUnusedTags() as $tag) { // skip whitelisted tags if (in_array($tag, $this->whitelist)) { continue; } // check for typos $candidates = array(); foreach ($tags as $definedTag) { if ($definedTag === $tag) { continue; } if (false !== strpos($definedTag, $tag) || levenshtein($tag, $definedTag) <= strlen($tag) / 3) { $candidates[] = $definedTag; } } $services = array_keys($container->findTaggedServiceIds($tag)); $message = sprintf('Tag "%s" was defined on service(s) "%s", but was never used.', $tag, implode('", "', $services)); if (!empty($candidates)) { $message .= sprintf(' Did you mean "%s"?', implode('", "', $candidates)); } $compiler->addLogMessage($formatter->format($this, $message)); } }
public function testFindUnusedTags() { $builder = new ContainerBuilder(); $builder->register('foo', 'Bar\\FooClass')->addTag('kernel.event_listener', array('foo' => 'foo'))->addTag('kenrel.event_listener', array('bar' => 'bar')); $builder->findTaggedServiceIds('kernel.event_listener'); $this->assertEquals(array('kenrel.event_listener'), $builder->findUnusedTags(), '->findUnusedTags() returns an array with unused tags'); }