Skip to content

Commit 1854d9b

Browse files
committed
graphql#82 add support for interface extensions
1 parent 9ca3937 commit 1854d9b

File tree

5 files changed

+18
-1
lines changed

5 files changed

+18
-1
lines changed

ast/ast.ast

+4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ O SchemaDefinition
2020
O ScalarTypeDefinition
2121
O ObjectTypeDefinition
2222
O InterfaceTypeDefinition
23+
O InterfaceExtensionDefinition
2324
O UnionTypeDefinition
2425
O EnumTypeDefinition
2526
O InputObjectTypeDefinition
@@ -175,6 +176,9 @@ S Name name
175176
P? Directive directives
176177
P FieldDefinition fields
177178

179+
T InterfaceExtensionDefinition
180+
S InterfaceTypeDefinition definition
181+
178182
T UnionTypeDefinition
179183
S Name name
180184
P? Directive directives

parser.ypp

+7
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ using facebook::graphql::ast::SchemaDefinition;
6161
using facebook::graphql::ast::ScalarTypeDefinition;
6262
using facebook::graphql::ast::ObjectTypeDefinition;
6363
using facebook::graphql::ast::InterfaceTypeDefinition;
64+
using facebook::graphql::ast::InterfaceExtensionDefinition;
6465
using facebook::graphql::ast::UnionTypeDefinition;
6566
using facebook::graphql::ast::EnumTypeDefinition;
6667
using facebook::graphql::ast::InputObjectTypeDefinition;
@@ -125,6 +126,7 @@ union yystype { \
125126
ScalarTypeDefinition *scalarTypeDefinition; \
126127
ObjectTypeDefinition *objectTypeDefinition; \
127128
InterfaceTypeDefinition *interfaceTypeDefinition; \
129+
InterfaceExtensionDefinition *interfaceExtensionDefinition; \
128130
UnionTypeDefinition *unionTypeDefinition; \
129131
EnumTypeDefinition *enumTypeDefinition; \
130132
InputObjectTypeDefinition *inputObjectTypeDefinition; \
@@ -266,6 +268,7 @@ union yystype { \
266268
%type <scalarTypeDefinition> scalar_type_definition;
267269
%type <objectTypeDefinition> object_type_definition;
268270
%type <interfaceTypeDefinition> interface_type_definition;
271+
%type <interfaceExtensionDefinition> interface_extension_definition;
269272
%type <unionTypeDefinition> union_type_definition;
270273
%type <enumTypeDefinition> enum_type_definition;
271274
%type <inputObjectTypeDefinition> input_object_type_definition;
@@ -360,6 +363,7 @@ schema_gate: schema_definition { $$ = static_cast<Definition *>($1); }
360363
| enum_type_definition { $$ = static_cast<Definition *>($1); }
361364
| input_object_type_definition { $$ = static_cast<Definition *>($1); }
362365
| type_extension_definition { $$ = static_cast<Definition *>($1); }
366+
| interface_extension_definition { $$ = static_cast<Definition *>($1); }
363367
| directive_definition { $$ = static_cast<Definition *>($1); }
364368
;
365369

@@ -644,6 +648,9 @@ input_value_definition: name ":" type default_value_opt directives_opt { $$ = ne
644648
interface_type_definition: INTERFACE name directives_opt "{" field_definition_list "}" { $$ = new InterfaceTypeDefinition(@$, $2, $3, $5); }
645649
;
646650

651+
interface_extension_definition: EXTEND interface_type_definition { $$ = new InterfaceExtensionDefinition(@$, $2); }
652+
;
653+
647654
union_type_definition: UNION name directives_opt "=" union_members { $$ = new UnionTypeDefinition(@$, $2, $3, $5); }
648655
;
649656

test/ParserTests.cpp

+2
Original file line numberDiff line numberDiff line change
@@ -347,6 +347,8 @@ TEST(SchemaParserTests, SimpleSchema) {
347347
"otherField: otherType }");
348348
expectSchemaParsing("extend type SomeType " DIRECTIVES
349349
"{ anotherField : AnotherType }");
350+
expectSchemaParsing("extend interface SomeInterface " DIRECTIVES
351+
"{ anotherField : AnotherType }");
350352
expectSchemaParsing("directive @somedirective(a1 : t1 = 1 " DIRECTIVES
351353
", a2 : t2) on foo | bar");
352354
}

test/schema-kitchen-sink.graphql

+4
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ extend type Foo {
6464
seven(argument: [String]): Type
6565
}
6666

67+
extend interface Bar {
68+
name: String
69+
}
70+
6771
# NOTE: out-of-spec test cases commented out until the spec is clarified; see
6872
# https://github.com/graphql/graphql-js/issues/650 .
6973
# extend type Foo @onType {}

test/schema-kitchen-sink.json

+1-1
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)