diff --git a/src/language/__tests__/schema-parser-test.js b/src/language/__tests__/schema-parser-test.js index a9577d12da..054b6b3d5a 100644 --- a/src/language/__tests__/schema-parser-test.js +++ b/src/language/__tests__/schema-parser-test.js @@ -333,7 +333,8 @@ describe('Schema Parser', () => { world: String } `).to.deep.equal({ - message: 'Syntax Error: Unexpected Name "extend".', + message: + 'Syntax Error: Unexpected Name "extend". Extension do not include descriptions.', locations: [{ line: 3, column: 7 }], }); @@ -354,7 +355,8 @@ describe('Schema Parser', () => { world: String } `).to.deep.equal({ - message: 'Syntax Error: Unexpected Name "extend".', + message: + 'Syntax Error: Unexpected Name "extend". Extension do not include descriptions.', locations: [{ line: 3, column: 7 }], }); diff --git a/src/language/parser.js b/src/language/parser.js index 2fdcdc6ab6..1cb9ff0faf 100644 --- a/src/language/parser.js +++ b/src/language/parser.js @@ -725,7 +725,8 @@ class Parser { */ parseTypeSystemDefinition(): TypeSystemDefinitionNode { // Many definitions begin with a description and require a lookahead. - const keywordToken = this.peekDescription() + const hasDescription = this.peekDescription(); + const keywordToken = hasDescription ? this._lexer.lookahead() : this._lexer.token; @@ -750,6 +751,14 @@ class Parser { } } + if (hasDescription && keywordToken.value === 'extend') { + throw syntaxError( + this._lexer.source, + keywordToken.start, + 'Unexpected Name "extend". Extension do not include descriptions.', + ); + } + throw this.unexpected(keywordToken); }