diff --git a/lib/graphql/language/parser.rb b/lib/graphql/language/parser.rb index d79c9d15cf..f4c1c5adcc 100644 --- a/lib/graphql/language/parser.rb +++ b/lib/graphql/language/parser.rb @@ -33,11 +33,11 @@ class Parser < Parslet::Parser selections.as(:selections) } - rule(:operation_definition) { (unnamed_selections | named_operation_definition) } + rule(:operation_definition) { (unnamed_selections | typed_operation_definition) } rule(:unnamed_selections) { selections.as(:unnamed_selections)} - rule(:named_operation_definition) { + rule(:typed_operation_definition) { operation_type.as(:operation_type) >> space? >> - name.as(:name) >> space? >> + name.as(:name).maybe >> space? >> operation_variable_definitions.maybe.as(:optional_variables).as(:variables) >> space? >> directives.maybe.as(:optional_directives).as(:directives) >> space? >> selections.as(:selections) diff --git a/spec/graphql/language/parser_spec.rb b/spec/graphql/language/parser_spec.rb index 31b4887b5b..de01030224 100644 --- a/spec/graphql/language/parser_spec.rb +++ b/spec/graphql/language/parser_spec.rb @@ -43,6 +43,7 @@ assert(parser.operation_definition.parse_with_debug(%|query personStuff {id, name, ...people, ... stuff}|), "named fetch") assert(parser.operation_definition.parse_with_debug(%|query personStuff @flagDirective {id, name, ...people}|), "with a directive") assert(parser.operation_definition.parse_with_debug(%|mutation changeStuff($stuff: Int = 1, $things: [SomeType]!) {id, name, ...people}|), "mutation with arguments") + assert(parser.operation_definition.parse_with_debug(%|mutation { id }|), "unnamed") end it 'parses fragment definitions' do