@@ -771,6 +771,7 @@ func parseScalarTypeDefinition(lexer: Lexer) throws -> ScalarTypeDefinition {
771
771
/**
772
772
* ObjectTypeDefinition :
773
773
* - type Name ImplementsInterfaces? Directives? { FieldDefinition+ }
774
+ * - type Name ImplementsInterfaces? Directives?
774
775
*/
775
776
func parseObjectTypeDefinition( lexer: Lexer ) throws -> ObjectTypeDefinition {
776
777
let start = lexer. token
@@ -779,20 +780,32 @@ func parseObjectTypeDefinition(lexer: Lexer) throws -> ObjectTypeDefinition {
779
780
let name = try parseName ( lexer: lexer)
780
781
let interfaces = try parseImplementsInterfaces ( lexer: lexer)
781
782
let directives = try parseDirectives ( lexer: lexer)
782
- let fields = try any (
783
- lexer: lexer,
784
- openKind: . openingBrace,
785
- closeKind: . closingBrace,
786
- parse: parseFieldDefinition
787
- )
788
- return ObjectTypeDefinition (
789
- loc: loc ( lexer: lexer, startToken: start) ,
790
- description: description,
791
- name: name,
792
- interfaces: interfaces,
793
- directives: directives,
794
- fields: fields
795
- )
783
+
784
+ do {
785
+ let fields = try any (
786
+ lexer: lexer,
787
+ openKind: . openingBrace,
788
+ closeKind: . closingBrace,
789
+ parse: parseFieldDefinition
790
+ )
791
+ return ObjectTypeDefinition (
792
+ loc: loc ( lexer: lexer, startToken: start) ,
793
+ description: description,
794
+ name: name,
795
+ interfaces: interfaces,
796
+ directives: directives,
797
+ fields: fields
798
+ )
799
+ } catch {
800
+ return ObjectTypeDefinition (
801
+ loc: loc ( lexer: lexer, startToken: start) ,
802
+ description: description,
803
+ name: name,
804
+ interfaces: interfaces,
805
+ directives: directives,
806
+ fields: [ ]
807
+ )
808
+ }
796
809
}
797
810
798
811
/**
@@ -879,7 +892,9 @@ func parseInputValueDef(lexer: Lexer) throws -> InputValueDefinition {
879
892
}
880
893
881
894
/**
882
- * InterfaceTypeDefinition : interface Name Directives? { FieldDefinition+ }
895
+ * InterfaceTypeDefinition :
896
+ * - interface Name Directives? { FieldDefinition+ }
897
+ * - interface Name Directives?
883
898
*/
884
899
func parseInterfaceTypeDefinition( lexer: Lexer ) throws -> InterfaceTypeDefinition {
885
900
let start = lexer. token
@@ -888,40 +903,65 @@ func parseInterfaceTypeDefinition(lexer: Lexer) throws -> InterfaceTypeDefinitio
888
903
let name = try parseName ( lexer: lexer)
889
904
let interfaces = try parseImplementsInterfaces ( lexer: lexer)
890
905
let directives = try parseDirectives ( lexer: lexer)
891
- let fields = try any (
892
- lexer: lexer,
893
- openKind: . openingBrace,
894
- closeKind: . closingBrace,
895
- parse: parseFieldDefinition
896
- )
897
- return InterfaceTypeDefinition (
898
- loc: loc ( lexer: lexer, startToken: start) ,
899
- description: description,
900
- name: name,
901
- interfaces: interfaces,
902
- directives: directives,
903
- fields: fields
904
- )
906
+
907
+ do {
908
+ let fields = try any (
909
+ lexer: lexer,
910
+ openKind: . openingBrace,
911
+ closeKind: . closingBrace,
912
+ parse: parseFieldDefinition
913
+ )
914
+ return InterfaceTypeDefinition (
915
+ loc: loc ( lexer: lexer, startToken: start) ,
916
+ description: description,
917
+ name: name,
918
+ interfaces: interfaces,
919
+ directives: directives,
920
+ fields: fields
921
+ )
922
+ } catch {
923
+ return InterfaceTypeDefinition (
924
+ loc: loc ( lexer: lexer, startToken: start) ,
925
+ description: description,
926
+ name: name,
927
+ interfaces: interfaces,
928
+ directives: directives,
929
+ fields: [ ]
930
+ )
931
+ }
905
932
}
906
933
907
934
/**
908
- * UnionTypeDefinition : union Name Directives? = UnionMembers
935
+ * UnionTypeDefinition :
936
+ * - union Name Directives? = UnionMembers
937
+ * - union Name Directives?
909
938
*/
910
939
func parseUnionTypeDefinition( lexer: Lexer ) throws -> UnionTypeDefinition {
911
940
let start = lexer. token
912
941
let description = try parseDescription ( lexer: lexer)
913
942
try expectKeyword ( lexer: lexer, value: " union " )
914
943
let name = try parseName ( lexer: lexer)
915
944
let directives = try parseDirectives ( lexer: lexer)
916
- try expect ( lexer: lexer, kind: . equals)
917
- let types = try parseUnionMembers ( lexer: lexer)
918
- return UnionTypeDefinition (
919
- loc: loc ( lexer: lexer, startToken: start) ,
920
- description: description,
921
- name: name,
922
- directives: directives,
923
- types: types
924
- )
945
+
946
+ do {
947
+ try expect ( lexer: lexer, kind: . equals)
948
+ let types = try parseUnionMembers ( lexer: lexer)
949
+ return UnionTypeDefinition (
950
+ loc: loc ( lexer: lexer, startToken: start) ,
951
+ description: description,
952
+ name: name,
953
+ directives: directives,
954
+ types: types
955
+ )
956
+ } catch {
957
+ return UnionTypeDefinition (
958
+ loc: loc ( lexer: lexer, startToken: start) ,
959
+ description: description,
960
+ name: name,
961
+ directives: directives,
962
+ types: [ ]
963
+ )
964
+ }
925
965
}
926
966
927
967
/**
@@ -940,27 +980,40 @@ func parseUnionMembers(lexer: Lexer) throws -> [NamedType] {
940
980
}
941
981
942
982
/**
943
- * EnumTypeDefinition : enum Name Directives? { EnumValueDefinition+ }
983
+ * EnumTypeDefinition :
984
+ * - enum Name Directives? { EnumValueDefinition+ }
985
+ * - enum Name Directives?
944
986
*/
945
987
func parseEnumTypeDefinition( lexer: Lexer ) throws -> EnumTypeDefinition {
946
988
let start = lexer. token
947
989
let description = try parseDescription ( lexer: lexer)
948
990
try expectKeyword ( lexer: lexer, value: " enum " )
949
991
let name = try parseName ( lexer: lexer)
950
992
let directives = try parseDirectives ( lexer: lexer)
951
- let values = try many (
952
- lexer: lexer,
953
- openKind: . openingBrace,
954
- closeKind: . closingBrace,
955
- parse: parseEnumValueDefinition
956
- )
957
- return EnumTypeDefinition (
958
- loc: loc ( lexer: lexer, startToken: start) ,
959
- description: description,
960
- name: name,
961
- directives: directives,
962
- values: values
963
- )
993
+
994
+ do {
995
+ let values = try many (
996
+ lexer: lexer,
997
+ openKind: . openingBrace,
998
+ closeKind: . closingBrace,
999
+ parse: parseEnumValueDefinition
1000
+ )
1001
+ return EnumTypeDefinition (
1002
+ loc: loc ( lexer: lexer, startToken: start) ,
1003
+ description: description,
1004
+ name: name,
1005
+ directives: directives,
1006
+ values: values
1007
+ )
1008
+ } catch {
1009
+ return EnumTypeDefinition (
1010
+ loc: loc ( lexer: lexer, startToken: start) ,
1011
+ description: description,
1012
+ name: name,
1013
+ directives: directives,
1014
+ values: [ ]
1015
+ )
1016
+ }
964
1017
}
965
1018
966
1019
/**
@@ -982,27 +1035,40 @@ func parseEnumValueDefinition(lexer: Lexer) throws -> EnumValueDefinition {
982
1035
}
983
1036
984
1037
/**
985
- * InputObjectTypeDefinition : input Name Directives? { InputValueDefinition+ }
1038
+ * InputObjectTypeDefinition :
1039
+ * - input Name Directives? { InputValueDefinition+ }
1040
+ * - input Name Directives?
986
1041
*/
987
1042
func parseInputObjectTypeDefinition( lexer: Lexer ) throws -> InputObjectTypeDefinition {
988
1043
let start = lexer. token
989
1044
let description = try parseDescription ( lexer: lexer)
990
1045
try expectKeyword ( lexer: lexer, value: " input " )
991
1046
let name = try parseName ( lexer: lexer)
992
1047
let directives = try parseDirectives ( lexer: lexer)
993
- let fields = try any (
994
- lexer: lexer,
995
- openKind: . openingBrace,
996
- closeKind: . closingBrace,
997
- parse: parseInputValueDef
998
- )
999
- return InputObjectTypeDefinition (
1000
- loc: loc ( lexer: lexer, startToken: start) ,
1001
- description: description,
1002
- name: name,
1003
- directives: directives,
1004
- fields: fields
1005
- )
1048
+
1049
+ do {
1050
+ let fields = try any (
1051
+ lexer: lexer,
1052
+ openKind: . openingBrace,
1053
+ closeKind: . closingBrace,
1054
+ parse: parseInputValueDef
1055
+ )
1056
+ return InputObjectTypeDefinition (
1057
+ loc: loc ( lexer: lexer, startToken: start) ,
1058
+ description: description,
1059
+ name: name,
1060
+ directives: directives,
1061
+ fields: fields
1062
+ )
1063
+ } catch {
1064
+ return InputObjectTypeDefinition (
1065
+ loc: loc ( lexer: lexer, startToken: start) ,
1066
+ description: description,
1067
+ name: name,
1068
+ directives: directives,
1069
+ fields: [ ]
1070
+ )
1071
+ }
1006
1072
}
1007
1073
1008
1074
func parseExtensionDefinition( lexer: Lexer ) throws -> TypeSystemDefinition {
0 commit comments