From eb691425b60be4354f8be86d56b4bb3135c73614 Mon Sep 17 00:00:00 2001 From: Daniel Tschinder Date: Fri, 29 Jul 2016 20:22:49 +0200 Subject: [PATCH] Only allow declares inside declare module (#73) * Only allow declares inside declare module * Better error message --- src/parser/util.js | 8 ++++---- src/plugins/flow.js | 3 +-- test/fixtures/flow/declare-module/8/actual.js | 3 +++ test/fixtures/flow/declare-module/8/options.json | 3 +++ 4 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 test/fixtures/flow/declare-module/8/actual.js create mode 100644 test/fixtures/flow/declare-module/8/options.json diff --git a/src/parser/util.js b/src/parser/util.js index c8cdeda9f1..992e3432ca 100644 --- a/src/parser/util.js +++ b/src/parser/util.js @@ -45,8 +45,8 @@ pp.eatContextual = function (name) { // Asserts that following token is given contextual keyword. -pp.expectContextual = function (name) { - if (!this.eatContextual(name)) this.unexpected(); +pp.expectContextual = function (name, message) { + if (!this.eatContextual(name)) this.unexpected(null, message); }; // Test whether a semicolon can be inserted at the current position. @@ -79,6 +79,6 @@ pp.expect = function (type) { // Raise an unexpected token error. -pp.unexpected = function (pos) { - this.raise(pos != null ? pos : this.state.start, "Unexpected token"); +pp.unexpected = function (pos, message = "Unexpected token") { + this.raise(pos != null ? pos : this.state.start, message); }; diff --git a/src/plugins/flow.js b/src/plugins/flow.js index cbad58e5ea..4a61599ba1 100644 --- a/src/plugins/flow.js +++ b/src/plugins/flow.js @@ -102,8 +102,7 @@ pp.flowParseDeclareModule = function (node) { while (!this.match(tt.braceR)) { let node2 = this.startNode(); - // todo: declare check - this.next(); + this.expectContextual("declare", "Unexpected token. Only declares are allowed inside declare module"); body.push(this.flowParseDeclare(node2)); } diff --git a/test/fixtures/flow/declare-module/8/actual.js b/test/fixtures/flow/declare-module/8/actual.js new file mode 100644 index 0000000000..093f9927d9 --- /dev/null +++ b/test/fixtures/flow/declare-module/8/actual.js @@ -0,0 +1,3 @@ +declare module A { + declar var a:number +} diff --git a/test/fixtures/flow/declare-module/8/options.json b/test/fixtures/flow/declare-module/8/options.json new file mode 100644 index 0000000000..ae5e7790e2 --- /dev/null +++ b/test/fixtures/flow/declare-module/8/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Unexpected token. Only declares are allowed inside declare module (2:2)" +}