@@ -1190,7 +1190,7 @@ func parseInputObjectExtensionDefinition(lexer: Lexer) throws -> InputObjectExte
11901190
11911191/**
11921192 * DirectiveDefinition :
1193- * - directive @ Name ArgumentsDefinition? on DirectiveLocations
1193+ * - directive @ Name ArgumentsDefinition? repeatable? on DirectiveLocations
11941194 */
11951195func parseDirectiveDefinition( lexer: Lexer ) throws -> DirectiveDefinition {
11961196 let start = lexer. token
@@ -1199,15 +1199,30 @@ func parseDirectiveDefinition(lexer: Lexer) throws -> DirectiveDefinition {
11991199 try expect ( lexer: lexer, kind: . at)
12001200 let name = try parseName ( lexer: lexer)
12011201 let args = try parseArgumentDefs ( lexer: lexer)
1202- try expectKeyword ( lexer: lexer, value: " on " )
1203- let locations = try parseDirectiveLocations ( lexer: lexer)
1204- return DirectiveDefinition (
1205- loc: loc ( lexer: lexer, startToken: start) ,
1206- description: description,
1207- name: name,
1208- arguments: args,
1209- locations: locations
1210- )
1202+
1203+ do {
1204+ try expectKeyword ( lexer: lexer, value: " repeatable " )
1205+ try expectKeyword ( lexer: lexer, value: " on " )
1206+ let locations = try parseDirectiveLocations ( lexer: lexer)
1207+ return DirectiveDefinition (
1208+ loc: loc ( lexer: lexer, startToken: start) ,
1209+ description: description,
1210+ name: name,
1211+ arguments: args,
1212+ locations: locations,
1213+ repeatable: true
1214+ )
1215+ } catch {
1216+ try expectKeyword ( lexer: lexer, value: " on " )
1217+ let locations = try parseDirectiveLocations ( lexer: lexer)
1218+ return DirectiveDefinition (
1219+ loc: loc ( lexer: lexer, startToken: start) ,
1220+ description: description,
1221+ name: name,
1222+ arguments: args,
1223+ locations: locations
1224+ )
1225+ }
12111226}
12121227
12131228/**
0 commit comments