From c3be47bfb5fbe9a8949747355bc3b999250238b8 Mon Sep 17 00:00:00 2001 From: Kei Kamikawa Date: Sun, 4 Apr 2021 00:41:31 +0900 Subject: [PATCH] supported VARIABLE_DEFINITION --- ast/directive.go | 1 + parser/query_test.yml | 8 +++++- parser/schema.go | 2 ++ parser/schema_test.yml | 54 +++++++++++++++++++++++++++++++++++++++ validator/prelude.graphql | 1 + 5 files changed, 65 insertions(+), 1 deletion(-) diff --git a/ast/directive.go b/ast/directive.go index 9b07c92a..3f8b0444 100644 --- a/ast/directive.go +++ b/ast/directive.go @@ -11,6 +11,7 @@ const ( LocationFragmentDefinition DirectiveLocation = `FRAGMENT_DEFINITION` LocationFragmentSpread DirectiveLocation = `FRAGMENT_SPREAD` LocationInlineFragment DirectiveLocation = `INLINE_FRAGMENT` + LocationVariableDefinition DirectiveLocation = `VARIABLE_DEFINITION` // Type System LocationSchema DirectiveLocation = `SCHEMA` diff --git a/parser/query_test.yml b/parser/query_test.yml index a46a01e7..ee73d03f 100644 --- a/parser/query_test.yml +++ b/parser/query_test.yml @@ -42,7 +42,7 @@ variables: locations: [{ line: 1, column: 37 }] - name: can have directives - input: 'query ($withDirective: String @first @second, $withoutDirective: String) { f }' + input: 'query ($withDirective: String @first @second @third(if: true), $withoutDirective: String) { f }' ast: | Operations: [OperationDefinition] @@ -57,6 +57,12 @@ variables: Name: "first" - Name: "second" + - + Name: "third" + Arguments: [Argument] + - + Name: "if" + Value: true - Variable: "withoutDirective" Type: String diff --git a/parser/schema.go b/parser/schema.go index 5073d8b5..9facfd89 100644 --- a/parser/schema.go +++ b/parser/schema.go @@ -503,6 +503,8 @@ func (p *parser) parseDirectiveLocation() DirectiveLocation { return LocationFragmentSpread case `INLINE_FRAGMENT`: return LocationInlineFragment + case `VARIABLE_DEFINITION`: + return LocationVariableDefinition case `SCHEMA`: return LocationSchema case `SCALAR`: diff --git a/parser/schema_test.yml b/parser/schema_test.yml index 2781a3ff..e83f8b2b 100644 --- a/parser/schema_test.yml +++ b/parser/schema_test.yml @@ -522,6 +522,60 @@ directives: - DirectiveLocation("FIELD") IsRepeatable: false + - name: executable + input: | + directive @onQuery on QUERY + directive @onMutation on MUTATION + directive @onSubscription on SUBSCRIPTION + directive @onField on FIELD + directive @onFragmentDefinition on FRAGMENT_DEFINITION + directive @onFragmentSpread on FRAGMENT_SPREAD + directive @onInlineFragment on INLINE_FRAGMENT + directive @onVariableDefinition on VARIABLE_DEFINITION + ast: | + + Directives: [DirectiveDefinition] + - + Name: "onQuery" + Locations: [DirectiveLocation] + - DirectiveLocation("QUERY") + IsRepeatable: false + - + Name: "onMutation" + Locations: [DirectiveLocation] + - DirectiveLocation("MUTATION") + IsRepeatable: false + - + Name: "onSubscription" + Locations: [DirectiveLocation] + - DirectiveLocation("SUBSCRIPTION") + IsRepeatable: false + - + Name: "onField" + Locations: [DirectiveLocation] + - DirectiveLocation("FIELD") + IsRepeatable: false + - + Name: "onFragmentDefinition" + Locations: [DirectiveLocation] + - DirectiveLocation("FRAGMENT_DEFINITION") + IsRepeatable: false + - + Name: "onFragmentSpread" + Locations: [DirectiveLocation] + - DirectiveLocation("FRAGMENT_SPREAD") + IsRepeatable: false + - + Name: "onInlineFragment" + Locations: [DirectiveLocation] + - DirectiveLocation("INLINE_FRAGMENT") + IsRepeatable: false + - + Name: "onVariableDefinition" + Locations: [DirectiveLocation] + - DirectiveLocation("VARIABLE_DEFINITION") + IsRepeatable: false + - name: repeatable input: directive @foo repeatable on FIELD ast: | diff --git a/validator/prelude.graphql b/validator/prelude.graphql index ec2d4124..1e9a0f0e 100644 --- a/validator/prelude.graphql +++ b/validator/prelude.graphql @@ -107,6 +107,7 @@ enum __DirectiveLocation { FRAGMENT_DEFINITION FRAGMENT_SPREAD INLINE_FRAGMENT + VARIABLE_DEFINITION SCHEMA SCALAR OBJECT