-
-
Notifications
You must be signed in to change notification settings - Fork 207
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Update: add latestEcmaVersion & supportedEcmaVersions (#430)
* Update: add latestEcmaVersion() & supportedEcmaVersions() * Address feedback * Change public API from getter methods to static property
- Loading branch information
1 parent
8a67b2f
commit acb8776
Showing
4 changed files
with
143 additions
and
67 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,105 @@ | ||
/** | ||
* @fileoverview A collection of methods for processing Espree's options. | ||
* @author Kai Cataldo | ||
*/ | ||
|
||
"use strict"; | ||
|
||
//------------------------------------------------------------------------------ | ||
// Helpers | ||
//------------------------------------------------------------------------------ | ||
|
||
const DEFAULT_ECMA_VERSION = 5; | ||
const SUPPORTED_VERSIONS = [ | ||
3, | ||
5, | ||
6, | ||
7, | ||
8, | ||
9, | ||
10, | ||
11 | ||
]; | ||
|
||
/** | ||
* Normalize ECMAScript version from the initial config | ||
* @param {number} ecmaVersion ECMAScript version from the initial config | ||
* @throws {Error} throws an error if the ecmaVersion is invalid. | ||
* @returns {number} normalized ECMAScript version | ||
*/ | ||
function normalizeEcmaVersion(ecmaVersion = DEFAULT_ECMA_VERSION) { | ||
if (typeof ecmaVersion !== "number") { | ||
throw new Error(`ecmaVersion must be a number. Received value of type ${typeof ecmaVersion} instead.`); | ||
} | ||
|
||
let version = ecmaVersion; | ||
|
||
// Calculate ECMAScript edition number from official year version starting with | ||
// ES2015, which corresponds with ES6 (or a difference of 2009). | ||
if (version >= 2015) { | ||
version -= 2009; | ||
} | ||
|
||
if (!SUPPORTED_VERSIONS.includes(version)) { | ||
throw new Error("Invalid ecmaVersion."); | ||
} | ||
|
||
return version; | ||
} | ||
|
||
/** | ||
* Normalize sourceType from the initial config | ||
* @param {string} sourceType to normalize | ||
* @throws {Error} throw an error if sourceType is invalid | ||
* @returns {string} normalized sourceType | ||
*/ | ||
function normalizeSourceType(sourceType = "script") { | ||
if (sourceType === "script" || sourceType === "module") { | ||
return sourceType; | ||
} | ||
throw new Error("Invalid sourceType."); | ||
} | ||
|
||
/** | ||
* Normalize parserOptions | ||
* @param {Object} options the parser options to normalize | ||
* @throws {Error} throw an error if found invalid option. | ||
* @returns {Object} normalized options | ||
*/ | ||
function normalizeOptions(options) { | ||
const ecmaVersion = normalizeEcmaVersion(options.ecmaVersion); | ||
const sourceType = normalizeSourceType(options.sourceType); | ||
const ranges = options.range === true; | ||
const locations = options.loc === true; | ||
|
||
if (sourceType === "module" && ecmaVersion < 6) { | ||
throw new Error("sourceType 'module' is not supported when ecmaVersion < 2015. Consider adding `{ ecmaVersion: 2015 }` to the parser options."); | ||
} | ||
return Object.assign({}, options, { ecmaVersion, sourceType, ranges, locations }); | ||
} | ||
|
||
/** | ||
* Get the latest ECMAScript version supported by Espree. | ||
* @returns {number} The latest ECMAScript version. | ||
*/ | ||
function getLatestEcmaVersion() { | ||
return SUPPORTED_VERSIONS[SUPPORTED_VERSIONS.length - 1]; | ||
} | ||
|
||
/** | ||
* Get the list of ECMAScript versions supported by Espree. | ||
* @returns {number[]} An array containing the supported ECMAScript versions. | ||
*/ | ||
function getSupportedEcmaVersions() { | ||
return [...SUPPORTED_VERSIONS]; | ||
} | ||
|
||
//------------------------------------------------------------------------------ | ||
// Public | ||
//------------------------------------------------------------------------------ | ||
|
||
module.exports = { | ||
normalizeOptions, | ||
getLatestEcmaVersion, | ||
getSupportedEcmaVersions | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
/** | ||
* @fileoverview Tests for latestEcmaVersion & supportedEcmaVersions. | ||
* @author Kai Cataldo | ||
*/ | ||
|
||
"use strict"; | ||
|
||
//------------------------------------------------------------------------------ | ||
// Requirements | ||
//------------------------------------------------------------------------------ | ||
|
||
const assert = require("assert"), | ||
espree = require("../../espree"); | ||
|
||
//------------------------------------------------------------------------------ | ||
// Tests | ||
//------------------------------------------------------------------------------ | ||
|
||
describe("latestEcmaVersion", () => { | ||
it("should return the latest supported ecmaVersion", () => { | ||
assert.strictEqual(espree.latestEcmaVersion, 11); | ||
}); | ||
}); | ||
|
||
describe("supportedEcmaVersions", () => { | ||
it("should return an array of all supported versions", () => { | ||
assert.deepStrictEqual( | ||
espree.supportedEcmaVersions, | ||
[3, 5, 6, 7, 8, 9, 10, 11] | ||
); | ||
}); | ||
}); |