code: def parse_type(parser):
      # type: (Parser) -> Union[NamedType, NonNullType, ListType]
      
      start = parser.token.start
      if skip(parser, TokenKind.BRACKET_L):
          ast_type = parse_type(parser)
          expect(parser, TokenKind.BRACKET_R)
          ast_type = ast.ListType(type=ast_type, loc=loc(parser, start))  # type: ignore
  
      else:
          ast_type = parse_named_type(parser)
  
      if skip(parser, TokenKind.BANG):
          return ast.NonNullType(type=ast_type, loc=loc(parser, start))
  
      return ast_type
docs: Handles the 'Type': TypeName, ListType, and NonNullType
      parsing rules.