Example #1
0
        /// <summary>
        /// Parses an interface type definition.
        /// <see cref="InterfaceTypeDefinition" />:
        /// Description? interface Name Directives[isConstant=true]?
        /// FieldsDefinition?
        /// </summary>
        /// <param name="context">The parser context.</param>
        private InterfaceTypeDefinitionNode ParseInterfaceTypeDefinition()
        {
            TokenInfo start = Start();

            MoveNext();

            NameNode             name       = ParseName();
            List <DirectiveNode> directives =
                ParseDirectives(true);
            List <FieldDefinitionNode> fields =
                ParseFieldsDefinition();

            Location?location = CreateLocation(in start);

            return(new InterfaceTypeDefinitionNode
                   (
                       location,
                       name,
                       TakeDescription(),
                       directives,
                       fields
                   ));
        }
Example #2
0
        public void EnumTypeDefinitionWithoutDirectives_ArgumentNullException()
        {
            // arrange
            var source = new Source("foo");
            var start  = new SyntaxToken(
                TokenKind.StartOfFile, 0, 0, 1, 1, null);
            var location    = new Location(source, start, start);
            var name        = new NameNode("foo");
            var description = new StringValueNode("bar");
            var values      = new List <EnumValueDefinitionNode>();


            // act
            Action a = () => new EnumTypeDefinitionNode(
                location,
                name,
                description,
                null,
                values);

            // assert
            Assert.Throws <ArgumentNullException>(a);
        }
Example #3
0
        private static InputObjectTypeDefinitionNode ParseInputObjectTypeDefinition(
            ParserContext context)
        {
            SyntaxToken     start       = context.Current;
            StringValueNode description = ParseDescription(context);

            context.ExpectInputKeyword();
            NameNode             name       = ParseName(context);
            List <DirectiveNode> directives =
                ParseDirectives(context, true);
            List <InputValueDefinitionNode> fields =
                ParseInputFieldsDefinition(context);
            Location location = context.CreateLocation(start);

            return(new InputObjectTypeDefinitionNode
                   (
                       location,
                       name,
                       description,
                       directives,
                       fields
                   ));
        }
Example #4
0
        /// <summary>
        /// Parses an enum type definition.
        /// <see cref="EnumTypeDefinitionNode" />:
        /// Description? enum Name Directives[Const]? EnumValuesDefinition?
        /// </summary>
        /// <param name="context">The parser context.</param>
        private static EnumTypeDefinitionNode ParseEnumTypeDefinition(
            ParserContext context)
        {
            SyntaxToken     start       = context.Current;
            StringValueNode description = ParseDescription(context);

            context.ExpectEnumKeyword();
            NameNode             name       = ParseName(context);
            List <DirectiveNode> directives =
                ParseDirectives(context, true);
            List <EnumValueDefinitionNode> values =
                ParseEnumValuesDefinition(context);
            Location location = context.CreateLocation(start);

            return(new EnumTypeDefinitionNode
                   (
                       location,
                       name,
                       description,
                       directives,
                       values
                   ));
        }
Example #5
0
        /// <summary>
        /// Parses an union type definition.
        /// <see cref="UnionTypeDefinitionNode" />:
        /// Description? union Name Directives[isConstant=true]?
        /// UnionMemberTypes?
        /// </summary>
        /// <param name="context">The parser context.</param>
        private static UnionTypeDefinitionNode ParseUnionTypeDefinition(
            ParserContext context)
        {
            SyntaxToken     start       = context.Current;
            StringValueNode description = ParseDescription(context);

            context.ExpectUnionKeyword();
            NameNode             name       = ParseName(context);
            List <DirectiveNode> directives =
                ParseDirectives(context, true);
            List <NamedTypeNode> types =
                ParseUnionMemberTypes(context);
            Location location = context.CreateLocation(start);

            return(new UnionTypeDefinitionNode
                   (
                       location,
                       name,
                       description,
                       directives,
                       types
                   ));
        }
        public void CreateDirectiveDefinition()
        {
            // arrange
            var name        = new NameNode("foo");
            var description = new StringValueNode("bar");
            var arguments   = new List <InputValueDefinitionNode>();
            var locations   = new List <NameNode>();

            // act
            var directiveDefinition = new DirectiveDefinitionNode(
                null, name, description, true,
                arguments, locations);

            // assert
            Assert.Equal(NodeKind.DirectiveDefinition,
                         directiveDefinition.Kind);
            Assert.Null(directiveDefinition.Location);
            Assert.Equal(name, directiveDefinition.Name);
            Assert.Equal(description, directiveDefinition.Description);
            Assert.Equal(arguments, directiveDefinition.Arguments);
            Assert.Equal(locations, directiveDefinition.Locations);
            Assert.True(directiveDefinition.IsRepeatable);
            Assert.False(directiveDefinition.IsUnique);
        }
        public void EnumTypeDefinitionWithoutLocation()
        {
            // arrange
            var name        = new NameNode("foo");
            var description = new StringValueNode("bar");
            var directives  = new List <DirectiveNode>();
            var values      = new List <EnumValueDefinitionNode>();

            // act
            var type = new EnumTypeDefinitionNode(
                null,
                name,
                description,
                directives,
                values);

            // assert
            Assert.Equal(NodeKind.EnumTypeDefinition, type.Kind);
            Assert.Null(type.Location);
            Assert.Equal(name, type.Name);
            Assert.Equal(description, type.Description);
            Assert.Equal(directives, type.Directives);
            Assert.Equal(values, type.Values);
        }
        private ScalarTypeExtensionNode ParseScalarTypeExtension(
            ParserContext context)
        {
            SyntaxToken start = context.Current;

            context.ExpectExtendKeyword();
            context.ExpectScalarKeyword();
            NameNode             name       = context.ParseName();
            List <DirectiveNode> directives =
                ParseDirectives(context, true);

            if (directives.Count == 0)
            {
                throw context.Unexpected(start);
            }
            Location location = context.CreateLocation(start);

            return(new ScalarTypeExtensionNode
                   (
                       location,
                       name,
                       directives
                   ));
        }
        /// <summary>
        /// Parses an object type definition.
        /// <see cref="ObjectTypeDefinitionNode" />:
        /// Description?
        /// type Name ImplementsInterfaces? Directives[isConstant=true]? FieldsDefinition?
        /// </summary>
        /// <param name="context">The parser context.</param>
        private ObjectTypeDefinitionNode ParseObjectTypeDefinition()
        {
            TokenInfo start = Start();

            // skip type keyword
            MoveNext();

            NameNode                   name       = ParseName();
            List <NamedTypeNode>       interfaces = ParseImplementsInterfaces();
            List <DirectiveNode>       directives = ParseDirectives(true);
            List <FieldDefinitionNode> fields     = ParseFieldsDefinition();

            Location location = CreateLocation(in start);

            return(new ObjectTypeDefinitionNode
                   (
                       location,
                       name,
                       TakeDescription(),
                       directives,
                       interfaces,
                       fields
                   ));
        }
 public FragmentSpreadNode WithName(NameNode name)
 {
     return(new FragmentSpreadNode(Location, name, Directives));
 }
Example #11
0
 public VariableNode(
     NameNode name)
     : this(null, name)
 {
 }
Example #12
0
 public InterfaceTypeDefinitionNode WithName(NameNode name)
 {
     return(new InterfaceTypeDefinitionNode(
                Location, name, Description,
                Directives, Fields));
 }
Example #13
0
 public ArgumentNode WithName(NameNode name)
 {
     return(new ArgumentNode(Location, name, Value));
 }
 public ScalarTypeDefinitionNode WithName(NameNode name)
 {
     return(new ScalarTypeDefinitionNode(
                Location, name, Description,
                Directives));
 }
Example #15
0
 public InterfaceTypeExtensionNode WithName(NameNode name)
 {
     return(new InterfaceTypeExtensionNode(
                Location, name, Directives, Fields));
 }
 public EnumValueDefinitionNode WithName(NameNode name)
 {
     return(new EnumValueDefinitionNode(
                Location, name, Description, Directives));
 }
Example #17
0
 public InputValueDefinitionNode WithName(NameNode name)
 {
     return(new InputValueDefinitionNode(
                Location, name, Description,
                Type, DefaultValue, Directives));
 }
Example #18
0
 public NamedTypeNode WithName(NameNode name)
 {
     return(new NamedTypeNode(Location, name));
 }
Example #19
0
 public NamedTypeNode(Location?location, NameNode name)
 {
     Location = location;
     Name     = name ?? throw new ArgumentNullException(nameof(name));
 }
Example #20
0
 public NamedTypeNode(NameNode name)
     : this(null, name)
 {
 }
Example #21
0
 public DirectiveNode(
     NameNode name,
     IReadOnlyCollection <ArgumentNode> arguments)
     : this(null, name, arguments)
 {
 }
Example #22
0
 protected override void VisitName(NameNode node)
 {
     _writer.Write(node.Value);
 }
Example #23
0
 public DirectiveNode WithName(NameNode name)
 {
     return(new DirectiveNode(Location, name, Arguments));
 }
 public EnumTypeExtensionNode WithName(NameNode name)
 {
     return(new EnumTypeExtensionNode(
                Location, name,
                Directives, Values));
 }
Example #25
0
 public ArgumentNode(
     NameNode name,
     IValueNode value)
     : this(null, name, value)
 {
 }
Example #26
0
 public ArgumentNode(Location?location, NameNode name, IValueNode value)
 {
     Location = location;
     Name     = name ?? throw new ArgumentNullException(nameof(name));
     Value    = value ?? throw new ArgumentNullException(nameof(value));
 }
Example #27
0
 protected virtual NameNode RewriteName(
     NameNode node,
     TContext context)
 {
     return(node);
 }
Example #28
0
 public FieldNode WithName(NameNode name)
 {
     return(new FieldNode(Location, name, Alias,
                          Directives, Arguments, SelectionSet));
 }
Example #29
0
 public ObjectFieldNode WithName(NameNode name)
 {
     return(new ObjectFieldNode(Location, name, Value));
 }
Example #30
0
 public UnionTypeExtensionNode WithName(NameNode name)
 {
     return(new UnionTypeExtensionNode(
                Location, name, Directives, Types));
 }