docs: def add_target_and_index(self, name_cls, sig, signode):
          """Add cross-reference IDs and entries to the index node, if
          applicable. *name_cls* is the return value of
          :py:meth:`handle_signature`.
          """
          modname = self.options.get(
              'module', self.env.temp_data.get('chpl:module'))
          fullname = (modname and modname + '.' or '') + name_cls[0]
          # note target
          if fullname not in self.state.document.ids:
              signode['names'].append(fullname)
              signode['ids'].append(fullname)
              signode['first'] = (not self.names)
              self.state.document.note_explicit_target(signode)
              objects = self.env.domaindata['chpl']['objects']
              if fullname in objects:
                  self.state_machine.reporter.warning(
                      'duplicate object description of %s, ' % fullname +
                      'other instance in ' +
                      self.env.doc2path(objects[fullname][0]) +
                      ', use :noindex: for one of them',
                      line=self.lineno)
              objects[fullname] = (self.env.docname, self.objtype)
  
          indextext = self.get_index_text(modname, name_cls)
          if indextext:
              self.indexnode['entries'].append(('single', indextext,
                                                fullname, ''))