code: def ghissue_role(
      name, rawtext, text, lineno, inliner, options={}, content=[]
  ):
      """
      Link to a GitHub issue.
  
      Returns 2 part tuple containing list of nodes to insert into the
      document and a list of system messages.  Both are allowed to be
      empty.
  
      :param name: The role name used in the document.
      :param rawtext: The entire markup snippet, with role.
      :param text: The text marked with the role.
      :param lineno: The line number where rawtext appears in the input.
      :param inliner: The inliner instance that called us.
      :param options: Directive options for customization.
      :param content: The directive content for customization.
      """
  
      try:
          issue_num = int(text)
          if issue_num <= 0:
              raise ValueError
      except ValueError:
          msg = inliner.reporter.error(
              "GitHub issue number must be a number greater than or equal to 1; "
              '"%s" is invalid.' % text,
              line=lineno,
          )
          prb = inliner.problematic(rawtext, rawtext, msg)
          return [prb], [msg]
      app = inliner.document.settings.env.app
      if "pull" in name.lower():
          category = "pull"
      elif "issue" in name.lower():
          category = "issues"
      else:
          msg = inliner.reporter.error(
              'GitHub roles include "ghpull" and "ghissue", '
              '"%s" is invalid.' % name,
              line=lineno,
          )
          prb = inliner.problematic(rawtext, rawtext, msg)
          return [prb], [msg]
      node = make_link_node(
          rawtext, app, category, str(issue_num), options
      )
      return [node], []
  
imports: from docutils import nodes, utils
  from docutils.parsers.rst.roles import set_classes
label_desc: Use image node_id 2 for calling a global function with example usage: ghissue_role(name, rawtext, text, lineno, inliner, options, content) and returns: list,  list, list,  list, list,  list