From 40b62eac09d9eb78e6d612daed1cb52b17c29dff Mon Sep 17 00:00:00 2001 From: Kai Cataldo Date: Thu, 15 Aug 2019 12:09:01 -0400 Subject: [PATCH 1/3] Update: improve error messaging when validating ecmaVersion --- lib/espree.js | 42 ++++++++++++++++++++------------------- tests/lib/ecma-version.js | 2 +- 2 files changed, 23 insertions(+), 21 deletions(-) diff --git a/lib/espree.js b/lib/espree.js index 0d65018b..bb1d5891 100644 --- a/lib/espree.js +++ b/lib/espree.js @@ -18,28 +18,30 @@ const tokTypes = Object.assign({}, acorn.tokTypes, jsx.tokTypes); * @returns {number} normalized ECMAScript version */ function normalizeEcmaVersion(ecmaVersion = DEFAULT_ECMA_VERSION) { - if (typeof ecmaVersion === "number") { - let version = ecmaVersion; + if (typeof ecmaVersion !== "number") { + throw new Error("ecmaVersion must be a number."); + } - // 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; - } + let version = ecmaVersion; - switch (version) { - case 3: - case 5: - case 6: - case 7: - case 8: - case 9: - case 10: - case 11: - return version; - - // no default - } + // 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; + } + + switch (version) { + case 3: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + return version; + + // no default } throw new Error("Invalid ecmaVersion."); diff --git a/tests/lib/ecma-version.js b/tests/lib/ecma-version.js index 64409853..4e6cf349 100644 --- a/tests/lib/ecma-version.js +++ b/tests/lib/ecma-version.js @@ -152,7 +152,7 @@ describe("ecmaVersion", () => { loc: true } ); - }, /Invalid ecmaVersion/); + }, /ecmaVersion must be a number/); }); it("Should throw error when using module in pre-ES6", () => { From 8e69dabd1aa5d9dce4df48339d5ff6d0a316dc0d Mon Sep 17 00:00:00 2001 From: Kai Cataldo Date: Thu, 15 Aug 2019 12:29:13 -0400 Subject: [PATCH 2/3] Print found type in error message --- lib/espree.js | 6 ++++-- tests/lib/ecma-version.js | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/lib/espree.js b/lib/espree.js index bb1d5891..013273db 100644 --- a/lib/espree.js +++ b/lib/espree.js @@ -18,8 +18,10 @@ const tokTypes = Object.assign({}, acorn.tokTypes, jsx.tokTypes); * @returns {number} normalized ECMAScript version */ function normalizeEcmaVersion(ecmaVersion = DEFAULT_ECMA_VERSION) { - if (typeof ecmaVersion !== "number") { - throw new Error("ecmaVersion must be a number."); + const ecmaVersionType = typeof ecmaVersion; + + if (ecmaVersionType !== "number") { + throw new Error(`ecmaVersion must be a number. Received value of type ${ecmaVersionType} instead.`); } let version = ecmaVersion; diff --git a/tests/lib/ecma-version.js b/tests/lib/ecma-version.js index 4e6cf349..d72d2abe 100644 --- a/tests/lib/ecma-version.js +++ b/tests/lib/ecma-version.js @@ -152,7 +152,7 @@ describe("ecmaVersion", () => { loc: true } ); - }, /ecmaVersion must be a number/); + }, /ecmaVersion must be a number. Received value of type string instead/); }); it("Should throw error when using module in pre-ES6", () => { From 93a3d53b2e435297e6547071a1302a195a8a5541 Mon Sep 17 00:00:00 2001 From: Kai Cataldo Date: Thu, 15 Aug 2019 12:35:43 -0400 Subject: [PATCH 3/3] Inline typeof check --- lib/espree.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/espree.js b/lib/espree.js index 013273db..64908a78 100644 --- a/lib/espree.js +++ b/lib/espree.js @@ -18,10 +18,8 @@ const tokTypes = Object.assign({}, acorn.tokTypes, jsx.tokTypes); * @returns {number} normalized ECMAScript version */ function normalizeEcmaVersion(ecmaVersion = DEFAULT_ECMA_VERSION) { - const ecmaVersionType = typeof ecmaVersion; - - if (ecmaVersionType !== "number") { - throw new Error(`ecmaVersion must be a number. Received value of type ${ecmaVersionType} instead.`); + if (typeof ecmaVersion !== "number") { + throw new Error(`ecmaVersion must be a number. Received value of type ${typeof ecmaVersion} instead.`); } let version = ecmaVersion;