From 806388292283334941bb7233a64c4a59cc0702e5 Mon Sep 17 00:00:00 2001 From: Chris Harwood Date: Thu, 24 Mar 2022 09:31:42 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=92=A5=20Allow=20dynamic=20import=20for?= =?UTF-8?q?=20Node.js=20>=3D12.17=20<13=20||=20>=3D13.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Extend case.supported to support explicit Range instances * Update error string * Update tests to check around those constraints --- .../no-unsupported-features/es-syntax.js | 19 ++++++++++------- .../no-unsupported-features/es-syntax.js | 21 ++++++++++--------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/lib/rules/no-unsupported-features/es-syntax.js b/lib/rules/no-unsupported-features/es-syntax.js index 9cde512e..6e1c03d7 100644 --- a/lib/rules/no-unsupported-features/es-syntax.js +++ b/lib/rules/no-unsupported-features/es-syntax.js @@ -6,7 +6,7 @@ const { rules: esRules } = require("eslint-plugin-es") const { getInnermostScope } = require("eslint-utils") -const { Range } = require("semver") //eslint-disable-line no-unused-vars +const { Range } = require("semver") const getConfiguredNodeVersion = require("../../util/get-configured-node-version") const getSemverRange = require("../../util/get-semver-range") const mergeVisitorsInPlace = require("../../util/merge-visitors-in-place") @@ -378,7 +378,7 @@ const features = { ruleId: "no-dynamic-import", cases: [ { - supported: null, + supported: new Range(">=12.17 <13 || >=13.2"), messageId: "no-dynamic-import", }, ], @@ -453,10 +453,15 @@ function defineVisitor(context, options) { * @returns {boolean} `true` if it's supporting. */ function isNotSupportingVersion(aCase) { - return ( - !aCase.supported || - options.version.intersects(getSemverRange(`<${aCase.supported}`)) - ) + if (!aCase.supported) { + return true + } + + if (aCase.supported instanceof Range) { + return !options.version.intersects(aCase.supported) + } + + return options.version.intersects(getSemverRange(`<${aCase.supported}`)) } /** @@ -646,7 +651,7 @@ module.exports = { "no-bigint-property-names": "Bigint literal property names are not supported yet.", "no-dynamic-import": - "'import()' expressions are not supported yet.", + "'import()' expressions are not supported until Node.js {{supported}}. The configured version range is '{{version}}'.", "no-optional-chaining": "Optional chainings are not supported until Node.js {{supported}}. The configured version range is '{{version}}'.", "no-nullish-coalescing-operators": diff --git a/tests/lib/rules/no-unsupported-features/es-syntax.js b/tests/lib/rules/no-unsupported-features/es-syntax.js index caef9858..b492970a 100644 --- a/tests/lib/rules/no-unsupported-features/es-syntax.js +++ b/tests/lib/rules/no-unsupported-features/es-syntax.js @@ -7,6 +7,7 @@ const path = require("path") const { Linter, RuleTester } = require("eslint") const { builtin } = require("globals") +const { Range } = require("semver") const rule = require("../../../../lib/rules/no-unsupported-features/es-syntax") const ES2020Supported = (() => { @@ -2489,27 +2490,27 @@ ruleTester.run( code: "obj.import(source)", options: [{ version: "12.0.0" }], }, - { + ...["12.17.0", "13.2.0"].map(v => ({ code: "import(source)", - options: [ - { version: "13.1.0", ignores: ["dynamicImport"] }, - ], - }, + options: [{ version: v }], + })), ], invalid: [ - { + ...["12.16.0", "13.0.0", "13.1.0"].map(v => ({ code: "import(source)", - options: [{ version: "13.3.0" }], + options: [{ version: v }], errors: [ { messageId: "no-dynamic-import", data: { - supported: null, - version: "13.3.0", + supported: new Range( + ">=12.17 <13 || >=13.2" + ).toString(), + version: v, }, }, ], - }, + })), ], }, {