From 976edfc06740e434d1d5b136e28996a77f909403 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Wed, 30 Dec 2015 13:09:01 -0500 Subject: [PATCH] `babylon`: throw parse error if class properties do not have a semicolon (fixes T6873) --- .../test/fixtures/general/foobar/actual.js | 2 +- .../test/fixtures/regression/T2983/actual.js | 4 ++-- packages/babylon/src/parser/statement.js | 6 ++++-- .../semicolons-required-with-value/actual.js | 3 +++ .../semicolons-required-with-value/options.json | 4 ++++ .../semicolons-required-without-value/actual.js | 3 +++ .../semicolons-required-without-value/options.json | 4 ++++ 7 files changed, 21 insertions(+), 5 deletions(-) create mode 100644 packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-with-value/actual.js create mode 100644 packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-with-value/options.json create mode 100644 packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-without-value/actual.js create mode 100644 packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-without-value/options.json diff --git a/packages/babel-plugin-transform-class-properties/test/fixtures/general/foobar/actual.js b/packages/babel-plugin-transform-class-properties/test/fixtures/general/foobar/actual.js index 60a1c5e823..4474d19f94 100644 --- a/packages/babel-plugin-transform-class-properties/test/fixtures/general/foobar/actual.js +++ b/packages/babel-plugin-transform-class-properties/test/fixtures/general/foobar/actual.js @@ -5,5 +5,5 @@ class Child extends Parent { scopedFunctionWithThis = () => { this.name = {}; - } + }; } diff --git a/packages/babel-plugin-transform-class-properties/test/fixtures/regression/T2983/actual.js b/packages/babel-plugin-transform-class-properties/test/fixtures/regression/T2983/actual.js index 2961c9a403..c6bf97c616 100644 --- a/packages/babel-plugin-transform-class-properties/test/fixtures/regression/T2983/actual.js +++ b/packages/babel-plugin-transform-class-properties/test/fixtures/regression/T2983/actual.js @@ -1,7 +1,7 @@ call(class { - static test = true + static test = true; }); export default class { - static test = true + static test = true; }; diff --git a/packages/babylon/src/parser/statement.js b/packages/babylon/src/parser/statement.js index f58e661e83..6861b47bca 100644 --- a/packages/babylon/src/parser/statement.js +++ b/packages/babylon/src/parser/statement.js @@ -594,7 +594,7 @@ pp.parseClass = function (node, isStatement, optionalId) { }; pp.isClassProperty = function () { - return this.match(tt.eq) || this.isLineTerminator(); + return this.match(tt.eq) || this.match(tt.semi) || this.canInsertSemicolon(); }; pp.parseClassBody = function (node) { @@ -746,7 +746,9 @@ pp.parseClassProperty = function (node) { } else { node.value = null; } - this.semicolon(); + if (!this.eat(tt.semi)) { + this.raise(this.state.start, "A semicolon is required after a class property"); + } return this.finishNode(node, "ClassProperty"); }; diff --git a/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-with-value/actual.js b/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-with-value/actual.js new file mode 100644 index 0000000000..51ecdbb104 --- /dev/null +++ b/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-with-value/actual.js @@ -0,0 +1,3 @@ +class A { + asdf = 1 +} diff --git a/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-with-value/options.json b/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-with-value/options.json new file mode 100644 index 0000000000..4bf955cfec --- /dev/null +++ b/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-with-value/options.json @@ -0,0 +1,4 @@ +{ + "throws": "A semicolon is required after a class property (3:0)", + "plugins": ["classProperties"] +} diff --git a/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-without-value/actual.js b/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-without-value/actual.js new file mode 100644 index 0000000000..caa1ecf226 --- /dev/null +++ b/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-without-value/actual.js @@ -0,0 +1,3 @@ +class A { + asdf +} diff --git a/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-without-value/options.json b/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-without-value/options.json new file mode 100644 index 0000000000..4bf955cfec --- /dev/null +++ b/packages/babylon/test/fixtures/experimental/class-properties/semicolons-required-without-value/options.json @@ -0,0 +1,4 @@ +{ + "throws": "A semicolon is required after a class property (3:0)", + "plugins": ["classProperties"] +}