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 1d5f112ab9..ab7ae36f1c 100644 --- a/packages/babylon/src/parser/statement.js +++ b/packages/babylon/src/parser/statement.js @@ -595,7 +595,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) { @@ -747,7 +747,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"] +}