def _FixJsDocPipeNull(self, js_type):

    # Recurse into all sub_types if the error was at a deeper level.
    map(self._FixJsDocPipeNull, js_type.IterTypes())

    if js_type.type_group and len(js_type.sub_types) == 2:
      # Find and remove the null sub_type:
      sub_type = None
      for sub_type in js_type.sub_types:
        if sub_type.identifier == 'null':
          map(tokenutil.DeleteToken, sub_type.tokens)
          self._AddFix(sub_type.tokens)
          break
      else:
        return

      first_token = js_type.FirstToken()
      question_mark = Token('?', Type.DOC_TYPE_MODIFIER, first_token.line,
                            first_token.line_number)
      tokenutil.InsertTokenBefore(question_mark, first_token)
      js_type.tokens.insert(0, question_mark)
      js_type.tokens.remove(sub_type)
      js_type.sub_types.remove(sub_type)
      js_type.or_null = True

      # Now also remove the separator, which is in the parent's token list,
      # either before or after the sub_type, there is exactly one. Scan for it.
      for token in js_type.tokens:
        if (token and isinstance(token, Token) and
            token.type == Type.DOC_TYPE_MODIFIER and token.string == '|'):
          tokenutil.DeleteToken(token)
          js_type.tokens.remove(token)
          self._AddFix(token)
          break
Builds and returns the argument parser.
dataset/ETHPy150Open google/closure-linter/closure_linter/error_fixer.py/ErrorFixer._FixJsDocPipeNull--crossover with--dataset/ETHPy150Open dansanderson/picotool/pico8/demos/upsidedown.py/_get_argparser