Ejemplo n.º 1
0
        /// <summary>
        /// Parses input value definitions.
        /// <see cref="InputValueDefinitionNode" />:
        /// Description? Name : Type DefaultValue? Directives[isConstant=true]?
        /// </summary>
        /// <param name="context">The parser context.</param>
        private InputValueDefinitionNode ParseInputValueDefinition(
            ParserContext context)
        {
            SyntaxToken     start       = context.Current;
            StringValueNode description = ParseDescription(context);
            NameNode        name        = ParseName(context);

            context.ExpectColon();
            ITypeNode  type         = ParseTypeReference(context);
            IValueNode defaultValue = null;

            if (context.Skip(TokenKind.Equal))
            {
                defaultValue = ParseConstantValue(context);
            }
            List <DirectiveNode> directives =
                ParseDirectives(context, true);
            Location location = context.CreateLocation(start);

            return(new InputValueDefinitionNode
                   (
                       location,
                       name,
                       description,
                       type,
                       defaultValue,
                       directives
                   ));
        }
Ejemplo n.º 2
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
                   ));
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Parses a interface type or object type field definition.
        /// <see cref="FieldDefinitionNode" />:
        /// Description?
        /// Name ArgumentsDefinition? : Type Directives[isConstant=true]?
        /// </summary>
        /// <param name="context">The parser context.</param>
        private FieldDefinitionNode ParseFieldDefinition(
            ParserContext context)
        {
            SyntaxToken     start       = context.Current;
            StringValueNode description = ParseDescription(context);
            NameNode        name        = ParseName(context);
            List <InputValueDefinitionNode> arguments =
                ParseArgumentDefinitions(context);

            context.ExpectColon();
            ITypeNode            type       = ParseTypeReference(context);
            List <DirectiveNode> directives =
                ParseDirectives(context, true);
            Location location = context.CreateLocation(start);

            return(new FieldDefinitionNode
                   (
                       location,
                       name,
                       description,
                       arguments,
                       type,
                       directives
                   ));
        }
Ejemplo n.º 4
0
        private ObjectFieldNode ParseObjectField(ParserContext context, bool isConstant)
        {
            SyntaxToken start = context.Current;
            NameNode    name  = ParseName(context);

            context.ExpectColon();
            IValueNode value    = ParseValueLiteral(context, isConstant);
            Location   location = context.CreateLocation(start);

            return(new ObjectFieldNode
                   (
                       location,
                       name,
                       value
                   ));
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Parses an argument.
        /// <see cref="ArgumentNode" />:
        /// Name : Value
        /// </summary>
        /// <param name="context">The parser context.</param>
        private ArgumentNode ParseArgument(ParserContext context,
                                           Func <ParserContext, IValueNode> parseValue)
        {
            SyntaxToken start = context.Current;
            NameNode    name  = context.ParseName();

            context.ExpectColon();
            IValueNode value    = parseValue(context);
            Location   location = context.CreateLocation(start);

            return(new ArgumentNode
                   (
                       location,
                       name,
                       value
                   ));
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Parses an operation type definition.
        /// <see cref="OperationTypeDefinitionNode" />:
        /// OperationType : NamedType
        /// </summary>
        /// <param name="context">The parser context.</param>
        private OperationTypeDefinitionNode ParseOperationTypeDefinition(
            ParserContext context)
        {
            SyntaxToken   start     = context.Current;
            OperationType operation = ParseOperationType(context);

            context.ExpectColon();
            NamedTypeNode type     = ParseNamedType(context);
            Location      location = context.CreateLocation(start);

            return(new OperationTypeDefinitionNode
                   (
                       location,
                       operation,
                       type
                   ));
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Parses a variable definition.
        /// <see cref="VariableDefinitionNode" />:
        /// $variable : Type = DefaultValue?
        /// </summary>
        /// <param name="context">The parser context.</param>
        private VariableDefinitionNode ParseVariableDefinition(ParserContext context)
        {
            SyntaxToken  start    = context.Current;
            VariableNode variable = ParseVariable(context);

            context.ExpectColon();
            ITypeNode  type         = ParseTypeReference(context);
            IValueNode defaultValue = context.Skip(TokenKind.Equal)
                ? ParseValueLiteral(context, true)
                : null;
            Location location = context.CreateLocation(start);

            return(new VariableDefinitionNode
                   (
                       location,
                       variable,
                       type,
                       defaultValue
                   ));
        }