From cf3ebacf4fbf8d7252e15ab36c637aee79fa2fda Mon Sep 17 00:00:00 2001 From: Moti Zilberman Date: Sat, 15 Oct 2016 00:49:37 +0300 Subject: [PATCH 1/7] add expectPlugin which throws an error with the missing plugin --- src/parser/location.js | 5 ++++- src/parser/util.js | 10 ++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/parser/location.js b/src/parser/location.js index a2a6039762..c506fd0928 100644 --- a/src/parser/location.js +++ b/src/parser/location.js @@ -10,7 +10,7 @@ import CommentsParser from "./comments"; // message. export default class LocationParser extends CommentsParser { - raise(pos: number, message: string): empty { + raise(pos: number, message: string, missingPluginName: string): empty { const loc = getLineInfo(this.input, pos); message += ` (${loc.line}:${loc.column})`; // $FlowIgnore @@ -19,6 +19,9 @@ export default class LocationParser extends CommentsParser { ); err.pos = pos; err.loc = loc; + if (missingPluginName) { + err.missingPlugin = missingPluginName; + } throw err; } } diff --git a/src/parser/util.js b/src/parser/util.js index bc789ef993..1300637276 100644 --- a/src/parser/util.js +++ b/src/parser/util.js @@ -109,4 +109,14 @@ export default class UtilParser extends Tokenizer { } throw this.raise(pos != null ? pos : this.state.start, messageOrType); } + + expectPlugin(name: string): void { + if (!this.hasPlugin(name)) { + throw this.raise( + this.state.start, + `This experimental syntax requires enabling the parser plugin: ${name}`, + name, + ); + } + } } From 2dbba25d1a667d0b4f7e95e842390ecbbd1114c4 Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Thu, 3 Aug 2017 11:13:00 -0400 Subject: [PATCH 2/7] change some things to expectPlugin --- src/parser/expression.js | 53 +++++++++++++------ src/parser/location.js | 10 ++-- src/parser/statement.js | 34 ++++++------ src/parser/util.js | 16 +++++- .../direct-calls-only/options.json | 2 +- .../options.json | 2 +- .../options.json | 2 +- .../disabled-inside-generator/options.json | 2 +- .../error-without-plugin/options.json | 4 +- .../error-without-plugin/actual.js | 2 + .../error-without-plugin/options.json | 4 ++ .../error-without-plugin/actual.js | 1 + .../error-without-plugin/options.json | 4 ++ .../error-without-plugin/actual.js | 1 + .../error-without-plugin/options.json | 4 ++ .../error-without-plugin/actual.js | 1 + .../error-without-plugin/options.json | 5 ++ .../error-without-plugin/actual.js | 1 + .../error-without-plugin/options.json | 4 ++ .../no-plugin-no-binding-finally/options.json | 2 +- .../no-plugin-no-binding/options.json | 2 +- .../missing-plugin/options.json | 2 +- 22 files changed, 110 insertions(+), 48 deletions(-) create mode 100644 test/fixtures/experimental/no-decorators/error-without-plugin/actual.js create mode 100644 test/fixtures/experimental/no-decorators/error-without-plugin/options.json create mode 100644 test/fixtures/experimental/no-do-expressions/error-without-plugin/actual.js create mode 100644 test/fixtures/experimental/no-do-expressions/error-without-plugin/options.json create mode 100644 test/fixtures/experimental/no-dynamic-import/error-without-plugin/actual.js create mode 100644 test/fixtures/experimental/no-dynamic-import/error-without-plugin/options.json create mode 100644 test/fixtures/experimental/no-import-meta/error-without-plugin/actual.js create mode 100644 test/fixtures/experimental/no-import-meta/error-without-plugin/options.json create mode 100644 test/fixtures/experimental/no-object-rest-spread/error-without-plugin/actual.js create mode 100644 test/fixtures/experimental/no-object-rest-spread/error-without-plugin/options.json diff --git a/src/parser/expression.js b/src/parser/expression.js index df41e064f5..c6626b1338 100644 --- a/src/parser/expression.js +++ b/src/parser/expression.js @@ -433,12 +433,7 @@ export default class ExpressionParser extends LValParser { noCalls, ); } else if (this.match(tt.questionDot)) { - if (!this.hasPlugin("optionalChaining")) { - this.raise( - startPos, - "You can only use optional-chaining when the 'optionalChaining' plugin is enabled.", - ); - } + this.expectPlugin("optionalChaining"); if (noCalls && this.lookahead().type == tt.parenL) { state.stop = true; @@ -660,11 +655,11 @@ export default class ExpressionParser extends LValParser { return this.finishNode(node, "Super"); case tt._import: - if (this.hasPlugin("importMeta") && this.lookahead().type === tt.dot) { + if (this.lookahead().type === tt.dot) { return this.parseImportMetaProperty(); } - if (!this.hasPlugin("dynamicImport")) this.unexpected(); + this.expectPlugin("dynamicImport"); node = this.startNode(); this.next(); @@ -712,7 +707,9 @@ export default class ExpressionParser extends LValParser { return id; case tt._do: - if (this.hasPlugin("doExpressions")) { + // TODO + if (true) { + this.expectPlugin("doExpressions"); const node = this.startNode(); this.next(); const oldInFunction = this.state.inFunction; @@ -825,11 +822,7 @@ export default class ExpressionParser extends LValParser { parseFunctionExpression(): N.FunctionExpression | N.MetaProperty { const node = this.startNode(); const meta = this.parseIdentifier(true); - if ( - this.state.inGenerator && - this.hasPlugin("functionSent") && - this.eat(tt.dot) - ) { + if (this.state.inGenerator && this.eat(tt.dot)) { return this.parseMetaProperty(node, meta, "sent"); } return this.parseFunction(node, false); @@ -841,6 +834,16 @@ export default class ExpressionParser extends LValParser { propertyName: string, ): N.MetaProperty { node.meta = meta; + + if (meta.name === "function" && propertyName === "sent") { + if (this.isContextual(propertyName)) { + this.expectPlugin("functionSent"); + } else if (!this.hasPlugin("functionSent")) { + // They didn't actually say `function.sent`, just `function.`, so a simple error would be less confusing. + this.unexpected(); + } + } + node.property = this.parseIdentifier(true); if (node.property.name !== propertyName) { @@ -857,6 +860,18 @@ export default class ExpressionParser extends LValParser { const node = this.startNode(); const id = this.parseIdentifier(true); this.expect(tt.dot); + + if (id.name === "import") { + if (this.isContextual("meta")) { + this.expectPlugin("importMeta"); + } else if (!this.hasPlugin("importMeta")) { + this.raise( + null, + `Dynamic imports require a parameter: import('a.js').then`, + ); + } + } + if (!this.inModule) { this.raise( id.start, @@ -1141,7 +1156,8 @@ export default class ExpressionParser extends LValParser { decorators = []; } - if (this.hasPlugin("objectRestSpread") && this.match(tt.ellipsis)) { + if (this.match(tt.ellipsis)) { + this.expectPlugin("objectRestSpread"); prop = this.parseSpread(isPattern ? { start: 0 } : undefined); if (isPattern) { this.toAssignable(prop, true, "object pattern"); @@ -1199,8 +1215,11 @@ export default class ExpressionParser extends LValParser { prop.computed = false; } else { isAsync = true; - if (this.hasPlugin("asyncGenerators")) - isGenerator = this.eat(tt.star); + if (this.match(tt.star)) { + this.expectPlugin("asyncGenerators"); + this.next(); + isGenerator = true; + } this.parsePropertyName(prop); } } else { diff --git a/src/parser/location.js b/src/parser/location.js index c506fd0928..a037632672 100644 --- a/src/parser/location.js +++ b/src/parser/location.js @@ -10,7 +10,11 @@ import CommentsParser from "./comments"; // message. export default class LocationParser extends CommentsParser { - raise(pos: number, message: string, missingPluginName: string): empty { + raise( + pos: number, + message: string, + missingPluginNames?: Array, + ): empty { const loc = getLineInfo(this.input, pos); message += ` (${loc.line}:${loc.column})`; // $FlowIgnore @@ -19,8 +23,8 @@ export default class LocationParser extends CommentsParser { ); err.pos = pos; err.loc = loc; - if (missingPluginName) { - err.missingPlugin = missingPluginName; + if (missingPluginNames) { + err.missingPlugin = missingPluginNames; } throw err; } diff --git a/src/parser/statement.js b/src/parser/statement.js index d2bce9dce9..610095105a 100644 --- a/src/parser/statement.js +++ b/src/parser/statement.js @@ -237,9 +237,7 @@ export default class StatementParser extends ExpressionParser { } parseDecorator(): N.Decorator { - if (!(this.hasPlugin("decorators") || this.hasPlugin("decorators2"))) { - this.unexpected(); - } + this.expectOnePlugin(["decorators", "decorators2"]); const node = this.startNode(); this.next(); @@ -340,11 +338,8 @@ export default class StatementParser extends ExpressionParser { this.state.labels.push(loopLabel); let forAwait = false; - if ( - this.hasPlugin("asyncGenerators") && - this.state.inAsync && - this.isContextual("await") - ) { + if (this.state.inAsync && this.isContextual("await")) { + this.expectPlugin("asyncGenerators"); forAwait = true; this.next(); } @@ -489,12 +484,13 @@ export default class StatementParser extends ExpressionParser { if (this.match(tt._catch)) { const clause = this.startNode(); this.next(); - if (this.match(tt.parenL) || !this.hasPlugin("optionalCatchBinding")) { + if (this.match(tt.parenL)) { this.expect(tt.parenL); clause.param = this.parseBindingAtom(); this.checkLVal(clause.param, true, Object.create(null), "catch clause"); this.expect(tt.parenR); } else { + this.expectPlugin("optionalCatchBinding"); clause.param = null; } clause.body = this.parseBlock(); @@ -782,12 +778,11 @@ export default class StatementParser extends ExpressionParser { this.initFunction(node, isAsync); if (this.match(tt.star)) { - if (node.async && !this.hasPlugin("asyncGenerators")) { - this.unexpected(); - } else { - node.generator = true; - this.next(); + if (node.async) { + this.expectPlugin("asyncGenerators"); } + node.generator = true; + this.next(); } if ( @@ -960,8 +955,9 @@ export default class StatementParser extends ExpressionParser { isStatic = true; } - if (this.hasPlugin("classPrivateProperties") && this.match(tt.hash)) { + if (this.match(tt.hash)) { // Private property + this.expectPlugin("classPrivateProperties"); this.next(); const privateProp: N.ClassPrivateProperty = memberAny; privateProp.key = this.parseIdentifier(true); @@ -1047,8 +1043,12 @@ export default class StatementParser extends ExpressionParser { this.pushClassProperty(classBody, prop); } else if (isSimple && key.name === "async" && !this.isLineTerminator()) { // an async method - const isGenerator = - this.hasPlugin("asyncGenerators") && this.eat(tt.star); + let isGenerator = false; + if (this.match(tt.star)) { + this.expectPlugin("asyncGenerators"); + this.next(); + isGenerator = true; + } method.kind = "method"; this.parsePropertyName(method); if (this.isNonstaticConstructor(method)) { diff --git a/src/parser/util.js b/src/parser/util.js index 1300637276..c2fb78674a 100644 --- a/src/parser/util.js +++ b/src/parser/util.js @@ -114,8 +114,20 @@ export default class UtilParser extends Tokenizer { if (!this.hasPlugin(name)) { throw this.raise( this.state.start, - `This experimental syntax requires enabling the parser plugin: ${name}`, - name, + `This experimental syntax requires enabling the parser plugin: '${name}'`, + [name], + ); + } + } + + expectOnePlugin(names: Array): void { + if (!names.some(n => this.hasPlugin(n))) { + throw this.raise( + this.state.start, + `This experimental syntax requires enabling the parser plugin(s): '${names.join( + ", ", + )}'`, + names, ); } } diff --git a/test/fixtures/experimental/dynamic-import/direct-calls-only/options.json b/test/fixtures/experimental/dynamic-import/direct-calls-only/options.json index 400eeea626..4bb0327514 100644 --- a/test/fixtures/experimental/dynamic-import/direct-calls-only/options.json +++ b/test/fixtures/experimental/dynamic-import/direct-calls-only/options.json @@ -1,3 +1,3 @@ { - "throws": "Unexpected token, expected ( (2:15)" + "throws": "Dynamic imports require a parameter: import('a.js').then (1:0)" } diff --git a/test/fixtures/experimental/function-sent/disabled-function-keyword-declaration/options.json b/test/fixtures/experimental/function-sent/disabled-function-keyword-declaration/options.json index 9a9a59331e..991da279e5 100644 --- a/test/fixtures/experimental/function-sent/disabled-function-keyword-declaration/options.json +++ b/test/fixtures/experimental/function-sent/disabled-function-keyword-declaration/options.json @@ -1,3 +1,3 @@ { - "throws": "Unexpected token, expected ( (2:10)" + "throws": "This experimental syntax requires enabling the parser plugin: 'functionSent' (2:11)" } diff --git a/test/fixtures/experimental/function-sent/disabled-function-keyword-expression/options.json b/test/fixtures/experimental/function-sent/disabled-function-keyword-expression/options.json index 36c4be02d9..eee5abbf1f 100644 --- a/test/fixtures/experimental/function-sent/disabled-function-keyword-expression/options.json +++ b/test/fixtures/experimental/function-sent/disabled-function-keyword-expression/options.json @@ -1,3 +1,3 @@ { - "throws": "Unexpected token, expected ( (2:11)" + "throws": "This experimental syntax requires enabling the parser plugin: 'functionSent' (2:12)" } diff --git a/test/fixtures/experimental/function-sent/disabled-inside-generator/options.json b/test/fixtures/experimental/function-sent/disabled-inside-generator/options.json index 6127ef0bfb..9ce89a133d 100644 --- a/test/fixtures/experimental/function-sent/disabled-inside-generator/options.json +++ b/test/fixtures/experimental/function-sent/disabled-inside-generator/options.json @@ -1,3 +1,3 @@ { - "throws": "Unexpected token, expected ( (2:17)" + "throws": "This experimental syntax requires enabling the parser plugin: 'functionSent' (2:18)" } diff --git a/test/fixtures/experimental/no-async-generators/error-without-plugin/options.json b/test/fixtures/experimental/no-async-generators/error-without-plugin/options.json index 96a1980f24..4fbfd38e68 100644 --- a/test/fixtures/experimental/no-async-generators/error-without-plugin/options.json +++ b/test/fixtures/experimental/no-async-generators/error-without-plugin/options.json @@ -1,4 +1,4 @@ { - "throws": "Unexpected token (1:15)", + "throws": "This experimental syntax requires enabling the parser plugin: 'asyncGenerators' (1:15)", "plugins": [] -} \ No newline at end of file +} diff --git a/test/fixtures/experimental/no-decorators/error-without-plugin/actual.js b/test/fixtures/experimental/no-decorators/error-without-plugin/actual.js new file mode 100644 index 0000000000..9dea56e7ca --- /dev/null +++ b/test/fixtures/experimental/no-decorators/error-without-plugin/actual.js @@ -0,0 +1,2 @@ +@memoize +function() {} diff --git a/test/fixtures/experimental/no-decorators/error-without-plugin/options.json b/test/fixtures/experimental/no-decorators/error-without-plugin/options.json new file mode 100644 index 0000000000..33a94ed1eb --- /dev/null +++ b/test/fixtures/experimental/no-decorators/error-without-plugin/options.json @@ -0,0 +1,4 @@ +{ + "throws": "This experimental syntax requires enabling the parser plugin(s): 'decorators, decorators2' (1:0)", + "plugins": [] +} diff --git a/test/fixtures/experimental/no-do-expressions/error-without-plugin/actual.js b/test/fixtures/experimental/no-do-expressions/error-without-plugin/actual.js new file mode 100644 index 0000000000..a7c0c31b31 --- /dev/null +++ b/test/fixtures/experimental/no-do-expressions/error-without-plugin/actual.js @@ -0,0 +1 @@ +(do {x}) diff --git a/test/fixtures/experimental/no-do-expressions/error-without-plugin/options.json b/test/fixtures/experimental/no-do-expressions/error-without-plugin/options.json new file mode 100644 index 0000000000..0aaae18db8 --- /dev/null +++ b/test/fixtures/experimental/no-do-expressions/error-without-plugin/options.json @@ -0,0 +1,4 @@ +{ + "throws": "This experimental syntax requires enabling the parser plugin: 'doExpressions' (1:1)", + "plugins": [] +} diff --git a/test/fixtures/experimental/no-dynamic-import/error-without-plugin/actual.js b/test/fixtures/experimental/no-dynamic-import/error-without-plugin/actual.js new file mode 100644 index 0000000000..f0038a3c11 --- /dev/null +++ b/test/fixtures/experimental/no-dynamic-import/error-without-plugin/actual.js @@ -0,0 +1 @@ +var $ = import("jquery"); diff --git a/test/fixtures/experimental/no-dynamic-import/error-without-plugin/options.json b/test/fixtures/experimental/no-dynamic-import/error-without-plugin/options.json new file mode 100644 index 0000000000..90bbfd5623 --- /dev/null +++ b/test/fixtures/experimental/no-dynamic-import/error-without-plugin/options.json @@ -0,0 +1,4 @@ +{ + "throws": "This experimental syntax requires enabling the parser plugin: 'dynamicImport' (1:8)", + "plugins": [] +} diff --git a/test/fixtures/experimental/no-import-meta/error-without-plugin/actual.js b/test/fixtures/experimental/no-import-meta/error-without-plugin/actual.js new file mode 100644 index 0000000000..e1cfc5468e --- /dev/null +++ b/test/fixtures/experimental/no-import-meta/error-without-plugin/actual.js @@ -0,0 +1 @@ +const x = import.meta; diff --git a/test/fixtures/experimental/no-import-meta/error-without-plugin/options.json b/test/fixtures/experimental/no-import-meta/error-without-plugin/options.json new file mode 100644 index 0000000000..48ce55a15d --- /dev/null +++ b/test/fixtures/experimental/no-import-meta/error-without-plugin/options.json @@ -0,0 +1,5 @@ +{ + "throws": "This experimental syntax requires enabling the parser plugin: 'importMeta' (1:17)", + "sourceType": "module", + "plugins": [] +} diff --git a/test/fixtures/experimental/no-object-rest-spread/error-without-plugin/actual.js b/test/fixtures/experimental/no-object-rest-spread/error-without-plugin/actual.js new file mode 100644 index 0000000000..93e64fb4ca --- /dev/null +++ b/test/fixtures/experimental/no-object-rest-spread/error-without-plugin/actual.js @@ -0,0 +1 @@ +({...x}) diff --git a/test/fixtures/experimental/no-object-rest-spread/error-without-plugin/options.json b/test/fixtures/experimental/no-object-rest-spread/error-without-plugin/options.json new file mode 100644 index 0000000000..98dd2ee11d --- /dev/null +++ b/test/fixtures/experimental/no-object-rest-spread/error-without-plugin/options.json @@ -0,0 +1,4 @@ +{ + "throws": "This experimental syntax requires enabling the parser plugin: 'objectRestSpread' (1:2)", + "plugins": [] +} diff --git a/test/fixtures/experimental/optional-catch-binding/no-plugin-no-binding-finally/options.json b/test/fixtures/experimental/optional-catch-binding/no-plugin-no-binding-finally/options.json index 04c3ad7d05..0b022f9ea1 100644 --- a/test/fixtures/experimental/optional-catch-binding/no-plugin-no-binding-finally/options.json +++ b/test/fixtures/experimental/optional-catch-binding/no-plugin-no-binding-finally/options.json @@ -1,3 +1,3 @@ { - "throws": "Unexpected token, expected ( (4:6)" + "throws": "This experimental syntax requires enabling the parser plugin: 'optionalCatchBinding' (4:6)" } diff --git a/test/fixtures/experimental/optional-catch-binding/no-plugin-no-binding/options.json b/test/fixtures/experimental/optional-catch-binding/no-plugin-no-binding/options.json index 04c3ad7d05..0b022f9ea1 100644 --- a/test/fixtures/experimental/optional-catch-binding/no-plugin-no-binding/options.json +++ b/test/fixtures/experimental/optional-catch-binding/no-plugin-no-binding/options.json @@ -1,3 +1,3 @@ { - "throws": "Unexpected token, expected ( (4:6)" + "throws": "This experimental syntax requires enabling the parser plugin: 'optionalCatchBinding' (4:6)" } diff --git a/test/fixtures/experimental/optional-chaining/missing-plugin/options.json b/test/fixtures/experimental/optional-chaining/missing-plugin/options.json index 9aa9db14c9..b8e170c94a 100644 --- a/test/fixtures/experimental/optional-chaining/missing-plugin/options.json +++ b/test/fixtures/experimental/optional-chaining/missing-plugin/options.json @@ -1,3 +1,3 @@ { - "throws": "You can only use optional-chaining when the 'optionalChaining' plugin is enabled. (1:0)" + "throws": "This experimental syntax requires enabling the parser plugin: 'optionalChaining' (1:1)" } From de47b0423f4fb633cef1411ff957e505626f6f9f Mon Sep 17 00:00:00 2001 From: Henry Zhu Date: Thu, 3 Aug 2017 18:00:17 -0400 Subject: [PATCH 3/7] rename folders, add more --- src/parser/expression.js | 2 +- src/parser/statement.js | 9 +++------ src/parser/util.js | 2 +- .../es2017/async-functions/no-method-asi/options.json | 2 +- .../async-functions/object-default-params/actual.js | 0 .../async-functions/object-default-params/expected.json | 0 test/fixtures/experimental/_no-plugin/.bigint/actual.js | 1 + .../.bigint}/options.json | 2 +- .../_no-plugin/.class-private-properties/actual.js | 4 ++++ .../_no-plugin/.class-private-properties/options.json | 4 ++++ .../experimental/_no-plugin/.export-extensions/actual.js | 1 + .../_no-plugin/.export-extensions/options.json | 4 ++++ .../experimental/_no-plugin/.numeric-separator/actual.js | 1 + .../_no-plugin/.numeric-separator/options.json | 4 ++++ .../async-generators}/actual.js | 0 .../async-generators}/options.json | 0 .../actual.js | 0 .../options.json | 4 ++++ .../class-properties-with-initializer}/actual.js | 0 .../class-properties-with-initializer/options.json | 4 ++++ .../class-properties-without-initializer}/actual.js | 0 .../class-properties-without-initializer/options.json | 4 ++++ .../decorators}/actual.js | 0 .../experimental/_no-plugin/decorators/options.json | 4 ++++ .../do-expressions}/actual.js | 0 .../do-expressions}/options.json | 0 .../dynamic-import}/actual.js | 0 .../dynamic-import}/options.json | 0 .../import-meta}/actual.js | 0 .../import-meta}/options.json | 0 .../object-rest-spread}/actual.js | 0 .../object-rest-spread}/options.json | 0 .../optional-chaining}/actual.js | 0 .../optional-chaining}/options.json | 0 .../async-generators/class-method-no-asi/options.json | 2 +- .../with-initializer-and-type-no-plugin/options.json | 4 ---- .../with-initializer-missing-plugin/options.json | 3 --- .../without-initializer-missing-plugin/options.json | 3 --- .../dynamic-import/direct-calls-only/options.json | 2 +- .../identifier-start-0/actual.js | 0 .../identifier-start-0/expected.json | 0 .../invalid-0/actual.js | 0 .../invalid-0/options.json | 0 .../invalid-1/actual.js | 0 .../invalid-1/options.json | 0 .../invalid-10/actual.js | 0 .../invalid-10/options.json | 0 .../invalid-11/actual.js | 0 .../invalid-11/options.json | 0 .../invalid-12/actual.js | 0 .../invalid-12/options.json | 0 .../invalid-13/actual.js | 0 .../invalid-13/options.json | 0 .../invalid-14/actual.js | 0 .../invalid-14/options.json | 0 .../invalid-15/actual.js | 0 .../invalid-15/options.json | 0 .../invalid-16/actual.js | 0 .../invalid-16/options.json | 0 .../invalid-17/actual.js | 0 .../invalid-17/options.json | 0 .../invalid-18/actual.js | 0 .../invalid-18/options.json | 0 .../invalid-19/actual.js | 0 .../invalid-19/options.json | 0 .../invalid-2/actual.js | 0 .../invalid-2/options.json | 0 .../invalid-20/actual.js | 0 .../invalid-20/options.json | 0 .../invalid-21/actual.js | 0 .../invalid-21/options.json | 0 .../invalid-22/actual.js | 0 .../invalid-22/options.json | 0 .../invalid-23/actual.js | 0 .../invalid-23/options.json | 0 .../invalid-24/actual.js | 0 .../invalid-24/options.json | 0 .../invalid-25/actual.js | 0 .../invalid-25/options.json | 0 .../invalid-26/actual.js | 0 .../invalid-26/options.json | 0 .../invalid-27/actual.js | 0 .../invalid-27/options.json | 0 .../invalid-3/actual.js | 0 .../invalid-3/options.json | 0 .../invalid-4/actual.js | 0 .../invalid-4/options.json | 0 .../invalid-5/actual.js | 0 .../invalid-5/options.json | 0 .../invalid-6/actual.js | 0 .../invalid-6/options.json | 0 .../invalid-7/actual.js | 0 .../invalid-7/options.json | 0 .../invalid-8/actual.js | 0 .../invalid-8/options.json | 0 .../invalid-9/actual.js | 0 .../invalid-9/options.json | 0 .../options.json | 0 .../valid-0/actual.js | 0 .../valid-0/expected.json | 0 .../valid-1/actual.js | 0 .../valid-1/expected.json | 0 .../valid-10/actual.js | 0 .../valid-10/expected.json | 0 .../valid-11/actual.js | 0 .../valid-11/expected.json | 0 .../valid-12/actual.js | 0 .../valid-12/expected.json | 0 .../valid-2/actual.js | 0 .../valid-2/expected.json | 0 .../valid-3/actual.js | 0 .../valid-3/expected.json | 0 .../valid-4/actual.js | 0 .../valid-4/expected.json | 0 .../valid-5/actual.js | 0 .../valid-5/expected.json | 0 .../valid-6/actual.js | 0 .../valid-6/expected.json | 0 .../valid-7/actual.js | 0 .../valid-7/expected.json | 0 .../valid-8/actual.js | 0 .../valid-8/expected.json | 0 .../valid-9/actual.js | 0 .../valid-9/expected.json | 0 124 files changed, 44 insertions(+), 22 deletions(-) rename test/fixtures/{experimental => es2017}/async-functions/object-default-params/actual.js (100%) rename test/fixtures/{experimental => es2017}/async-functions/object-default-params/expected.json (100%) create mode 100644 test/fixtures/experimental/_no-plugin/.bigint/actual.js rename test/fixtures/experimental/{no-decorators/error-without-plugin => _no-plugin/.bigint}/options.json (63%) create mode 100644 test/fixtures/experimental/_no-plugin/.class-private-properties/actual.js create mode 100644 test/fixtures/experimental/_no-plugin/.class-private-properties/options.json create mode 100644 test/fixtures/experimental/_no-plugin/.export-extensions/actual.js create mode 100644 test/fixtures/experimental/_no-plugin/.export-extensions/options.json create mode 100644 test/fixtures/experimental/_no-plugin/.numeric-separator/actual.js create mode 100644 test/fixtures/experimental/_no-plugin/.numeric-separator/options.json rename test/fixtures/experimental/{no-async-generators/error-without-plugin => _no-plugin/async-generators}/actual.js (100%) rename test/fixtures/experimental/{no-async-generators/error-without-plugin => _no-plugin/async-generators}/options.json (100%) rename test/fixtures/experimental/{class-properties/with-initializer-and-type-no-plugin => _no-plugin/class-properties-with-initializer-and-type}/actual.js (100%) create mode 100644 test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json rename test/fixtures/experimental/{class-properties/with-initializer-missing-plugin => _no-plugin/class-properties-with-initializer}/actual.js (100%) create mode 100644 test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json rename test/fixtures/experimental/{class-properties/without-initializer-missing-plugin => _no-plugin/class-properties-without-initializer}/actual.js (100%) create mode 100644 test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json rename test/fixtures/experimental/{no-decorators/error-without-plugin => _no-plugin/decorators}/actual.js (100%) create mode 100644 test/fixtures/experimental/_no-plugin/decorators/options.json rename test/fixtures/experimental/{no-do-expressions/error-without-plugin => _no-plugin/do-expressions}/actual.js (100%) rename test/fixtures/experimental/{no-do-expressions/error-without-plugin => _no-plugin/do-expressions}/options.json (100%) rename test/fixtures/experimental/{no-dynamic-import/error-without-plugin => _no-plugin/dynamic-import}/actual.js (100%) rename test/fixtures/experimental/{no-dynamic-import/error-without-plugin => _no-plugin/dynamic-import}/options.json (100%) rename test/fixtures/experimental/{no-import-meta/error-without-plugin => _no-plugin/import-meta}/actual.js (100%) rename test/fixtures/experimental/{no-import-meta/error-without-plugin => _no-plugin/import-meta}/options.json (100%) rename test/fixtures/experimental/{no-object-rest-spread/error-without-plugin => _no-plugin/object-rest-spread}/actual.js (100%) rename test/fixtures/experimental/{no-object-rest-spread/error-without-plugin => _no-plugin/object-rest-spread}/options.json (100%) rename test/fixtures/experimental/{optional-chaining/missing-plugin => _no-plugin/optional-chaining}/actual.js (100%) rename test/fixtures/experimental/{optional-chaining/missing-plugin => _no-plugin/optional-chaining}/options.json (100%) delete mode 100644 test/fixtures/experimental/class-properties/with-initializer-and-type-no-plugin/options.json delete mode 100644 test/fixtures/experimental/class-properties/with-initializer-missing-plugin/options.json delete mode 100644 test/fixtures/experimental/class-properties/without-initializer-missing-plugin/options.json rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/identifier-start-0/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/identifier-start-0/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-0/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-0/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-1/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-1/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-10/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-10/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-11/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-11/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-12/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-12/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-13/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-13/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-14/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-14/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-15/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-15/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-16/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-16/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-17/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-17/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-18/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-18/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-19/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-19/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-2/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-2/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-20/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-20/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-21/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-21/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-22/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-22/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-23/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-23/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-24/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-24/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-25/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-25/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-26/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-26/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-27/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-27/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-3/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-3/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-4/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-4/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-5/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-5/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-6/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-6/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-7/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-7/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-8/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-8/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-9/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/invalid-9/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/options.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-0/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-0/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-1/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-1/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-10/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-10/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-11/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-11/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-12/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-12/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-2/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-2/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-3/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-3/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-4/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-4/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-5/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-5/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-6/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-6/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-7/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-7/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-8/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-8/expected.json (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-9/actual.js (100%) rename test/fixtures/experimental/{numeric-literal-separator => numeric-separator}/valid-9/expected.json (100%) diff --git a/src/parser/expression.js b/src/parser/expression.js index c6626b1338..9a3ea211cc 100644 --- a/src/parser/expression.js +++ b/src/parser/expression.js @@ -866,7 +866,7 @@ export default class ExpressionParser extends LValParser { this.expectPlugin("importMeta"); } else if (!this.hasPlugin("importMeta")) { this.raise( - null, + id.start, `Dynamic imports require a parameter: import('a.js').then`, ); } diff --git a/src/parser/statement.js b/src/parser/statement.js index 610095105a..074f8b9177 100644 --- a/src/parser/statement.js +++ b/src/parser/statement.js @@ -1151,17 +1151,14 @@ export default class StatementParser extends ExpressionParser { } parseClassProperty(node: N.ClassProperty): N.ClassProperty { - const noPluginMsg = - "You can only use Class Properties when the 'classProperties' plugin is enabled."; - if (!node.typeAnnotation && !this.hasPlugin("classProperties")) { - this.raise(node.start, noPluginMsg); + if (!node.typeAnnotation) { + this.expectOnePlugin(["classProperties"]); } this.state.inClassProperty = true; if (this.match(tt.eq)) { - if (!this.hasPlugin("classProperties")) - this.raise(this.state.start, noPluginMsg); + this.expectOnePlugin(["classProperties"]); this.next(); node.value = this.parseMaybeAssign(); } else { diff --git a/src/parser/util.js b/src/parser/util.js index c2fb78674a..52587e3322 100644 --- a/src/parser/util.js +++ b/src/parser/util.js @@ -124,7 +124,7 @@ export default class UtilParser extends Tokenizer { if (!names.some(n => this.hasPlugin(n))) { throw this.raise( this.state.start, - `This experimental syntax requires enabling the parser plugin(s): '${names.join( + `This experimental syntax requires enabling one of the following parser plugin(s): '${names.join( ", ", )}'`, names, diff --git a/test/fixtures/es2017/async-functions/no-method-asi/options.json b/test/fixtures/es2017/async-functions/no-method-asi/options.json index af38bd1530..5a0c1ff7f5 100644 --- a/test/fixtures/es2017/async-functions/no-method-asi/options.json +++ b/test/fixtures/es2017/async-functions/no-method-asi/options.json @@ -1,3 +1,3 @@ { - "throws": "You can only use Class Properties when the 'classProperties' plugin is enabled. (2:2)" + "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties, typescript' (3:2)" } diff --git a/test/fixtures/experimental/async-functions/object-default-params/actual.js b/test/fixtures/es2017/async-functions/object-default-params/actual.js similarity index 100% rename from test/fixtures/experimental/async-functions/object-default-params/actual.js rename to test/fixtures/es2017/async-functions/object-default-params/actual.js diff --git a/test/fixtures/experimental/async-functions/object-default-params/expected.json b/test/fixtures/es2017/async-functions/object-default-params/expected.json similarity index 100% rename from test/fixtures/experimental/async-functions/object-default-params/expected.json rename to test/fixtures/es2017/async-functions/object-default-params/expected.json diff --git a/test/fixtures/experimental/_no-plugin/.bigint/actual.js b/test/fixtures/experimental/_no-plugin/.bigint/actual.js new file mode 100644 index 0000000000..7a5a058e16 --- /dev/null +++ b/test/fixtures/experimental/_no-plugin/.bigint/actual.js @@ -0,0 +1 @@ +1n diff --git a/test/fixtures/experimental/no-decorators/error-without-plugin/options.json b/test/fixtures/experimental/_no-plugin/.bigint/options.json similarity index 63% rename from test/fixtures/experimental/no-decorators/error-without-plugin/options.json rename to test/fixtures/experimental/_no-plugin/.bigint/options.json index 33a94ed1eb..8e44fabed2 100644 --- a/test/fixtures/experimental/no-decorators/error-without-plugin/options.json +++ b/test/fixtures/experimental/_no-plugin/.bigint/options.json @@ -1,4 +1,4 @@ { - "throws": "This experimental syntax requires enabling the parser plugin(s): 'decorators, decorators2' (1:0)", + "throws": "This experimental syntax requires enabling the parser plugin: 'bigInt' (1:1)", "plugins": [] } diff --git a/test/fixtures/experimental/_no-plugin/.class-private-properties/actual.js b/test/fixtures/experimental/_no-plugin/.class-private-properties/actual.js new file mode 100644 index 0000000000..07fa01ba84 --- /dev/null +++ b/test/fixtures/experimental/_no-plugin/.class-private-properties/actual.js @@ -0,0 +1,4 @@ +class Point { + #x = 1; + #y = 2; +} diff --git a/test/fixtures/experimental/_no-plugin/.class-private-properties/options.json b/test/fixtures/experimental/_no-plugin/.class-private-properties/options.json new file mode 100644 index 0000000000..85d7fee65f --- /dev/null +++ b/test/fixtures/experimental/_no-plugin/.class-private-properties/options.json @@ -0,0 +1,4 @@ +{ + "throws": "This experimental syntax requires enabling the parser plugin: 'classPrivateProperties' (2:3)", + "plugins": [] +} diff --git a/test/fixtures/experimental/_no-plugin/.export-extensions/actual.js b/test/fixtures/experimental/_no-plugin/.export-extensions/actual.js new file mode 100644 index 0000000000..8493ca5743 --- /dev/null +++ b/test/fixtures/experimental/_no-plugin/.export-extensions/actual.js @@ -0,0 +1 @@ +export A from 'test'; diff --git a/test/fixtures/experimental/_no-plugin/.export-extensions/options.json b/test/fixtures/experimental/_no-plugin/.export-extensions/options.json new file mode 100644 index 0000000000..5c7b8e4dbf --- /dev/null +++ b/test/fixtures/experimental/_no-plugin/.export-extensions/options.json @@ -0,0 +1,4 @@ +{ + "throws": "This experimental syntax requires enabling the parser plugin: 'exportExtensions' (1:1)", + "plugins": [] +} diff --git a/test/fixtures/experimental/_no-plugin/.numeric-separator/actual.js b/test/fixtures/experimental/_no-plugin/.numeric-separator/actual.js new file mode 100644 index 0000000000..ee01ab4260 --- /dev/null +++ b/test/fixtures/experimental/_no-plugin/.numeric-separator/actual.js @@ -0,0 +1 @@ +1_0 diff --git a/test/fixtures/experimental/_no-plugin/.numeric-separator/options.json b/test/fixtures/experimental/_no-plugin/.numeric-separator/options.json new file mode 100644 index 0000000000..6996ba6f15 --- /dev/null +++ b/test/fixtures/experimental/_no-plugin/.numeric-separator/options.json @@ -0,0 +1,4 @@ +{ + "throws": "This experimental syntax requires enabling the parser plugin: 'numericSeparator' (1:17)", + "plugins": [] +} diff --git a/test/fixtures/experimental/no-async-generators/error-without-plugin/actual.js b/test/fixtures/experimental/_no-plugin/async-generators/actual.js similarity index 100% rename from test/fixtures/experimental/no-async-generators/error-without-plugin/actual.js rename to test/fixtures/experimental/_no-plugin/async-generators/actual.js diff --git a/test/fixtures/experimental/no-async-generators/error-without-plugin/options.json b/test/fixtures/experimental/_no-plugin/async-generators/options.json similarity index 100% rename from test/fixtures/experimental/no-async-generators/error-without-plugin/options.json rename to test/fixtures/experimental/_no-plugin/async-generators/options.json diff --git a/test/fixtures/experimental/class-properties/with-initializer-and-type-no-plugin/actual.js b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/actual.js similarity index 100% rename from test/fixtures/experimental/class-properties/with-initializer-and-type-no-plugin/actual.js rename to test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/actual.js diff --git a/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json new file mode 100644 index 0000000000..bb0837f99c --- /dev/null +++ b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["flow"], + "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties, typescript' (2:14)" +} diff --git a/test/fixtures/experimental/class-properties/with-initializer-missing-plugin/actual.js b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/actual.js similarity index 100% rename from test/fixtures/experimental/class-properties/with-initializer-missing-plugin/actual.js rename to test/fixtures/experimental/_no-plugin/class-properties-with-initializer/actual.js diff --git a/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json new file mode 100644 index 0000000000..ab84fa6cc8 --- /dev/null +++ b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json @@ -0,0 +1,4 @@ +{ + "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties, typescript' (2:6)", + "plugins": [] +} diff --git a/test/fixtures/experimental/class-properties/without-initializer-missing-plugin/actual.js b/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/actual.js similarity index 100% rename from test/fixtures/experimental/class-properties/without-initializer-missing-plugin/actual.js rename to test/fixtures/experimental/_no-plugin/class-properties-without-initializer/actual.js diff --git a/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json b/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json new file mode 100644 index 0000000000..787eab7a69 --- /dev/null +++ b/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json @@ -0,0 +1,4 @@ +{ + "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties, typescript' (2:5)", + "plugins": [] +} diff --git a/test/fixtures/experimental/no-decorators/error-without-plugin/actual.js b/test/fixtures/experimental/_no-plugin/decorators/actual.js similarity index 100% rename from test/fixtures/experimental/no-decorators/error-without-plugin/actual.js rename to test/fixtures/experimental/_no-plugin/decorators/actual.js diff --git a/test/fixtures/experimental/_no-plugin/decorators/options.json b/test/fixtures/experimental/_no-plugin/decorators/options.json new file mode 100644 index 0000000000..d7fe449b7a --- /dev/null +++ b/test/fixtures/experimental/_no-plugin/decorators/options.json @@ -0,0 +1,4 @@ +{ + "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'decorators, decorators2' (1:0)", + "plugins": [] +} diff --git a/test/fixtures/experimental/no-do-expressions/error-without-plugin/actual.js b/test/fixtures/experimental/_no-plugin/do-expressions/actual.js similarity index 100% rename from test/fixtures/experimental/no-do-expressions/error-without-plugin/actual.js rename to test/fixtures/experimental/_no-plugin/do-expressions/actual.js diff --git a/test/fixtures/experimental/no-do-expressions/error-without-plugin/options.json b/test/fixtures/experimental/_no-plugin/do-expressions/options.json similarity index 100% rename from test/fixtures/experimental/no-do-expressions/error-without-plugin/options.json rename to test/fixtures/experimental/_no-plugin/do-expressions/options.json diff --git a/test/fixtures/experimental/no-dynamic-import/error-without-plugin/actual.js b/test/fixtures/experimental/_no-plugin/dynamic-import/actual.js similarity index 100% rename from test/fixtures/experimental/no-dynamic-import/error-without-plugin/actual.js rename to test/fixtures/experimental/_no-plugin/dynamic-import/actual.js diff --git a/test/fixtures/experimental/no-dynamic-import/error-without-plugin/options.json b/test/fixtures/experimental/_no-plugin/dynamic-import/options.json similarity index 100% rename from test/fixtures/experimental/no-dynamic-import/error-without-plugin/options.json rename to test/fixtures/experimental/_no-plugin/dynamic-import/options.json diff --git a/test/fixtures/experimental/no-import-meta/error-without-plugin/actual.js b/test/fixtures/experimental/_no-plugin/import-meta/actual.js similarity index 100% rename from test/fixtures/experimental/no-import-meta/error-without-plugin/actual.js rename to test/fixtures/experimental/_no-plugin/import-meta/actual.js diff --git a/test/fixtures/experimental/no-import-meta/error-without-plugin/options.json b/test/fixtures/experimental/_no-plugin/import-meta/options.json similarity index 100% rename from test/fixtures/experimental/no-import-meta/error-without-plugin/options.json rename to test/fixtures/experimental/_no-plugin/import-meta/options.json diff --git a/test/fixtures/experimental/no-object-rest-spread/error-without-plugin/actual.js b/test/fixtures/experimental/_no-plugin/object-rest-spread/actual.js similarity index 100% rename from test/fixtures/experimental/no-object-rest-spread/error-without-plugin/actual.js rename to test/fixtures/experimental/_no-plugin/object-rest-spread/actual.js diff --git a/test/fixtures/experimental/no-object-rest-spread/error-without-plugin/options.json b/test/fixtures/experimental/_no-plugin/object-rest-spread/options.json similarity index 100% rename from test/fixtures/experimental/no-object-rest-spread/error-without-plugin/options.json rename to test/fixtures/experimental/_no-plugin/object-rest-spread/options.json diff --git a/test/fixtures/experimental/optional-chaining/missing-plugin/actual.js b/test/fixtures/experimental/_no-plugin/optional-chaining/actual.js similarity index 100% rename from test/fixtures/experimental/optional-chaining/missing-plugin/actual.js rename to test/fixtures/experimental/_no-plugin/optional-chaining/actual.js diff --git a/test/fixtures/experimental/optional-chaining/missing-plugin/options.json b/test/fixtures/experimental/_no-plugin/optional-chaining/options.json similarity index 100% rename from test/fixtures/experimental/optional-chaining/missing-plugin/options.json rename to test/fixtures/experimental/_no-plugin/optional-chaining/options.json diff --git a/test/fixtures/experimental/async-generators/class-method-no-asi/options.json b/test/fixtures/experimental/async-generators/class-method-no-asi/options.json index af38bd1530..5a0c1ff7f5 100644 --- a/test/fixtures/experimental/async-generators/class-method-no-asi/options.json +++ b/test/fixtures/experimental/async-generators/class-method-no-asi/options.json @@ -1,3 +1,3 @@ { - "throws": "You can only use Class Properties when the 'classProperties' plugin is enabled. (2:2)" + "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties, typescript' (3:2)" } diff --git a/test/fixtures/experimental/class-properties/with-initializer-and-type-no-plugin/options.json b/test/fixtures/experimental/class-properties/with-initializer-and-type-no-plugin/options.json deleted file mode 100644 index e185feb80a..0000000000 --- a/test/fixtures/experimental/class-properties/with-initializer-and-type-no-plugin/options.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "plugins": ["flow"], - "throws": "You can only use Class Properties when the 'classProperties' plugin is enabled. (2:14)" -} diff --git a/test/fixtures/experimental/class-properties/with-initializer-missing-plugin/options.json b/test/fixtures/experimental/class-properties/with-initializer-missing-plugin/options.json deleted file mode 100644 index af38bd1530..0000000000 --- a/test/fixtures/experimental/class-properties/with-initializer-missing-plugin/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "throws": "You can only use Class Properties when the 'classProperties' plugin is enabled. (2:2)" -} diff --git a/test/fixtures/experimental/class-properties/without-initializer-missing-plugin/options.json b/test/fixtures/experimental/class-properties/without-initializer-missing-plugin/options.json deleted file mode 100644 index af38bd1530..0000000000 --- a/test/fixtures/experimental/class-properties/without-initializer-missing-plugin/options.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "throws": "You can only use Class Properties when the 'classProperties' plugin is enabled. (2:2)" -} diff --git a/test/fixtures/experimental/dynamic-import/direct-calls-only/options.json b/test/fixtures/experimental/dynamic-import/direct-calls-only/options.json index 4bb0327514..468132c26a 100644 --- a/test/fixtures/experimental/dynamic-import/direct-calls-only/options.json +++ b/test/fixtures/experimental/dynamic-import/direct-calls-only/options.json @@ -1,3 +1,3 @@ { - "throws": "Dynamic imports require a parameter: import('a.js').then (1:0)" + "throws": "Dynamic imports require a parameter: import('a.js').then (2:9)" } diff --git a/test/fixtures/experimental/numeric-literal-separator/identifier-start-0/actual.js b/test/fixtures/experimental/numeric-separator/identifier-start-0/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/identifier-start-0/actual.js rename to test/fixtures/experimental/numeric-separator/identifier-start-0/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/identifier-start-0/expected.json b/test/fixtures/experimental/numeric-separator/identifier-start-0/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/identifier-start-0/expected.json rename to test/fixtures/experimental/numeric-separator/identifier-start-0/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-0/actual.js b/test/fixtures/experimental/numeric-separator/invalid-0/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-0/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-0/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-0/options.json b/test/fixtures/experimental/numeric-separator/invalid-0/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-0/options.json rename to test/fixtures/experimental/numeric-separator/invalid-0/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-1/actual.js b/test/fixtures/experimental/numeric-separator/invalid-1/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-1/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-1/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-1/options.json b/test/fixtures/experimental/numeric-separator/invalid-1/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-1/options.json rename to test/fixtures/experimental/numeric-separator/invalid-1/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-10/actual.js b/test/fixtures/experimental/numeric-separator/invalid-10/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-10/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-10/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-10/options.json b/test/fixtures/experimental/numeric-separator/invalid-10/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-10/options.json rename to test/fixtures/experimental/numeric-separator/invalid-10/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-11/actual.js b/test/fixtures/experimental/numeric-separator/invalid-11/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-11/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-11/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-11/options.json b/test/fixtures/experimental/numeric-separator/invalid-11/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-11/options.json rename to test/fixtures/experimental/numeric-separator/invalid-11/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-12/actual.js b/test/fixtures/experimental/numeric-separator/invalid-12/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-12/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-12/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-12/options.json b/test/fixtures/experimental/numeric-separator/invalid-12/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-12/options.json rename to test/fixtures/experimental/numeric-separator/invalid-12/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-13/actual.js b/test/fixtures/experimental/numeric-separator/invalid-13/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-13/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-13/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-13/options.json b/test/fixtures/experimental/numeric-separator/invalid-13/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-13/options.json rename to test/fixtures/experimental/numeric-separator/invalid-13/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-14/actual.js b/test/fixtures/experimental/numeric-separator/invalid-14/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-14/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-14/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-14/options.json b/test/fixtures/experimental/numeric-separator/invalid-14/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-14/options.json rename to test/fixtures/experimental/numeric-separator/invalid-14/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-15/actual.js b/test/fixtures/experimental/numeric-separator/invalid-15/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-15/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-15/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-15/options.json b/test/fixtures/experimental/numeric-separator/invalid-15/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-15/options.json rename to test/fixtures/experimental/numeric-separator/invalid-15/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-16/actual.js b/test/fixtures/experimental/numeric-separator/invalid-16/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-16/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-16/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-16/options.json b/test/fixtures/experimental/numeric-separator/invalid-16/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-16/options.json rename to test/fixtures/experimental/numeric-separator/invalid-16/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-17/actual.js b/test/fixtures/experimental/numeric-separator/invalid-17/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-17/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-17/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-17/options.json b/test/fixtures/experimental/numeric-separator/invalid-17/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-17/options.json rename to test/fixtures/experimental/numeric-separator/invalid-17/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-18/actual.js b/test/fixtures/experimental/numeric-separator/invalid-18/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-18/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-18/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-18/options.json b/test/fixtures/experimental/numeric-separator/invalid-18/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-18/options.json rename to test/fixtures/experimental/numeric-separator/invalid-18/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-19/actual.js b/test/fixtures/experimental/numeric-separator/invalid-19/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-19/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-19/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-19/options.json b/test/fixtures/experimental/numeric-separator/invalid-19/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-19/options.json rename to test/fixtures/experimental/numeric-separator/invalid-19/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-2/actual.js b/test/fixtures/experimental/numeric-separator/invalid-2/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-2/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-2/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-2/options.json b/test/fixtures/experimental/numeric-separator/invalid-2/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-2/options.json rename to test/fixtures/experimental/numeric-separator/invalid-2/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-20/actual.js b/test/fixtures/experimental/numeric-separator/invalid-20/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-20/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-20/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-20/options.json b/test/fixtures/experimental/numeric-separator/invalid-20/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-20/options.json rename to test/fixtures/experimental/numeric-separator/invalid-20/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-21/actual.js b/test/fixtures/experimental/numeric-separator/invalid-21/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-21/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-21/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-21/options.json b/test/fixtures/experimental/numeric-separator/invalid-21/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-21/options.json rename to test/fixtures/experimental/numeric-separator/invalid-21/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-22/actual.js b/test/fixtures/experimental/numeric-separator/invalid-22/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-22/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-22/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-22/options.json b/test/fixtures/experimental/numeric-separator/invalid-22/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-22/options.json rename to test/fixtures/experimental/numeric-separator/invalid-22/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-23/actual.js b/test/fixtures/experimental/numeric-separator/invalid-23/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-23/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-23/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-23/options.json b/test/fixtures/experimental/numeric-separator/invalid-23/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-23/options.json rename to test/fixtures/experimental/numeric-separator/invalid-23/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-24/actual.js b/test/fixtures/experimental/numeric-separator/invalid-24/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-24/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-24/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-24/options.json b/test/fixtures/experimental/numeric-separator/invalid-24/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-24/options.json rename to test/fixtures/experimental/numeric-separator/invalid-24/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-25/actual.js b/test/fixtures/experimental/numeric-separator/invalid-25/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-25/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-25/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-25/options.json b/test/fixtures/experimental/numeric-separator/invalid-25/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-25/options.json rename to test/fixtures/experimental/numeric-separator/invalid-25/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-26/actual.js b/test/fixtures/experimental/numeric-separator/invalid-26/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-26/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-26/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-26/options.json b/test/fixtures/experimental/numeric-separator/invalid-26/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-26/options.json rename to test/fixtures/experimental/numeric-separator/invalid-26/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-27/actual.js b/test/fixtures/experimental/numeric-separator/invalid-27/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-27/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-27/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-27/options.json b/test/fixtures/experimental/numeric-separator/invalid-27/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-27/options.json rename to test/fixtures/experimental/numeric-separator/invalid-27/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-3/actual.js b/test/fixtures/experimental/numeric-separator/invalid-3/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-3/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-3/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-3/options.json b/test/fixtures/experimental/numeric-separator/invalid-3/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-3/options.json rename to test/fixtures/experimental/numeric-separator/invalid-3/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-4/actual.js b/test/fixtures/experimental/numeric-separator/invalid-4/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-4/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-4/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-4/options.json b/test/fixtures/experimental/numeric-separator/invalid-4/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-4/options.json rename to test/fixtures/experimental/numeric-separator/invalid-4/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-5/actual.js b/test/fixtures/experimental/numeric-separator/invalid-5/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-5/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-5/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-5/options.json b/test/fixtures/experimental/numeric-separator/invalid-5/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-5/options.json rename to test/fixtures/experimental/numeric-separator/invalid-5/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-6/actual.js b/test/fixtures/experimental/numeric-separator/invalid-6/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-6/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-6/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-6/options.json b/test/fixtures/experimental/numeric-separator/invalid-6/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-6/options.json rename to test/fixtures/experimental/numeric-separator/invalid-6/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-7/actual.js b/test/fixtures/experimental/numeric-separator/invalid-7/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-7/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-7/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-7/options.json b/test/fixtures/experimental/numeric-separator/invalid-7/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-7/options.json rename to test/fixtures/experimental/numeric-separator/invalid-7/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-8/actual.js b/test/fixtures/experimental/numeric-separator/invalid-8/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-8/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-8/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-8/options.json b/test/fixtures/experimental/numeric-separator/invalid-8/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-8/options.json rename to test/fixtures/experimental/numeric-separator/invalid-8/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-9/actual.js b/test/fixtures/experimental/numeric-separator/invalid-9/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-9/actual.js rename to test/fixtures/experimental/numeric-separator/invalid-9/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/invalid-9/options.json b/test/fixtures/experimental/numeric-separator/invalid-9/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/invalid-9/options.json rename to test/fixtures/experimental/numeric-separator/invalid-9/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/options.json b/test/fixtures/experimental/numeric-separator/options.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/options.json rename to test/fixtures/experimental/numeric-separator/options.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-0/actual.js b/test/fixtures/experimental/numeric-separator/valid-0/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-0/actual.js rename to test/fixtures/experimental/numeric-separator/valid-0/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-0/expected.json b/test/fixtures/experimental/numeric-separator/valid-0/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-0/expected.json rename to test/fixtures/experimental/numeric-separator/valid-0/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-1/actual.js b/test/fixtures/experimental/numeric-separator/valid-1/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-1/actual.js rename to test/fixtures/experimental/numeric-separator/valid-1/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-1/expected.json b/test/fixtures/experimental/numeric-separator/valid-1/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-1/expected.json rename to test/fixtures/experimental/numeric-separator/valid-1/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-10/actual.js b/test/fixtures/experimental/numeric-separator/valid-10/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-10/actual.js rename to test/fixtures/experimental/numeric-separator/valid-10/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-10/expected.json b/test/fixtures/experimental/numeric-separator/valid-10/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-10/expected.json rename to test/fixtures/experimental/numeric-separator/valid-10/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-11/actual.js b/test/fixtures/experimental/numeric-separator/valid-11/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-11/actual.js rename to test/fixtures/experimental/numeric-separator/valid-11/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-11/expected.json b/test/fixtures/experimental/numeric-separator/valid-11/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-11/expected.json rename to test/fixtures/experimental/numeric-separator/valid-11/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-12/actual.js b/test/fixtures/experimental/numeric-separator/valid-12/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-12/actual.js rename to test/fixtures/experimental/numeric-separator/valid-12/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-12/expected.json b/test/fixtures/experimental/numeric-separator/valid-12/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-12/expected.json rename to test/fixtures/experimental/numeric-separator/valid-12/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-2/actual.js b/test/fixtures/experimental/numeric-separator/valid-2/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-2/actual.js rename to test/fixtures/experimental/numeric-separator/valid-2/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-2/expected.json b/test/fixtures/experimental/numeric-separator/valid-2/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-2/expected.json rename to test/fixtures/experimental/numeric-separator/valid-2/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-3/actual.js b/test/fixtures/experimental/numeric-separator/valid-3/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-3/actual.js rename to test/fixtures/experimental/numeric-separator/valid-3/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-3/expected.json b/test/fixtures/experimental/numeric-separator/valid-3/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-3/expected.json rename to test/fixtures/experimental/numeric-separator/valid-3/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-4/actual.js b/test/fixtures/experimental/numeric-separator/valid-4/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-4/actual.js rename to test/fixtures/experimental/numeric-separator/valid-4/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-4/expected.json b/test/fixtures/experimental/numeric-separator/valid-4/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-4/expected.json rename to test/fixtures/experimental/numeric-separator/valid-4/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-5/actual.js b/test/fixtures/experimental/numeric-separator/valid-5/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-5/actual.js rename to test/fixtures/experimental/numeric-separator/valid-5/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-5/expected.json b/test/fixtures/experimental/numeric-separator/valid-5/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-5/expected.json rename to test/fixtures/experimental/numeric-separator/valid-5/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-6/actual.js b/test/fixtures/experimental/numeric-separator/valid-6/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-6/actual.js rename to test/fixtures/experimental/numeric-separator/valid-6/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-6/expected.json b/test/fixtures/experimental/numeric-separator/valid-6/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-6/expected.json rename to test/fixtures/experimental/numeric-separator/valid-6/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-7/actual.js b/test/fixtures/experimental/numeric-separator/valid-7/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-7/actual.js rename to test/fixtures/experimental/numeric-separator/valid-7/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-7/expected.json b/test/fixtures/experimental/numeric-separator/valid-7/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-7/expected.json rename to test/fixtures/experimental/numeric-separator/valid-7/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-8/actual.js b/test/fixtures/experimental/numeric-separator/valid-8/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-8/actual.js rename to test/fixtures/experimental/numeric-separator/valid-8/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-8/expected.json b/test/fixtures/experimental/numeric-separator/valid-8/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-8/expected.json rename to test/fixtures/experimental/numeric-separator/valid-8/expected.json diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-9/actual.js b/test/fixtures/experimental/numeric-separator/valid-9/actual.js similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-9/actual.js rename to test/fixtures/experimental/numeric-separator/valid-9/actual.js diff --git a/test/fixtures/experimental/numeric-literal-separator/valid-9/expected.json b/test/fixtures/experimental/numeric-separator/valid-9/expected.json similarity index 100% rename from test/fixtures/experimental/numeric-literal-separator/valid-9/expected.json rename to test/fixtures/experimental/numeric-separator/valid-9/expected.json From dfb279f47884a0d3b4428353918d01eaa8da3098 Mon Sep 17 00:00:00 2001 From: Daniel Tschinder Date: Sat, 19 Aug 2017 01:30:14 +0200 Subject: [PATCH 4/7] Add test for function. --- .../experimental/function-sent/invalid-syntax/actual.js | 3 +++ .../experimental/function-sent/invalid-syntax/options.json | 3 +++ 2 files changed, 6 insertions(+) create mode 100644 test/fixtures/experimental/function-sent/invalid-syntax/actual.js create mode 100644 test/fixtures/experimental/function-sent/invalid-syntax/options.json diff --git a/test/fixtures/experimental/function-sent/invalid-syntax/actual.js b/test/fixtures/experimental/function-sent/invalid-syntax/actual.js new file mode 100644 index 0000000000..bc349cb245 --- /dev/null +++ b/test/fixtures/experimental/function-sent/invalid-syntax/actual.js @@ -0,0 +1,3 @@ +function* foo() { + if (true) function.; +} diff --git a/test/fixtures/experimental/function-sent/invalid-syntax/options.json b/test/fixtures/experimental/function-sent/invalid-syntax/options.json new file mode 100644 index 0000000000..94f431e7de --- /dev/null +++ b/test/fixtures/experimental/function-sent/invalid-syntax/options.json @@ -0,0 +1,3 @@ +{ + "throws": "Unexpected token (2:21)" +} From aec1bdb359ff6dc461a6b428bb69e3edf53e53dc Mon Sep 17 00:00:00 2001 From: Daniel Tschinder Date: Sat, 19 Aug 2017 10:39:49 +0200 Subject: [PATCH 5/7] Enable no-case-declarations to prevent bugs and remove if (true) --- .eslintrc | 3 ++- src/parser/expression.js | 37 +++++++++++++++++++------------------ src/parser/lval.js | 6 ++++-- src/plugins/typescript.js | 13 ++++++++----- src/tokenizer/index.js | 4 +++- 5 files changed, 36 insertions(+), 27 deletions(-) diff --git a/.eslintrc b/.eslintrc index 22749b4b7c..6acf2455fa 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,7 +5,8 @@ "prettier" ], "rules": { - "prettier/prettier": ["error", { "trailingComma": "all" }] + "prettier/prettier": ["error", { "trailingComma": "all" }], + "no-case-declarations": "error" }, "env": { "node": true diff --git a/src/parser/expression.js b/src/parser/expression.js index 9a3ea211cc..642bffa83c 100644 --- a/src/parser/expression.js +++ b/src/parser/expression.js @@ -676,7 +676,7 @@ export default class ExpressionParser extends LValParser { case tt._yield: if (this.state.inGenerator) this.unexpected(); - case tt.name: + case tt.name: { node = this.startNode(); const allowAwait = this.state.value === "await" && this.state.inAsync; const allowYield = this.shouldAllowYieldIdentifier(); @@ -705,29 +705,29 @@ export default class ExpressionParser extends LValParser { } return id; + } - case tt._do: - // TODO - if (true) { - this.expectPlugin("doExpressions"); - const node = this.startNode(); - this.next(); - const oldInFunction = this.state.inFunction; - const oldLabels = this.state.labels; - this.state.labels = []; - this.state.inFunction = false; - node.body = this.parseBlock(false); - this.state.inFunction = oldInFunction; - this.state.labels = oldLabels; - return this.finishNode(node, "DoExpression"); - } + case tt._do: { + this.expectPlugin("doExpressions"); + const node = this.startNode(); + this.next(); + const oldInFunction = this.state.inFunction; + const oldLabels = this.state.labels; + this.state.labels = []; + this.state.inFunction = false; + node.body = this.parseBlock(false); + this.state.inFunction = oldInFunction; + this.state.labels = oldLabels; + return this.finishNode(node, "DoExpression"); + } - case tt.regexp: + case tt.regexp: { const value = this.state.value; node = this.parseLiteral(value.value, "RegExpLiteral"); node.pattern = value.pattern; node.flags = value.flags; return node; + } case tt.num: return this.parseLiteral(this.state.value, "NumericLiteral"); @@ -781,7 +781,7 @@ export default class ExpressionParser extends LValParser { case tt.backQuote: return this.parseTemplate(false); - case tt.doubleColon: + case tt.doubleColon: { node = this.startNode(); this.next(); node.object = null; @@ -794,6 +794,7 @@ export default class ExpressionParser extends LValParser { "Binding should be performed on object property.", ); } + } default: throw this.unexpected(); diff --git a/src/parser/lval.js b/src/parser/lval.js index d5156a634c..01ab50f485 100644 --- a/src/parser/lval.js +++ b/src/parser/lval.js @@ -69,13 +69,14 @@ export default class LValParser extends NodeUtils { this.toAssignable(node.value, isBinding, contextDescription); break; - case "SpreadElement": + case "SpreadElement": { this.checkToRestConversion(node); node.type = "RestElement"; const arg = node.argument; this.toAssignable(arg, isBinding, contextDescription); break; + } case "ArrayExpression": node.type = "ArrayPattern"; @@ -211,11 +212,12 @@ export default class LValParser extends NodeUtils { case tt.name: return this.parseBindingIdentifier(); - case tt.bracketL: + case tt.bracketL: { const node = this.startNode(); this.next(); node.elements = this.parseBindingList(tt.bracketR, true); return this.finishNode(node, "ArrayPattern"); + } case tt.braceL: return this.parseObj(true); diff --git a/src/plugins/typescript.js b/src/plugins/typescript.js index d99aeaf6cd..7d6971fa73 100644 --- a/src/plugins/typescript.js +++ b/src/plugins/typescript.js @@ -540,7 +540,7 @@ export default (superClass: Class): Class => switch (this.state.type) { case tt.name: case tt._void: - case tt._null: + case tt._null: { const type = this.match(tt._void) ? "TSVoidKeyword" : this.match(tt._null) @@ -552,6 +552,7 @@ export default (superClass: Class): Class => return this.finishNode(node, type); } return this.tsParseTypeReference(); + } case tt.string: case tt.num: case tt._true: @@ -573,13 +574,14 @@ export default (superClass: Class): Class => return this.finishNode(node, "TSLiteralType"); } break; - case tt._this: + case tt._this: { const thisKeyword = this.tsParseThisTypeNode(); if (this.isContextual("is") && !this.hasPrecedingLineBreak()) { return this.tsParseThisTypePredicate(thisKeyword); } else { return thisKeyword; } + } case tt._typeof: return this.tsParseTypeQuery(); case tt.braceL: @@ -1038,13 +1040,14 @@ export default (superClass: Class): Class => case tt._var: case tt._let: return this.parseVarStatement(nany, this.state.type); - case tt.name: + case tt.name: { const value = this.state.value; if (value === "global") { return this.tsParseAmbientExternalModuleDeclaration(nany); } else { return this.tsParseDeclaration(nany, value, /* next */ true); } + } } } @@ -1064,14 +1067,14 @@ export default (superClass: Class): Class => tsParseExpressionStatement(node: any, expr: N.Identifier): ?N.Declaration { switch (expr.name) { - case "declare": + case "declare": { const declaration = this.tsTryParseDeclare(node); if (declaration) { declaration.declare = true; return declaration; } break; - + } case "global": // `global { }` (with no `declare`) may appear inside an ambient module declaration. // Would like to use tsParseAmbientExternalModuleDeclaration here, but already ran past "global". diff --git a/src/tokenizer/index.js b/src/tokenizer/index.js index cb3fd8b57d..f9ece03f80 100644 --- a/src/tokenizer/index.js +++ b/src/tokenizer/index.js @@ -595,11 +595,13 @@ export default class Tokenizer extends LocationParser { ++this.state.pos; return this.finishToken(tt.backQuote); - case 48: // '0' + case 48: { + // '0' const next = this.input.charCodeAt(this.state.pos + 1); if (next === 120 || next === 88) return this.readRadixNumber(16); // '0x', '0X' - hex number if (next === 111 || next === 79) return this.readRadixNumber(8); // '0o', '0O' - octal number if (next === 98 || next === 66) return this.readRadixNumber(2); // '0b', '0B' - binary number + } // Anything else beginning with a digit is an integer, octal // number, or float. case 49: From 96bd271495556c5186825183e3aaa9d266d5ac5d Mon Sep 17 00:00:00 2001 From: Daniel Tschinder Date: Sun, 20 Aug 2017 12:49:33 +0200 Subject: [PATCH 6/7] Fix tests --- test/fixtures/es2017/async-functions/no-method-asi/options.json | 2 +- .../class-properties-with-initializer-and-type/options.json | 2 +- .../_no-plugin/class-properties-with-initializer/options.json | 2 +- .../class-properties-without-initializer/options.json | 2 +- .../async-generators/class-method-no-asi/options.json | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/test/fixtures/es2017/async-functions/no-method-asi/options.json b/test/fixtures/es2017/async-functions/no-method-asi/options.json index 5a0c1ff7f5..50015cce4f 100644 --- a/test/fixtures/es2017/async-functions/no-method-asi/options.json +++ b/test/fixtures/es2017/async-functions/no-method-asi/options.json @@ -1,3 +1,3 @@ { - "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties, typescript' (3:2)" + "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties' (3:2)" } diff --git a/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json index bb0837f99c..377b10b6f5 100644 --- a/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json +++ b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json @@ -1,4 +1,4 @@ { "plugins": ["flow"], - "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties, typescript' (2:14)" + "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties' (2:14)" } diff --git a/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json index ab84fa6cc8..bb4a037619 100644 --- a/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json +++ b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json @@ -1,4 +1,4 @@ { - "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties, typescript' (2:6)", + "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties' (2:6)", "plugins": [] } diff --git a/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json b/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json index 787eab7a69..5858f49010 100644 --- a/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json +++ b/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json @@ -1,4 +1,4 @@ { - "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties, typescript' (2:5)", + "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties' (2:5)", "plugins": [] } diff --git a/test/fixtures/experimental/async-generators/class-method-no-asi/options.json b/test/fixtures/experimental/async-generators/class-method-no-asi/options.json index 5a0c1ff7f5..50015cce4f 100644 --- a/test/fixtures/experimental/async-generators/class-method-no-asi/options.json +++ b/test/fixtures/experimental/async-generators/class-method-no-asi/options.json @@ -1,3 +1,3 @@ { - "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties, typescript' (3:2)" + "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties' (3:2)" } From 19c099d1165e088e7bc27e4640f9b7b09cb1b243 Mon Sep 17 00:00:00 2001 From: Daniel Tschinder Date: Sun, 20 Aug 2017 12:54:41 +0200 Subject: [PATCH 7/7] Use expectPlugin --- src/parser/statement.js | 5 +++-- .../es2017/async-functions/no-method-asi/options.json | 2 +- .../class-properties-with-initializer-and-type/options.json | 2 +- .../class-properties-with-initializer/options.json | 2 +- .../class-properties-without-initializer/options.json | 2 +- .../async-generators/class-method-no-asi/options.json | 2 +- 6 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/parser/statement.js b/src/parser/statement.js index 074f8b9177..76b5ffcc57 100644 --- a/src/parser/statement.js +++ b/src/parser/statement.js @@ -1152,13 +1152,13 @@ export default class StatementParser extends ExpressionParser { parseClassProperty(node: N.ClassProperty): N.ClassProperty { if (!node.typeAnnotation) { - this.expectOnePlugin(["classProperties"]); + this.expectPlugin("classProperties"); } this.state.inClassProperty = true; if (this.match(tt.eq)) { - this.expectOnePlugin(["classProperties"]); + this.expectPlugin("classProperties"); this.next(); node.value = this.parseMaybeAssign(); } else { @@ -1166,6 +1166,7 @@ export default class StatementParser extends ExpressionParser { } this.semicolon(); this.state.inClassProperty = false; + return this.finishNode(node, "ClassProperty"); } diff --git a/test/fixtures/es2017/async-functions/no-method-asi/options.json b/test/fixtures/es2017/async-functions/no-method-asi/options.json index 50015cce4f..7348c12f9e 100644 --- a/test/fixtures/es2017/async-functions/no-method-asi/options.json +++ b/test/fixtures/es2017/async-functions/no-method-asi/options.json @@ -1,3 +1,3 @@ { - "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties' (3:2)" + "throws": "This experimental syntax requires enabling the parser plugin: 'classProperties' (3:2)" } diff --git a/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json index 377b10b6f5..a4e85bf033 100644 --- a/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json +++ b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer-and-type/options.json @@ -1,4 +1,4 @@ { "plugins": ["flow"], - "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties' (2:14)" + "throws": "This experimental syntax requires enabling the parser plugin: 'classProperties' (2:14)" } diff --git a/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json index bb4a037619..aaa6e80686 100644 --- a/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json +++ b/test/fixtures/experimental/_no-plugin/class-properties-with-initializer/options.json @@ -1,4 +1,4 @@ { - "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties' (2:6)", + "throws": "This experimental syntax requires enabling the parser plugin: 'classProperties' (2:6)", "plugins": [] } diff --git a/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json b/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json index 5858f49010..bbec0b1850 100644 --- a/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json +++ b/test/fixtures/experimental/_no-plugin/class-properties-without-initializer/options.json @@ -1,4 +1,4 @@ { - "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties' (2:5)", + "throws": "This experimental syntax requires enabling the parser plugin: 'classProperties' (2:5)", "plugins": [] } diff --git a/test/fixtures/experimental/async-generators/class-method-no-asi/options.json b/test/fixtures/experimental/async-generators/class-method-no-asi/options.json index 50015cce4f..7348c12f9e 100644 --- a/test/fixtures/experimental/async-generators/class-method-no-asi/options.json +++ b/test/fixtures/experimental/async-generators/class-method-no-asi/options.json @@ -1,3 +1,3 @@ { - "throws": "This experimental syntax requires enabling one of the following parser plugin(s): 'classProperties' (3:2)" + "throws": "This experimental syntax requires enabling the parser plugin: 'classProperties' (3:2)" }