Skip to content

Commit d66b3f3

Browse files
committed
Updating schema parser to more closely match current state of RFC
graphql/graphql-spec#90 Commit: b0885a038ec0e654962d69fb910ac86659279579 [b0885a0] Parents: fdafe32724 Author: Lee Byron <[email protected]> Date: 23 March 2016 at 6:35:37 AM SGT Commit Date: 23 March 2016 at 6:35:39 AM SGT
1 parent 2322d25 commit d66b3f3

File tree

5 files changed

+119
-93
lines changed

5 files changed

+119
-93
lines changed

language/ast/definitions.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@ type Definition interface {
1515
// Ensure that all definition types implements Definition interface
1616
var _ Definition = (*OperationDefinition)(nil)
1717
var _ Definition = (*FragmentDefinition)(nil)
18-
var _ Definition = (*TypeExtensionDefinition)(nil)
19-
var _ Definition = (*DirectiveDefinition)(nil)
20-
var _ Definition = (Definition)(nil)
18+
var _ Definition = (TypeSystemDefinition)(nil)
2119

2220
// OperationDefinition implements Node, Definition
2321
type OperationDefinition struct {

language/ast/type_definitions.go

Lines changed: 68 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,74 @@ import (
44
"github.com/graphql-go/graphql/language/kinds"
55
)
66

7-
// Ensure that all typeDefinition types implements Definition interface
8-
var _ Definition = (*ObjectDefinition)(nil)
9-
var _ Definition = (*InterfaceDefinition)(nil)
10-
var _ Definition = (*UnionDefinition)(nil)
11-
var _ Definition = (*ScalarDefinition)(nil)
12-
var _ Definition = (*EnumDefinition)(nil)
13-
var _ Definition = (*InputObjectDefinition)(nil)
7+
type TypeDefinition interface {
8+
GetOperation() string
9+
GetVariableDefinitions() []*VariableDefinition
10+
GetSelectionSet() *SelectionSet
11+
GetKind() string
12+
GetLoc() *Location
13+
}
14+
15+
var _ TypeDefinition = (*ScalarDefinition)(nil)
16+
var _ TypeDefinition = (*ObjectDefinition)(nil)
17+
var _ TypeDefinition = (*InterfaceDefinition)(nil)
18+
var _ TypeDefinition = (*UnionDefinition)(nil)
19+
var _ TypeDefinition = (*EnumDefinition)(nil)
20+
var _ TypeDefinition = (*InputObjectDefinition)(nil)
21+
22+
type TypeSystemDefinition interface {
23+
GetOperation() string
24+
GetVariableDefinitions() []*VariableDefinition
25+
GetSelectionSet() *SelectionSet
26+
GetKind() string
27+
GetLoc() *Location
28+
}
29+
30+
var _ TypeSystemDefinition = (TypeDefinition)(nil)
31+
var _ TypeSystemDefinition = (*TypeExtensionDefinition)(nil)
32+
var _ TypeSystemDefinition = (*DirectiveDefinition)(nil)
33+
34+
// ScalarDefinition implements Node, Definition
35+
type ScalarDefinition struct {
36+
Kind string
37+
Loc *Location
38+
Name *Name
39+
}
40+
41+
func NewScalarDefinition(def *ScalarDefinition) *ScalarDefinition {
42+
if def == nil {
43+
def = &ScalarDefinition{}
44+
}
45+
return &ScalarDefinition{
46+
Kind: kinds.ScalarDefinition,
47+
Loc: def.Loc,
48+
Name: def.Name,
49+
}
50+
}
51+
52+
func (def *ScalarDefinition) GetKind() string {
53+
return def.Kind
54+
}
55+
56+
func (def *ScalarDefinition) GetLoc() *Location {
57+
return def.Loc
58+
}
59+
60+
func (def *ScalarDefinition) GetName() *Name {
61+
return def.Name
62+
}
63+
64+
func (def *ScalarDefinition) GetVariableDefinitions() []*VariableDefinition {
65+
return []*VariableDefinition{}
66+
}
67+
68+
func (def *ScalarDefinition) GetSelectionSet() *SelectionSet {
69+
return &SelectionSet{}
70+
}
71+
72+
func (def *ScalarDefinition) GetOperation() string {
73+
return ""
74+
}
1475

1576
// ObjectDefinition implements Node, Definition
1677
type ObjectDefinition struct {
@@ -206,48 +267,6 @@ func (def *UnionDefinition) GetOperation() string {
206267
return ""
207268
}
208269

209-
// ScalarDefinition implements Node, Definition
210-
type ScalarDefinition struct {
211-
Kind string
212-
Loc *Location
213-
Name *Name
214-
}
215-
216-
func NewScalarDefinition(def *ScalarDefinition) *ScalarDefinition {
217-
if def == nil {
218-
def = &ScalarDefinition{}
219-
}
220-
return &ScalarDefinition{
221-
Kind: kinds.ScalarDefinition,
222-
Loc: def.Loc,
223-
Name: def.Name,
224-
}
225-
}
226-
227-
func (def *ScalarDefinition) GetKind() string {
228-
return def.Kind
229-
}
230-
231-
func (def *ScalarDefinition) GetLoc() *Location {
232-
return def.Loc
233-
}
234-
235-
func (def *ScalarDefinition) GetName() *Name {
236-
return def.Name
237-
}
238-
239-
func (def *ScalarDefinition) GetVariableDefinitions() []*VariableDefinition {
240-
return []*VariableDefinition{}
241-
}
242-
243-
func (def *ScalarDefinition) GetSelectionSet() *SelectionSet {
244-
return &SelectionSet{}
245-
}
246-
247-
func (def *ScalarDefinition) GetOperation() string {
248-
return ""
249-
}
250-
251270
// EnumDefinition implements Node, Definition
252271
type EnumDefinition struct {
253272
Kind string

language/kinds/kinds.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,15 @@ const (
3636
List = "List" // previously ListType
3737
NonNull = "NonNull" // previously NonNull
3838

39+
// Type System Definitions
40+
3941
// Types Definitions
42+
ScalarDefinition = "ScalarDefinition" // previously ScalarTypeDefinition
4043
ObjectDefinition = "ObjectDefinition" // previously ObjectTypeDefinition
4144
FieldDefinition = "FieldDefinition"
4245
InputValueDefinition = "InputValueDefinition"
4346
InterfaceDefinition = "InterfaceDefinition" // previously InterfaceTypeDefinition
4447
UnionDefinition = "UnionDefinition" // previously UnionTypeDefinition
45-
ScalarDefinition = "ScalarDefinition" // previously ScalarTypeDefinition
4648
EnumDefinition = "EnumDefinition" // previously EnumTypeDefinition
4749
EnumValueDefinition = "EnumValueDefinition"
4850
InputObjectDefinition = "InputObjectDefinition" // previously InputObjectTypeDefinition

language/parser/parser.go

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,12 @@ func parseDocument(parser *Parser) (*ast.Document, error) {
133133
return nil, err
134134
}
135135
nodes = append(nodes, node)
136+
case "scalar":
137+
node, err := parseScalarTypeDefinition(parser)
138+
if err != nil {
139+
return nil, err
140+
}
141+
nodes = append(nodes, node)
136142
case "type":
137143
node, err := parseObjectTypeDefinition(parser)
138144
if err != nil {
@@ -151,12 +157,6 @@ func parseDocument(parser *Parser) (*ast.Document, error) {
151157
return nil, err
152158
}
153159
nodes = append(nodes, node)
154-
case "scalar":
155-
node, err := parseScalarTypeDefinition(parser)
156-
if err != nil {
157-
return nil, err
158-
}
159-
nodes = append(nodes, node)
160160
case "enum":
161161
node, err := parseEnumTypeDefinition(parser)
162162
if err != nil {
@@ -860,6 +860,26 @@ func parseNamed(parser *Parser) (*ast.Named, error) {
860860

861861
/* Implements the parsing rules in the Type Definition section. */
862862

863+
/**
864+
* ScalarTypeDefinition : scalar Name
865+
*/
866+
func parseScalarTypeDefinition(parser *Parser) (*ast.ScalarDefinition, error) {
867+
start := parser.Token.Start
868+
_, err := expectKeyWord(parser, "scalar")
869+
if err != nil {
870+
return nil, err
871+
}
872+
name, err := parseName(parser)
873+
if err != nil {
874+
return nil, err
875+
}
876+
def := ast.NewScalarDefinition(&ast.ScalarDefinition{
877+
Name: name,
878+
Loc: loc(parser, start),
879+
})
880+
return def, nil
881+
}
882+
863883
/**
864884
* ObjectTypeDefinition : type Name ImplementsInterfaces? { FieldDefinition+ }
865885
*/
@@ -1085,26 +1105,6 @@ func parseUnionMembers(parser *Parser) ([]*ast.Named, error) {
10851105
return members, nil
10861106
}
10871107

1088-
/**
1089-
* ScalarTypeDefinition : scalar Name
1090-
*/
1091-
func parseScalarTypeDefinition(parser *Parser) (*ast.ScalarDefinition, error) {
1092-
start := parser.Token.Start
1093-
_, err := expectKeyWord(parser, "scalar")
1094-
if err != nil {
1095-
return nil, err
1096-
}
1097-
name, err := parseName(parser)
1098-
if err != nil {
1099-
return nil, err
1100-
}
1101-
def := ast.NewScalarDefinition(&ast.ScalarDefinition{
1102-
Name: name,
1103-
Loc: loc(parser, start),
1104-
})
1105-
return def, nil
1106-
}
1107-
11081108
/**
11091109
* EnumTypeDefinition : enum Name { EnumValueDefinition+ }
11101110
*/
@@ -1246,7 +1246,6 @@ func parseDirectiveDefinition(parser *Parser) (*ast.DirectiveDefinition, error)
12461246
* - Name
12471247
* - DirectiveLocations | Name
12481248
*/
1249-
12501249
func parseDirectiveLocations(parser *Parser) ([]*ast.Name, error) {
12511250
locations := []*ast.Name{}
12521251
for {

language/printer/printer.go

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ var printDocASTReducer = map[string]visitor.VisitFunc{
130130
}
131131
return visitor.ActionNoChange, nil
132132
},
133+
134+
// Document
133135
"Document": func(p visitor.VisitFuncParams) (string, interface{}) {
134136
switch node := p.Node.(type) {
135137
case *ast.Document:
@@ -258,6 +260,8 @@ var printDocASTReducer = map[string]visitor.VisitFunc{
258260
}
259261
return visitor.ActionNoChange, nil
260262
},
263+
264+
// Fragments
261265
"FragmentSpread": func(p visitor.VisitFuncParams) (string, interface{}) {
262266
switch node := p.Node.(type) {
263267
case *ast.InlineFragment:
@@ -306,6 +310,7 @@ var printDocASTReducer = map[string]visitor.VisitFunc{
306310
return visitor.ActionNoChange, nil
307311
},
308312

313+
// Value
309314
"IntValue": func(p visitor.VisitFuncParams) (string, interface{}) {
310315
switch node := p.Node.(type) {
311316
case *ast.IntValue:
@@ -383,6 +388,7 @@ var printDocASTReducer = map[string]visitor.VisitFunc{
383388
return visitor.ActionNoChange, nil
384389
},
385390

391+
// Directive
386392
"Directive": func(p visitor.VisitFuncParams) (string, interface{}) {
387393
switch node := p.Node.(type) {
388394
case *ast.Directive:
@@ -397,6 +403,7 @@ var printDocASTReducer = map[string]visitor.VisitFunc{
397403
return visitor.ActionNoChange, nil
398404
},
399405

406+
// Type
400407
"Named": func(p visitor.VisitFuncParams) (string, interface{}) {
401408
switch node := p.Node.(type) {
402409
case *ast.Named:
@@ -425,6 +432,20 @@ var printDocASTReducer = map[string]visitor.VisitFunc{
425432
return visitor.ActionNoChange, nil
426433
},
427434

435+
// Type System Definitions
436+
"ScalarDefinition": func(p visitor.VisitFuncParams) (string, interface{}) {
437+
switch node := p.Node.(type) {
438+
case *ast.ScalarDefinition:
439+
name := fmt.Sprintf("%v", node.Name)
440+
str := "scalar " + name
441+
return visitor.ActionUpdate, str
442+
case map[string]interface{}:
443+
name := getMapValueString(node, "Name")
444+
str := "scalar " + name
445+
return visitor.ActionUpdate, str
446+
}
447+
return visitor.ActionNoChange, nil
448+
},
428449
"ObjectDefinition": func(p visitor.VisitFuncParams) (string, interface{}) {
429450
switch node := p.Node.(type) {
430451
case *ast.ObjectDefinition:
@@ -506,19 +527,6 @@ var printDocASTReducer = map[string]visitor.VisitFunc{
506527
}
507528
return visitor.ActionNoChange, nil
508529
},
509-
"ScalarDefinition": func(p visitor.VisitFuncParams) (string, interface{}) {
510-
switch node := p.Node.(type) {
511-
case *ast.ScalarDefinition:
512-
name := fmt.Sprintf("%v", node.Name)
513-
str := "scalar " + name
514-
return visitor.ActionUpdate, str
515-
case map[string]interface{}:
516-
name := getMapValueString(node, "Name")
517-
str := "scalar " + name
518-
return visitor.ActionUpdate, str
519-
}
520-
return visitor.ActionNoChange, nil
521-
},
522530
"EnumDefinition": func(p visitor.VisitFuncParams) (string, interface{}) {
523531
switch node := p.Node.(type) {
524532
case *ast.EnumDefinition:

0 commit comments

Comments
 (0)