Skip to content

Commit f5cf916

Browse files
committed
Add better error message for extension with descriptions
1 parent 74ce729 commit f5cf916

File tree

2 files changed

+50
-12
lines changed

2 files changed

+50
-12
lines changed

src/language/__tests__/schema-parser-test.js

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,10 @@ describe('Schema Parser', () => {
9090
fieldNode(
9191
nameNode('world', { start: 15, end: 20 }),
9292
typeNode('String', { start: 22, end: 28 }),
93-
{ start: 15, end: 28 },
93+
{
94+
start: 15,
95+
end: 28,
96+
},
9497
),
9598
],
9699
loc: { start: 0, end: 30 },
@@ -186,7 +189,10 @@ describe('Schema Parser', () => {
186189
fieldNode(
187190
nameNode('world', { start: 22, end: 27 }),
188191
typeNode('String', { start: 29, end: 35 }),
189-
{ start: 22, end: 35 },
192+
{
193+
start: 22,
194+
end: 35,
195+
},
190196
),
191197
],
192198
loc: { start: 0, end: 37 },
@@ -333,7 +339,8 @@ describe('Schema Parser', () => {
333339
world: String
334340
}
335341
`).to.deep.equal({
336-
message: 'Syntax Error: Unexpected Name "extend".',
342+
message:
343+
'Syntax Error: Unexpected Name "extend". Extension do not include descriptions.',
337344
locations: [{ line: 3, column: 7 }],
338345
});
339346

@@ -354,7 +361,8 @@ describe('Schema Parser', () => {
354361
world: String
355362
}
356363
`).to.deep.equal({
357-
message: 'Syntax Error: Unexpected Name "extend".',
364+
message:
365+
'Syntax Error: Unexpected Name "extend". Extension do not include descriptions.',
358366
locations: [{ line: 3, column: 7 }],
359367
});
360368

@@ -482,7 +490,10 @@ describe('Schema Parser', () => {
482490
fieldNode(
483491
nameNode('field', { start: 35, end: 40 }),
484492
typeNode('String', { start: 42, end: 48 }),
485-
{ start: 35, end: 48 },
493+
{
494+
start: 35,
495+
end: 48,
496+
},
486497
),
487498
],
488499
loc: { start: 0, end: 50 },
@@ -508,7 +519,10 @@ describe('Schema Parser', () => {
508519
fieldNode(
509520
nameNode('field', { start: 30, end: 35 }),
510521
typeNode('String', { start: 37, end: 43 }),
511-
{ start: 30, end: 43 },
522+
{
523+
start: 30,
524+
end: 43,
525+
},
512526
),
513527
],
514528
loc: { start: 0, end: 45 },
@@ -537,7 +551,10 @@ describe('Schema Parser', () => {
537551
fieldNode(
538552
nameNode('field', { start: 33, end: 38 }),
539553
typeNode('String', { start: 40, end: 46 }),
540-
{ start: 33, end: 46 },
554+
{
555+
start: 33,
556+
end: 46,
557+
},
541558
),
542559
],
543560
loc: { start: 0, end: 48 },
@@ -565,7 +582,10 @@ describe('Schema Parser', () => {
565582
fieldNode(
566583
nameNode('field', { start: 38, end: 43 }),
567584
typeNode('String', { start: 45, end: 51 }),
568-
{ start: 38, end: 51 },
585+
{
586+
start: 38,
587+
end: 51,
588+
},
569589
),
570590
],
571591
loc: { start: 0, end: 53 },
@@ -594,7 +614,10 @@ describe('Schema Parser', () => {
594614
fieldNode(
595615
nameNode('field', { start: 35, end: 40 }),
596616
typeNode('String', { start: 42, end: 48 }),
597-
{ start: 35, end: 48 },
617+
{
618+
start: 35,
619+
end: 48,
620+
},
598621
),
599622
],
600623
loc: { start: 0, end: 50 },
@@ -624,7 +647,10 @@ describe('Schema Parser', () => {
624647
fieldNode(
625648
nameNode('field', { start: 40, end: 45 }),
626649
typeNode('String', { start: 47, end: 53 }),
627-
{ start: 40, end: 53 },
650+
{
651+
start: 40,
652+
end: 53,
653+
},
628654
),
629655
],
630656
loc: { start: 0, end: 55 },
@@ -695,7 +721,10 @@ describe('Schema Parser', () => {
695721
fieldNode(
696722
nameNode('world', { start: 20, end: 25 }),
697723
typeNode('String', { start: 27, end: 33 }),
698-
{ start: 20, end: 33 },
724+
{
725+
start: 20,
726+
end: 33,
727+
},
699728
),
700729
],
701730
loc: { start: 0, end: 35 },

src/language/parser.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -725,7 +725,8 @@ class Parser {
725725
*/
726726
parseTypeSystemDefinition(): TypeSystemDefinitionNode {
727727
// Many definitions begin with a description and require a lookahead.
728-
const keywordToken = this.peekDescription()
728+
const hasDescription = this.peekDescription();
729+
const keywordToken = hasDescription
729730
? this._lexer.lookahead()
730731
: this._lexer.token;
731732

@@ -750,6 +751,14 @@ class Parser {
750751
}
751752
}
752753

754+
if (hasDescription && keywordToken.value === 'extend') {
755+
throw syntaxError(
756+
this._lexer.source,
757+
keywordToken.start,
758+
'Unexpected Name "extend". Extension do not include descriptions.',
759+
);
760+
}
761+
753762
throw this.unexpected(keywordToken);
754763
}
755764

0 commit comments

Comments
 (0)