docs: def setup(cls, app):  # pragma: no cover
          """Called by Sphinx to setup an extension."""
          if cls.directive_name is None:
              raise NotImplementedError('directive_name must be set by '
                                        'subclasses of BaseDirective')
          if not app.registry.has_domain('http'):
              setup_httpdomain(app)
          app.add_config_value('{}_harness'.format(cls.directive_name),
                               None, 'env')
          app.add_directive(cls.directive_name, cls)
          app.connect('builder-inited', cls.run_setup)
          app.connect('build-finished', cls.run_teardown)
          app.connect('env-get-outdated', cls.get_outdated_docs)
          app.connect('env-purge-doc', cls.purge_docs)