code: def add_builder(
      self, builder: type[Builder], override: bool = False
  ) -> None:
      logger.debug("[app] adding builder: %r", builder)
      if not hasattr(builder, "name"):
          raise ExtensionError(
              __('Builder class %s has no "name" attribute') % builder
          )
      if builder.name in self.builders and not override:
          raise ExtensionError(
              __("Builder %r already exists (in module %s)")
              % (builder.name, self.builders[builder.name].__module__)
          )
      self.builders[builder.name] = builder
  
imports: from __future__ import annotations
  import sys
  import traceback
  from importlib import import_module
  from types import MethodType
  from typing import TYPE_CHECKING, Any, Callable
  from sphinx.domains import Domain, Index, ObjType
  from sphinx.domains.std import GenericObject, Target
  from sphinx.errors import ExtensionError, SphinxError, VersionRequirementError
  from sphinx.extension import Extension
  from sphinx.io import create_publisher
  from sphinx.locale import __
  from sphinx.parsers import Parser
  from sphinx.roles import XRefRole
  from sphinx.util import logging
  from sphinx.util.logging import prefixed_warnings
label_desc: Use image node_id 2 for calling the SphinxComponentRegistry obj's underlying member method code with example usage: obj.add_builder(builder, override) without return types