/// <summary> /// Parses a field. /// <see cref="FieldNode" />: /// Alias? : Name Arguments? Directives? SelectionSet? /// </summary> /// <param name="context">The parser context.</param> private FieldNode ParseField(ParserContext context) { SyntaxToken start = context.Current; bool hasAlias = context.Peek(TokenKind.Colon); NameNode alias = null; NameNode name = null; if (hasAlias) { alias = context.ParseName(); context.ExpectColon(); name = context.ParseName(); } else { name = context.ParseName(); } 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 )); }
/// <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 = context.ParseName(); 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 )); }
/// <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 = context.ParseName(); 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 )); }
/// <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( ParserContext context) { SyntaxToken start = context.Current; StringValueNode description = ParseDescription(context); context.ExpectTypeKeyword(); NameNode name = context.ParseName(); List <NamedTypeNode> interfaces = ParseImplementsInterfaces(context); List <DirectiveNode> directives = ParseDirectives(context, true); List <FieldDefinitionNode> fields = ParseFieldsDefinition(context); Location location = context.CreateLocation(start); return(new ObjectTypeDefinitionNode ( location, name, description, directives, interfaces, fields )); }
private UnionTypeExtensionNode ParseUnionTypeExtension(ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectUnionKeyword(); NameNode name = context.ParseName(); List <DirectiveNode> directives = ParseDirectives(context, true); List <NamedTypeNode> types = ParseUnionMemberTypes(context); Location location = context.CreateLocation(start); if (directives.Count == 0 && types.Count == 0) { throw context.Unexpected(start); } return(new UnionTypeExtensionNode ( location, name, directives, types )); }
/// <summary> /// Parses an operation definition. /// <see cref="OperationDefinitionNode" />: /// OperationType? OperationName? ($x : Type = DefaultValue?)? SelectionSet /// </summary> /// <param name="context">The parser context.</param> private static OperationDefinitionNode ParseOperationDefinition( ParserContext context) { SyntaxToken start = context.Current; if (start.IsLeftBrace()) { return(ParseOperationDefinitionShortHandForm(context, start)); } OperationType operation = ParseOperationType(context); NameNode name = context.Current.IsName() ? context.ParseName() : null; List <VariableDefinitionNode> variableDefinitions = ParseVariableDefinitions(context); List <DirectiveNode> directives = ParseDirectives(context, false); SelectionSetNode selectionSet = ParseSelectionSet(context); Location location = context.CreateLocation(start); return(new OperationDefinitionNode ( location, name, operation, variableDefinitions, directives, selectionSet )); }
private DirectiveDefinitionNode ParseDirectiveDefinition(ParserContext context) { SyntaxToken start = context.Current; StringValueNode description = ParseDescription(context); context.ExpectDirectiveKeyword(); context.ExpectAt(); NameNode name = context.ParseName(); List <InputValueDefinitionNode> arguments = ParseArgumentDefinitions(context); context.ExpectOnKeyword(); List <NameNode> locations = ParseDirectiveLocations(context); Location location = context.CreateLocation(start); return(new DirectiveDefinitionNode ( location, name, description, arguments, locations )); }
private EnumTypeExtensionNode ParseEnumTypeExtension(ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectEnumKeyword(); NameNode name = context.ParseName(); List <DirectiveNode> directives = ParseDirectives(context, true); List <EnumValueDefinitionNode> values = ParseEnumValuesDefinition(context); Location location = context.CreateLocation(start); if (directives.Count == 0 && values.Count == 0) { throw context.Unexpected(start); } return(new EnumTypeExtensionNode ( location, name, directives, values )); }
private InputObjectTypeExtensionNode ParseInputObjectTypeExtension(ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectInputKeyword(); NameNode name = context.ParseName(); List <DirectiveNode> directives = ParseDirectives(context, true); List <InputValueDefinitionNode> fields = ParseInputFieldsDefinition(context); Location location = context.CreateLocation(start); if (directives.Count == 0 && fields.Count == 0) { throw context.Unexpected(start); } return(new InputObjectTypeExtensionNode ( location, name, directives, fields )); }
private ObjectTypeExtensionNode ParseObjectTypeExtension(ParserContext context) { SyntaxToken start = context.Current; context.ExpectExtendKeyword(); context.ExpectTypeKeyword(); NameNode name = context.ParseName(); List <NamedTypeNode> interfaces = ParseImplementsInterfaces(context); List <DirectiveNode> directives = ParseDirectives(context, true); List <FieldDefinitionNode> fields = ParseFieldsDefinition(context); Location location = context.CreateLocation(start); if (interfaces.Count == 0 && directives.Count == 0 && fields.Count == 0) { throw context.Unexpected(start); } return(new ObjectTypeExtensionNode ( location, name, directives, interfaces, fields )); }
/// <summary> /// Parse fragment name. /// <see cref="NameNode" />: /// Name /// </summary> /// <param name="context">The parser context.</param> private NameNode ParseFragmentName(ParserContext context) { if (context.Current.IsOnKeyword()) { throw context.Unexpected(context.Current); } return(context.ParseName()); }
private NameNode ParseDirectiveLocation(ParserContext context) { SyntaxToken start = context.Current; NameNode name = context.ParseName(); if (DirectiveLocation.IsValidName(name.Value)) { return(name); } throw context.Unexpected(start); }
/// <summary> /// Parse a variable. /// <see cref="VariableNode" />: /// $Name /// </summary> /// <param name="context">The parser context.</param> private VariableNode ParseVariable(ParserContext context) { SyntaxToken start = context.ExpectDollar(); NameNode name = context.ParseName(); Location location = context.CreateLocation(start); return(new VariableNode ( location, name )); }
/// <summary> /// Parses a named type. /// <see cref="NamedTypeNode" />: /// Name /// </summary> /// <param name="context">The parser context.</param> private NamedTypeNode ParseNamedType(ParserContext context) { SyntaxToken start = context.Current; NameNode name = context.ParseName(); Location location = context.CreateLocation(start); return(new NamedTypeNode ( location, name )); }
private ObjectFieldNode ParseObjectField(ParserContext context, bool isConstant) { SyntaxToken start = context.Current; NameNode name = context.ParseName(); context.ExpectColon(); IValueNode value = ParseValueLiteral(context, isConstant); Location location = context.CreateLocation(start); return(new ObjectFieldNode ( location, name, value )); }
/// <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 )); }
private DirectiveNode ParseDirective( ParserContext context, bool isConstant) { SyntaxToken start = context.Current; context.ExpectAt(); NameNode name = context.ParseName(); List <ArgumentNode> arguments = ParseArguments(context, isConstant); Location location = context.CreateLocation(start); return(new DirectiveNode ( location, name, arguments )); }
/// <summary> /// Parses an enum value definitions. /// <see cref="EnumValueDefinitionNode" />: /// Description? EnumValue Directives[isConstant=true]? /// </summary> /// <param name="context">The parser context.</param> private EnumValueDefinitionNode ParseEnumValueDefinition( ParserContext context) { SyntaxToken start = context.Current; StringValueNode description = ParseDescription(context); NameNode name = context.ParseName(); List <DirectiveNode> directives = ParseDirectives(context, true); Location location = context.CreateLocation(start); return(new EnumValueDefinitionNode ( location, name, description, directives )); }
/// <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 UnionTypeDefinitionNode ParseUnionTypeDefinition( ParserContext context) { SyntaxToken start = context.Current; StringValueNode description = ParseDescription(context); context.ExpectUnionKeyword(); NameNode name = context.ParseName(); List <DirectiveNode> directives = ParseDirectives(context, true); List <NamedTypeNode> types = ParseUnionMemberTypes(context); Location location = context.CreateLocation(start); return(new UnionTypeDefinitionNode ( location, name, description, directives, types )); }
private InputObjectTypeDefinitionNode ParseInputObjectTypeDefinition( ParserContext context) { SyntaxToken start = context.Current; StringValueNode description = ParseDescription(context); context.ExpectInputKeyword(); NameNode name = context.ParseName(); List <DirectiveNode> directives = ParseDirectives(context, true); List <InputValueDefinitionNode> fields = ParseInputFieldsDefinition(context); Location location = context.CreateLocation(start); return(new InputObjectTypeDefinitionNode ( location, name, description, directives, fields )); }
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 )); }