コード例 #1
0
        /// <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
                   ));
        }