diff --git a/src/parser/statement.js b/src/parser/statement.js index f58e661e83..6861b47bca 100644 --- a/src/parser/statement.js +++ b/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/test/fixtures/experimental/class-properties/semicolons-required-with-value/actual.js b/test/fixtures/experimental/class-properties/semicolons-required-with-value/actual.js new file mode 100644 index 0000000000..51ecdbb104 --- /dev/null +++ b/test/fixtures/experimental/class-properties/semicolons-required-with-value/actual.js @@ -0,0 +1,3 @@ +class A { + asdf = 1 +} diff --git a/test/fixtures/experimental/class-properties/semicolons-required-with-value/options.json b/test/fixtures/experimental/class-properties/semicolons-required-with-value/options.json new file mode 100644 index 0000000000..4bf955cfec --- /dev/null +++ b/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/test/fixtures/experimental/class-properties/semicolons-required-without-value/actual.js b/test/fixtures/experimental/class-properties/semicolons-required-without-value/actual.js new file mode 100644 index 0000000000..caa1ecf226 --- /dev/null +++ b/test/fixtures/experimental/class-properties/semicolons-required-without-value/actual.js @@ -0,0 +1,3 @@ +class A { + asdf +} diff --git a/test/fixtures/experimental/class-properties/semicolons-required-without-value/options.json b/test/fixtures/experimental/class-properties/semicolons-required-without-value/options.json new file mode 100644 index 0000000000..4bf955cfec --- /dev/null +++ b/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"] +}