/// <summary> /// Parses a field. /// <see cref="FieldNode" />: /// Alias? : Name Arguments? Directives? SelectionSet? /// </summary> /// <param name="context">The parser context.</param> private static FieldNode ParseField(ParserContext context) { SyntaxToken start = context.Current; var hasAlias = context.Peek(TokenKind.Colon); NameNode alias = null; NameNode name = null; if (hasAlias) { alias = ParseName(context); context.ExpectColon(); name = ParseName(context); } else { name = ParseName(context); } List <ArgumentNode> arguments = ParseArguments(context, false); List <DirectiveNode> directives = ParseDirectives(context, false); SelectionSetNode selectionSet = context.Current.IsLeftBrace() ? ParseSelectionSet(context) : null; Location location = context.CreateLocation(start); return(new FieldNode ( location, name, alias, directives, arguments, selectionSet )); }