Skip to main content

Module ast

Module ast 

Source
Expand description

AST types for representing parsed GraphQL documents.

This AST structure provides a zero-copy AST for GraphQL documents. All node types are parameterized over a 'src lifetime that borrows strings (whenever possible) from the source text via Cow<'src, str>.

Each AST node has two conceptual layers:

  • Semantic layer (always present): Typed structs with names, values, directives, and all GraphQL semantics.

  • Syntax layer (optional): Each node has an Option<XyzSyntax<'src>> field that, when populated, contains keyword/punctuation tokens with their trivia (whitespace, comments, commas). This enables lossless source reconstruction for formatter and IDE tooling.

§Example

use libgraphql_parser::ast;
use libgraphql_parser::GraphQLParser;

// Parse a string into an AST
let parser = GraphQLParser::new("type Query { hello: String }");
let result = parser.parse_schema_document();

// Extract the `Query` type definition
let doc: &ast::Document<'_> = result.valid().unwrap().0;
let query_def = match &doc.definitions[0] {
    ast::Definition::TypeDefinition(
        ast::TypeDefinition::Object(obj),
    ) => obj,
    _ => panic!("expected an object type definition"),
};

// Count the number of fields on the `Query` object
let num_query_fields = query_def.fields.len();
println!("The `Query` object has {num_query_fields} fields.");

Structs§

Argument
A single argument in a field selection or directive annotation.
ArgumentSyntax
Syntax detail for an Argument.
BooleanValue
A GraphQL boolean value (true or false).
BooleanValueSyntax
Syntax detail for a BooleanValue.
DelimiterPair
A matched pair of delimiter tokens (parentheses, brackets, or braces). Bundled into one struct so that an open delimiter without a matching close is unrepresentable.
DirectiveAnnotation
A directive annotation applied to a definition or field (e.g. @deprecated(reason: "Use newField")).
DirectiveAnnotationSyntax
Syntax detail for a DirectiveAnnotation.
DirectiveDefinition
A directive definition.
DirectiveDefinitionSyntax
Syntax detail for a DirectiveDefinition.
DirectiveLocation
A directive location with its own span (unlike graphql_parser which uses a plain enum).
DirectiveLocationSyntax
Syntax detail for a DirectiveLocation.
Document
Root AST node for any GraphQL document.
DocumentSyntax
Syntax detail for a Document.
EnumTypeDefinition
An enum type definition.
EnumTypeDefinitionSyntax
Syntax detail for an EnumTypeDefinition.
EnumTypeExtension
An enum type extension.
EnumTypeExtensionSyntax
Syntax detail for an EnumTypeExtension.
EnumValue
A GraphQL enum value (an unquoted name that is not true, false, or null).
EnumValueDefinition
An enum value definition within an enum type.
EnumValueSyntax
Syntax detail for an EnumValue (the enum value literal, not the enum value definition).
FieldDefinition
A field definition within an object type or interface type.
FieldDefinitionSyntax
Syntax detail for a FieldDefinition.
FieldSelection
A field selection within a selection set, optionally aliased, with arguments, directives, and a nested selection set.
FieldSelectionSyntax
Syntax detail for a FieldSelection.
FloatValue
A GraphQL float value.
FloatValueSyntax
Syntax detail for a FloatValue.
FragmentDefinition
A named fragment definition.
FragmentDefinitionSyntax
Syntax detail for a FragmentDefinition.
FragmentSpread
A named fragment spread (...FragmentName).
FragmentSpreadSyntax
Syntax detail for a FragmentSpread.
InlineFragment
An inline fragment (... on Type { ... } or ... { ... }).
InlineFragmentSyntax
Syntax detail for an InlineFragment.
InputObjectTypeDefinition
An input object type definition.
InputObjectTypeDefinitionSyntax
Syntax detail for an InputObjectTypeDefinition.
InputObjectTypeExtension
An input object type extension.
InputObjectTypeExtensionSyntax
Syntax detail for an InputObjectTypeExtension.
InputValueDefinition
An input value definition, used for field arguments and input object fields.
InputValueDefinitionSyntax
Syntax detail for an InputValueDefinition.
IntValue
A GraphQL integer value.
IntValueSyntax
Syntax detail for an IntValue.
InterfaceTypeDefinition
An interface type definition.
InterfaceTypeDefinitionSyntax
Syntax detail for an InterfaceTypeDefinition.
InterfaceTypeExtension
An interface type extension.
InterfaceTypeExtensionSyntax
Syntax detail for an InterfaceTypeExtension.
ListTypeAnnotation
A list type reference (e.g. [String], [String!]!).
ListTypeAnnotationSyntax
Syntax detail for a ListTypeAnnotation.
ListValue
A GraphQL list value (e.g., [1, 2, 3]).
ListValueSyntax
Syntax detail for a ListValue.
Name
A GraphQL name (identifier).
NameSyntax
Syntax detail for a Name.
NamedTypeAnnotation
A named type reference (e.g. String, String!).
NullValue
A GraphQL null literal.
NullValueSyntax
Syntax detail for a NullValue.
ObjectField
A single field within a GraphQL input object value.
ObjectFieldSyntax
Syntax detail for an ObjectField.
ObjectTypeDefinition
An object type definition.
ObjectTypeDefinitionSyntax
Syntax detail for an ObjectTypeDefinition.
ObjectTypeExtension
An object type extension.
ObjectTypeExtensionSyntax
Syntax detail for an ObjectTypeExtension.
ObjectValue
A GraphQL input object value (e.g., {x: 1, y: 2}).
ObjectValueSyntax
Syntax detail for an ObjectValue.
OperationDefinition
An operation definition (query, mutation, or subscription).
OperationDefinitionSyntax
Syntax detail for an OperationDefinition.
RootOperationTypeDefinition
A root operation type definition within a schema definition (e.g. query: Query).
RootOperationTypeDefinitionSyntax
Syntax detail for a RootOperationTypeDefinition.
ScalarTypeDefinition
A scalar type definition (e.g. scalar DateTime).
ScalarTypeDefinitionSyntax
Syntax detail for a ScalarTypeDefinition.
ScalarTypeExtension
A scalar type extension.
ScalarTypeExtensionSyntax
Syntax detail for a ScalarTypeExtension.
SchemaDefinition
A GraphQL schema definition.
SchemaDefinitionSyntax
Syntax detail for a SchemaDefinition.
SchemaExtension
A schema extension.
SchemaExtensionSyntax
Syntax detail for a SchemaExtension.
SelectionSet
A selection set — the set of fields and fragments selected within braces { ... }.
SelectionSetSyntax
Syntax detail for a SelectionSet.
StringValue
A GraphQL string value.
StringValueSyntax
Syntax detail for a StringValue.
TypeCondition
A type condition (e.g., on User) used in fragment definitions and inline fragments.
TypeConditionSyntax
Syntax detail for a TypeCondition.
UnionTypeDefinition
A union type definition.
UnionTypeDefinitionSyntax
Syntax detail for a UnionTypeDefinition.
UnionTypeExtension
A union type extension.
UnionTypeExtensionSyntax
Syntax detail for a UnionTypeExtension.
VariableDefinition
A variable definition within an operation’s variable list (e.g. $id: ID! = "default").
VariableDefinitionSyntax
Syntax detail for a VariableDefinition.
VariableReference
A variable reference in a GraphQL value position (e.g., $id).
VariableReferenceSyntax
Syntax detail for a VariableReference.

Enums§

Definition
A top-level definition in a GraphQL document.
DefinitionKind
The kind of definition found in a GraphQL document.
DirectiveLocationKind
The kind of location where a directive may be applied.
DocumentKind
The kind of GraphQL document being parsed.
Nullability
The nullability of a type reference.
OperationKind
The kind of a GraphQL operation.
Selection
A single selection within a selection set.
TypeAnnotation
A GraphQL type reference (type annotation).
TypeDefinition
A type definition in a GraphQL schema.
TypeExtension
A type extension in a GraphQL schema.
Value
A GraphQL input value.

Traits§

AstNode
Trait implemented by all AST node types. Provides source reconstruction and span access methods.