diff --git a/packages/espree/README.md b/packages/espree/README.md index 0028f255..054685f6 100644 --- a/packages/espree/README.md +++ b/packages/espree/README.md @@ -156,9 +156,6 @@ const options = { // enable JSX parsing jsx: false, - // enable return in global scope (set to true automatically when sourceType is "commonjs") - globalReturn: false, - // enable implied strict mode (if ecmaVersion >= 5) impliedStrict: false } diff --git a/packages/espree/docs/README.md b/packages/espree/docs/README.md index 550a4975..1f74d3bb 100644 --- a/packages/espree/docs/README.md +++ b/packages/espree/docs/README.md @@ -156,9 +156,6 @@ const options = { // enable JSX parsing jsx: false, - // enable return in global scope (set to true automatically when sourceType is "commonjs") - globalReturn: false, - // enable implied strict mode (if ecmaVersion >= 5) impliedStrict: false } diff --git a/packages/espree/lib/features.js b/packages/espree/lib/features.js deleted file mode 100644 index 31467d28..00000000 --- a/packages/espree/lib/features.js +++ /dev/null @@ -1,27 +0,0 @@ -/** - * @fileoverview The list of feature flags supported by the parser and their default - * settings. - * @author Nicholas C. Zakas - */ - -//------------------------------------------------------------------------------ -// Requirements -//------------------------------------------------------------------------------ - -// None! - -//------------------------------------------------------------------------------ -// Public -//------------------------------------------------------------------------------ - -export default { - - // React JSX parsing - jsx: false, - - // allow return statement in global scope - globalReturn: false, - - // allow implied strict mode - impliedStrict: false -}; diff --git a/packages/espree/lib/options.js b/packages/espree/lib/options.js index 85bb9029..20764730 100644 --- a/packages/espree/lib/options.js +++ b/packages/espree/lib/options.js @@ -107,8 +107,12 @@ export function normalizeOptions(options) { } const allowReserved = ecmaVersion === 3 ? (options.allowReserved || "never") : false; const ecmaFeatures = options.ecmaFeatures || {}; - const allowReturnOutsideFunction = options.sourceType === "commonjs" || - Boolean(ecmaFeatures.globalReturn); + + if (Object.hasOwn(ecmaFeatures, "globalReturn")) { + throw new Error("`ecmaFeatures.globalReturn` has been removed. To allow top-level return statements, set `sourceType` to 'commonjs'."); + } + + const allowReturnOutsideFunction = options.sourceType === "commonjs"; if (sourceType === "module" && ecmaVersion < 6) { throw new Error("sourceType 'module' is not supported when ecmaVersion < 2015. Consider adding `{ ecmaVersion: 2015 }` to the parser options."); diff --git a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-identifier.result.js b/packages/espree/tests/fixtures/ecma-features/globalReturn/return-identifier.result.js deleted file mode 100644 index d9ce1bc9..00000000 --- a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-identifier.result.js +++ /dev/null @@ -1,111 +0,0 @@ -export default { - "type": "Program", - "loc": { - "start": { - "line": 1, - "column": 0 - }, - "end": { - "line": 1, - "column": 12 - } - }, - "range": [ - 0, - 12 - ], - "body": [ - { - "type": "ReturnStatement", - "loc": { - "start": { - "line": 1, - "column": 0 - }, - "end": { - "line": 1, - "column": 12 - } - }, - "range": [ - 0, - 12 - ], - "argument": { - "type": "Identifier", - "loc": { - "start": { - "line": 1, - "column": 7 - }, - "end": { - "line": 1, - "column": 11 - } - }, - "range": [ - 7, - 11 - ], - "name": "fooz" - } - } - ], - "sourceType": "script", - "tokens": [ - { - "type": "Keyword", - "value": "return", - "loc": { - "start": { - "line": 1, - "column": 0 - }, - "end": { - "line": 1, - "column": 6 - } - }, - "range": [ - 0, - 6 - ] - }, - { - "type": "Identifier", - "value": "fooz", - "loc": { - "start": { - "line": 1, - "column": 7 - }, - "end": { - "line": 1, - "column": 11 - } - }, - "range": [ - 7, - 11 - ] - }, - { - "type": "Punctuator", - "value": ";", - "loc": { - "start": { - "line": 1, - "column": 11 - }, - "end": { - "line": 1, - "column": 12 - } - }, - "range": [ - 11, - 12 - ] - } - ] -}; \ No newline at end of file diff --git a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-identifier.src.js b/packages/espree/tests/fixtures/ecma-features/globalReturn/return-identifier.src.js deleted file mode 100644 index aa6758b0..00000000 --- a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-identifier.src.js +++ /dev/null @@ -1 +0,0 @@ -return fooz; diff --git a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-no-arg.result.js b/packages/espree/tests/fixtures/ecma-features/globalReturn/return-no-arg.result.js deleted file mode 100644 index 7863be3d..00000000 --- a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-no-arg.result.js +++ /dev/null @@ -1,76 +0,0 @@ -export default { - "type": "Program", - "loc": { - "start": { - "line": 1, - "column": 0 - }, - "end": { - "line": 1, - "column": 7 - } - }, - "range": [ - 0, - 7 - ], - "body": [ - { - "type": "ReturnStatement", - "loc": { - "start": { - "line": 1, - "column": 0 - }, - "end": { - "line": 1, - "column": 7 - } - }, - "range": [ - 0, - 7 - ], - "argument": null - } - ], - "sourceType": "script", - "tokens": [ - { - "type": "Keyword", - "value": "return", - "loc": { - "start": { - "line": 1, - "column": 0 - }, - "end": { - "line": 1, - "column": 6 - } - }, - "range": [ - 0, - 6 - ] - }, - { - "type": "Punctuator", - "value": ";", - "loc": { - "start": { - "line": 1, - "column": 6 - }, - "end": { - "line": 1, - "column": 7 - } - }, - "range": [ - 6, - 7 - ] - } - ] -}; \ No newline at end of file diff --git a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-no-arg.src.js b/packages/espree/tests/fixtures/ecma-features/globalReturn/return-no-arg.src.js deleted file mode 100644 index f312410b..00000000 --- a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-no-arg.src.js +++ /dev/null @@ -1 +0,0 @@ -return; diff --git a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-true.result.js b/packages/espree/tests/fixtures/ecma-features/globalReturn/return-true.result.js deleted file mode 100644 index c645bad2..00000000 --- a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-true.result.js +++ /dev/null @@ -1,112 +0,0 @@ -export default { - "type": "Program", - "loc": { - "start": { - "line": 1, - "column": 0 - }, - "end": { - "line": 1, - "column": 12 - } - }, - "range": [ - 0, - 12 - ], - "body": [ - { - "type": "ReturnStatement", - "loc": { - "start": { - "line": 1, - "column": 0 - }, - "end": { - "line": 1, - "column": 12 - } - }, - "range": [ - 0, - 12 - ], - "argument": { - "type": "Literal", - "loc": { - "start": { - "line": 1, - "column": 7 - }, - "end": { - "line": 1, - "column": 11 - } - }, - "range": [ - 7, - 11 - ], - "value": true, - "raw": "true" - } - } - ], - "sourceType": "script", - "tokens": [ - { - "type": "Keyword", - "value": "return", - "loc": { - "start": { - "line": 1, - "column": 0 - }, - "end": { - "line": 1, - "column": 6 - } - }, - "range": [ - 0, - 6 - ] - }, - { - "type": "Boolean", - "value": "true", - "loc": { - "start": { - "line": 1, - "column": 7 - }, - "end": { - "line": 1, - "column": 11 - } - }, - "range": [ - 7, - 11 - ] - }, - { - "type": "Punctuator", - "value": ";", - "loc": { - "start": { - "line": 1, - "column": 11 - }, - "end": { - "line": 1, - "column": 12 - } - }, - "range": [ - 11, - 12 - ] - } - ] -}; \ No newline at end of file diff --git a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-true.src.js b/packages/espree/tests/fixtures/ecma-features/globalReturn/return-true.src.js deleted file mode 100644 index c1c6922d..00000000 --- a/packages/espree/tests/fixtures/ecma-features/globalReturn/return-true.src.js +++ /dev/null @@ -1 +0,0 @@ -return true; diff --git a/packages/espree/tests/lib/ecma-features.test.js b/packages/espree/tests/lib/ecma-features.test.js index 99cd2f55..3e691363 100644 --- a/packages/espree/tests/lib/ecma-features.test.js +++ b/packages/espree/tests/lib/ecma-features.test.js @@ -43,20 +43,21 @@ function shouldThrowInTestsWhenEnabled(feature) { describe("ecmaFeatures", () => { - let config; - - beforeEach(() => { - config = { - loc: true, - range: true, - tokens: true, - ecmaVersion: 6, - ecmaFeatures: {} - }; - }); testFiles.forEach(filename => { describe(filename, () => { + let config; + + beforeEach(() => { + config = { + loc: true, + range: true, + tokens: true, + ecmaVersion: 6, + ecmaFeatures: {} + }; + }); + // Uncomment and fill in filename to focus on a single file // var filename = "jsx/invalid-matching-placeholder-in-closing-tag"; const feature = path.dirname(filename), @@ -81,4 +82,12 @@ describe("ecmaFeatures", () => { }); }); }); + + describe("globalReturn", () => { + it("should throw an error when globalReturn is specified", () => { + assert.throws(() => { + espree.parse("foo", { ecmaFeatures: { globalReturn: true } }); + }, /`ecmaFeatures\.globalReturn` has been removed\. To allow top-level return statements, set `sourceType` to 'commonjs'\./u); + }); + }); });