{"record":{"id":"9087de3b39441c3e","repo":"symfony/css-selector","slug":"extension-s-not-registered","errorCode":null,"errorMessage":"Extension \"%s\" not registered.","messagePattern":"Extension \"(.+?)\" not registered\\.","errorType":"exception","errorClass":"ExpressionErrorException","httpStatus":null,"severity":"error","filePath":"XPath/Translator.php","lineNumber":135,"sourceCode":"        $this->extensions[$extension->getName()] = $extension;\n\n        $this->nodeTranslators = array_merge($this->nodeTranslators, $extension->getNodeTranslators());\n        $this->combinationTranslators = array_merge($this->combinationTranslators, $extension->getCombinationTranslators());\n        $this->functionTranslators = array_merge($this->functionTranslators, $extension->getFunctionTranslators());\n        $this->pseudoClassTranslators = array_merge($this->pseudoClassTranslators, $extension->getPseudoClassTranslators());\n        $this->attributeMatchingTranslators = array_merge($this->attributeMatchingTranslators, $extension->getAttributeMatchingTranslators());\n        $this->relativeCombinationTranslators = array_merge($this->relativeCombinationTranslators, $extension->getRelativeCombinationTranslators());\n\n        return $this;\n    }\n\n    /**\n     * @throws ExpressionErrorException\n     */\n    public function getExtension(string $name): Extension\\ExtensionInterface\n    {\n        if (!isset($this->extensions[$name])) {\n            throw new ExpressionErrorException(\\sprintf('Extension \"%s\" not registered.', $name));\n        }\n\n        return $this->extensions[$name];\n    }\n\n    /**\n     * @return $this\n     */\n    public function registerParserShortcut(ParserInterface $shortcut): static\n    {\n        $this->shortcutParsers[] = $shortcut;\n\n        return $this;\n    }\n\n    /**\n     * @throws ExpressionErrorException\n     */","sourceCodeStart":117,"sourceCodeEnd":153,"githubUrl":"https://github.com/symfony/css-selector/blob/08e2905152a39cf3fd1745d83f8c483e258887d9/XPath/Translator.php#L117-L153","documentation":"ExpressionErrorException thrown by Translator::getExtension when the requested extension name is not registered on the translator instance. Extensions (Html, Function, PseudoClass, Attribute, etc.) must be explicitly added via addExtension/registerDefaultExtensions; getExtension is the internal lookup used by translator features and is also public API.","triggerScenarios":"Calling $translator->getExtension('html') on a translator that was never configured with the Html extension, mistyping an extension name, or constructing Translator manually without registerDefaultExtensions().","commonSituations":"Building a Translator with new Translator() and no extensions before translating HTML-specific selectors, DI misconfiguration, typos like 'htm' or 'pseudo-class' with wrong casing.","solutions":["Register the extension first: $translator->addExtension(new HtmlExtension()); or call registerDefaultExtensions().","Use Translator::fromCssConverter()/default constructors that pre-register the standard extensions.","Verify the exact extension name/key (case-sensitive) used with getExtension().","Catch ExpressionErrorException and fall back to a translator configured with defaults."],"exampleFix":"// before\n$translator = new Translator();\n$ext = $translator->getExtension('html'); // throws\n// after\n$translator = new Translator();\n$translator->registerDefaultExtensions();\n$translator->addExtension(new HtmlExtension());\n$ext = $translator->getExtension('html');","handlingStrategy":"try-catch","validationCode":"function hasExtension(\\Symfony\\Component\\CssSelector\\XPath\\Translator $t, string $name): bool {\n    try { $t->getExtension($name); return true; } catch (ExpressionErrorException $e) { return false; }\n}","typeGuard":"function extensionExists(array $extensions, string $name): bool {\n    return isset($extensions[$name]);\n}","tryCatchPattern":"try {\n    $ext = $translator->getExtension('html');\n} catch (ExpressionErrorException $e) {\n    $translator->registerDefaultExtensions();\n    $translator->addExtension(new \\Symfony\\Component\\CssSelector\\XPath\\Extension\\HtmlExtension());\n    $ext = $translator->getExtension('html');\n}","preventionTips":["Use registerDefaultExtensions() right after constructing a Translator.","Add HtmlExtension explicitly when translating HTML documents.","Check extension name spelling/casing before getExtension().","Prefer Translator factory methods that configure extensions for you."],"tags":["css-selector","translator","extension-not-registered"],"backgroundTag":"resource-not-found","analyzedSha":"08e2905152a39cf3fd1745d83f8c483e258887d9","analyzedAt":"2026-09-14T11:41:28.509Z","contentChangedAt":"2026-09-14T11:41:28.509Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}