Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

First pass of cynic-parser #803

Merged
merged 31 commits into from
Jan 7, 2024
Merged
Changes from 1 commit
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
539a15d
cargo init cynic-parser
obmarg Jan 6, 2024
5d33c9b
Pull in lexer from original cynic-parser attempt
obmarg Jan 6, 2024
bd99d81
Beginnings of lalrpop parser
obmarg Jan 6, 2024
9b76d17
Hacky parsing stuff
obmarg Jan 6, 2024
9429c00
Parsing a type
obmarg Jan 6, 2024
d570213
V simple benchmark
obmarg Jan 6, 2024
d53bc2e
tweaks
obmarg Jan 6, 2024
558086f
borrow lexer from relay
obmarg Jan 6, 2024
ff9a9c4
lalrpop updates for new lexer
obmarg Jan 6, 2024
db0beac
updating lexer for latest logos
obmarg Jan 6, 2024
7eb0575
integrating new lexer with larlpop
obmarg Jan 6, 2024
eff9c6f
fix tests in borrowed lexer
obmarg Jan 6, 2024
edd84e2
get the tests passing again
obmarg Jan 6, 2024
0610d2f
rework the parser AST
obmarg Jan 6, 2024
796eff5
update benchmark with parser changes
obmarg Jan 6, 2024
22fc78c
reorg a bit
obmarg Jan 6, 2024
204b6ae
parse arguments on fields
obmarg Jan 6, 2024
c39be77
add descriptions, input objects
obmarg Jan 6, 2024
974b56a
description on InputValue
obmarg Jan 6, 2024
a42b422
a basic reader setup
obmarg Jan 6, 2024
e681f07
basic printer
obmarg Jan 6, 2024
b40eaea
wip display input objects
obmarg Jan 7, 2024
6380208
start attempting a pretty printer
obmarg Jan 7, 2024
78d01aa
got pretty printer working
obmarg Jan 7, 2024
e109a53
refactor API a bit
obmarg Jan 7, 2024
8eaeded
parse & render types
obmarg Jan 7, 2024
14c6291
parsing values
obmarg Jan 7, 2024
d7547f5
defaults on input values
obmarg Jan 7, 2024
37112bb
directives
obmarg Jan 7, 2024
1c9cb04
no publish
obmarg Jan 7, 2024
2814025
fix tests
obmarg Jan 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
description on InputValue
obmarg committed Jan 6, 2024
commit 974b56ad70c22bdf85e1b139f3ddd774ed6fe313
9 changes: 9 additions & 0 deletions cynic-parser/src/.lib.rs.pending-snap
Original file line number Diff line number Diff line change
@@ -16,3 +16,12 @@
{"run_id":"1704581403-704816000","line":28,"new":{"module_name":"cynic_parser__tests","snapshot_name":"it_works","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":28,"expression":"schema::SchemaDefinitionParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"SchemaDefinition {\n roots: [\n RootOperationTypeDefinition {\n operation_type: Query,\n named_type: NodeId(\n 0,\n ),\n },\n ],\n}"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Schema {\n query: \"Query\",\n}"}}
{"run_id":"1704581403-704816000","line":40,"new":{"module_name":"cynic_parser__tests","snapshot_name":"basic_object","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":40,"expression":"schema::ObjectDefinitionParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"ObjectDefinition {\n name: NodeId(\n 0,\n ),\n fields: [\n NodeId(\n 3,\n ),\n NodeId(\n 6,\n ),\n ],\n}"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Object {\n name: \"MyType\",\n fields: [\n Field {\n name: \"field\",\n ty: \"Whatever\",\n },\n Field {\n name: \"field\",\n ty: \"Whatever\",\n },\n ],\n}"}}
{"run_id":"1704581403-704816000","line":63,"new":{"module_name":"cynic_parser__tests","snapshot_name":"schema_field","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":63,"expression":"schema::ObjectDefinitionParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"ObjectDefinition {\n name: NodeId(\n 0,\n ),\n fields: [\n NodeId(\n 3,\n ),\n ],\n}"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Object {\n name: \"MyType\",\n fields: [\n Field {\n name: \"query\",\n ty: \"String\",\n },\n ],\n}"}}
{"run_id":"1704582765-309293000","line":85,"new":{"module_name":"cynic_parser__tests","snapshot_name":"input","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":85,"expression":"schema::TypeSystemDocumentParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"()"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Object {\n name: \"MyType\",\n fields: [\n Field {\n name: \"query\",\n ty: \"String\",\n },\n ],\n}"}}
{"run_id":"1704582765-309293000","line":28,"new":{"module_name":"cynic_parser__tests","snapshot_name":"it_works","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":28,"expression":"schema::SchemaDefinitionParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"SchemaDefinition {\n roots: [\n RootOperationTypeDefinition {\n operation_type: Query,\n named_type: NodeId(\n 0,\n ),\n },\n ],\n}"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Schema {\n query: \"Query\",\n}"}}
{"run_id":"1704582765-309293000","line":63,"new":{"module_name":"cynic_parser__tests","snapshot_name":"schema_field","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":63,"expression":"schema::ObjectDefinitionParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"ObjectDefinition {\n name: NodeId(\n 0,\n ),\n fields: [\n NodeId(\n 3,\n ),\n ],\n}"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Object {\n name: \"MyType\",\n fields: [\n Field {\n name: \"query\",\n ty: \"String\",\n },\n ],\n}"}}
{"run_id":"1704582765-309293000","line":40,"new":{"module_name":"cynic_parser__tests","snapshot_name":"basic_object","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":40,"expression":"schema::ObjectDefinitionParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"ObjectDefinition {\n name: NodeId(\n 0,\n ),\n fields: [\n NodeId(\n 3,\n ),\n NodeId(\n 6,\n ),\n ],\n}"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Object {\n name: \"MyType\",\n fields: [\n Field {\n name: \"field\",\n ty: \"Whatever\",\n },\n Field {\n name: \"field\",\n ty: \"Whatever\",\n },\n ],\n}"}}
{"run_id":"1704582809-562134000","line":28,"new":{"module_name":"cynic_parser__tests","snapshot_name":"it_works","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":28,"expression":"schema::SchemaDefinitionParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"SchemaDefinition {\n roots: [\n RootOperationTypeDefinition {\n operation_type: Query,\n named_type: NodeId(\n 0,\n ),\n },\n ],\n}"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Schema {\n query: \"Query\",\n}"}}
{"run_id":"1704582939-651714000","line":85,"new":{"module_name":"cynic_parser__tests","snapshot_name":"input","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":85,"expression":"schema::TypeSystemDocumentParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"()"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Object {\n name: \"MyType\",\n fields: [\n Field {\n name: \"query\",\n ty: \"String\",\n },\n ],\n}"}}
{"run_id":"1704582939-651714000","line":28,"new":{"module_name":"cynic_parser__tests","snapshot_name":"it_works","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":28,"expression":"schema::SchemaDefinitionParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"SchemaDefinition {\n roots: [\n RootOperationTypeDefinition {\n operation_type: Query,\n named_type: NodeId(\n 0,\n ),\n },\n ],\n}"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Schema {\n query: \"Query\",\n}"}}
{"run_id":"1704582939-651714000","line":63,"new":{"module_name":"cynic_parser__tests","snapshot_name":"schema_field","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":63,"expression":"schema::ObjectDefinitionParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"ObjectDefinition {\n name: NodeId(\n 0,\n ),\n fields: [\n NodeId(\n 3,\n ),\n ],\n}"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Object {\n name: \"MyType\",\n fields: [\n Field {\n name: \"query\",\n ty: \"String\",\n },\n ],\n}"}}
{"run_id":"1704582939-651714000","line":40,"new":{"module_name":"cynic_parser__tests","snapshot_name":"basic_object","metadata":{"source":"cynic-parser/src/lib.rs","assertion_line":40,"expression":"schema::ObjectDefinitionParser::new().parse(input, &mut builder,\n lexer).unwrap()"},"snapshot":"ObjectDefinition {\n name: NodeId(\n 0,\n ),\n fields: [\n NodeId(\n 3,\n ),\n NodeId(\n 6,\n ),\n ],\n}"},"old":{"module_name":"cynic_parser__tests","metadata":{},"snapshot":"Object {\n name: \"MyType\",\n fields: [\n Field {\n name: \"field\",\n ty: \"Whatever\",\n },\n Field {\n name: \"field\",\n ty: \"Whatever\",\n },\n ],\n}"}}
2 changes: 2 additions & 0 deletions cynic-parser/src/ast.rs
Original file line number Diff line number Diff line change
@@ -75,6 +75,7 @@ pub struct FieldDefinition {
pub name: NodeId,
pub ty: NodeId,
pub arguments: Vec<NodeId>,
pub description: Option<NodeId>,
}

#[derive(Debug)]
@@ -86,6 +87,7 @@ pub struct InputObjectDefinition {
pub struct InputValueDefinition {
pub name: NodeId,
pub ty: NodeId,
pub description: Option<NodeId>,
}

#[derive(Debug)]
9 changes: 5 additions & 4 deletions cynic-parser/src/schema.lalrpop
Original file line number Diff line number Diff line change
@@ -44,10 +44,11 @@ FieldsDefinition: Vec<NodeId> = {

// TODO: add description & directives in a minute
FieldDefinition: NodeId = {
<name:Name> <arguments:ArgumentsDefinition?> ":" <ty:NamedType> => ast.field_definition(FieldDefinition {
<description:StringValue?> <name:Name> <arguments:ArgumentsDefinition?> ":" <ty:NamedType> => ast.field_definition(FieldDefinition {
name,
ty,
arguments: arguments.unwrap_or_default()
arguments: arguments.unwrap_or_default(),
description,
})
};

@@ -66,9 +67,9 @@ InputFieldsDefinition: Vec<NodeId> = {
"{" <fields:InputValueDefinition+> "}" => fields
};

// TODO: Add description, default value, directives
// TODO: Add default value, directives
InputValueDefinition: NodeId =
<name:Name> ":" <ty:Type> => ast.input_value_definition(InputValueDefinition { <> });
<description:StringValue?> <name:Name> ":" <ty:Type> => ast.input_value_definition(InputValueDefinition { <> });

Name: NodeId = <s:Ident> => ast.ident(s);