From 49ada27a495899d0247bc9661ed0f055e970fe3b Mon Sep 17 00:00:00 2001 From: coderaiser Date: Mon, 16 Aug 2021 16:52:28 +0300 Subject: [PATCH] [New] `no-unused-modules`: add eslint v8 support - https://eslint.org/docs/8.0.0/user-guide/migrating-to-8.0.0 --- CHANGELOG.md | 4 +++ src/rules/no-unused-modules.js | 66 +++++++++++++++++++--------------- 2 files changed, 42 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 355985a81..cc7dca959 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ This change log adheres to standards from [Keep a CHANGELOG](http://keepachangel ## [Unreleased] +### Added +- [`no-unused-modules`]: add eslint v8 support ([#2194], thanks [@coderaiser]) + ## [2.24.2] - 2021-08-24 ### Fixed @@ -901,6 +904,7 @@ for info on changes for earlier releases. [`memo-parser`]: ./memo-parser/README.md [#2196]: https://github.com/import-js/eslint-plugin-import/pull/2196 +[#2194]: https://github.com/import-js/eslint-plugin-import/pull/2194 [#2184]: https://github.com/import-js/eslint-plugin-import/pull/2184 [#2179]: https://github.com/import-js/eslint-plugin-import/pull/2179 [#2160]: https://github.com/import-js/eslint-plugin-import/pull/2160 diff --git a/src/rules/no-unused-modules.js b/src/rules/no-unused-modules.js index d49674e7e..dd258e94e 100644 --- a/src/rules/no-unused-modules.js +++ b/src/rules/no-unused-modules.js @@ -13,45 +13,55 @@ import readPkgUp from 'read-pkg-up'; import values from 'object.values'; import includes from 'array-includes'; -// eslint/lib/util/glob-util has been moved to eslint/lib/util/glob-utils with version 5.3 -// and has been moved to eslint/lib/cli-engine/file-enumerator in version 6 +let FileEnumerator; let listFilesToProcess; + try { - const FileEnumerator = require('eslint/lib/cli-engine/file-enumerator').FileEnumerator; + ({ FileEnumerator } = require('eslint/use-at-your-own-risk')); +} catch (e) { + try { + // has been moved to eslint/lib/cli-engine/file-enumerator in version 6 + ({ FileEnumerator } = require('eslint/lib/cli-engine/file-enumerator')); + } catch (e) { + try { + // eslint/lib/util/glob-util has been moved to eslint/lib/util/glob-utils with version 5.3 + const { listFilesToProcess: originalListFilesToProcess } = require('eslint/lib/util/glob-utils'); + + // Prevent passing invalid options (extensions array) to old versions of the function. + // https://github.com/eslint/eslint/blob/v5.16.0/lib/util/glob-utils.js#L178-L280 + // https://github.com/eslint/eslint/blob/v5.2.0/lib/util/glob-util.js#L174-L269 + listFilesToProcess = function (src, extensions) { + return originalListFilesToProcess(src, { + extensions: extensions, + }); + }; + } catch (e) { + const { listFilesToProcess: originalListFilesToProcess } = require('eslint/lib/util/glob-util'); + + listFilesToProcess = function (src, extensions) { + const patterns = src.reduce((carry, pattern) => { + return carry.concat(extensions.map((extension) => { + return /\*\*|\*\./.test(pattern) ? pattern : `${pattern}/**/*${extension}`; + })); + }, src.slice()); + + return originalListFilesToProcess(patterns); + }; + } + } +} + +if (FileEnumerator) { listFilesToProcess = function (src, extensions) { const e = new FileEnumerator({ extensions: extensions, }); + return Array.from(e.iterateFiles(src), ({ filePath, ignored }) => ({ ignored, filename: filePath, })); }; -} catch (e1) { - // Prevent passing invalid options (extensions array) to old versions of the function. - // https://github.com/eslint/eslint/blob/v5.16.0/lib/util/glob-utils.js#L178-L280 - // https://github.com/eslint/eslint/blob/v5.2.0/lib/util/glob-util.js#L174-L269 - let originalListFilesToProcess; - try { - originalListFilesToProcess = require('eslint/lib/util/glob-utils').listFilesToProcess; - listFilesToProcess = function (src, extensions) { - return originalListFilesToProcess(src, { - extensions: extensions, - }); - }; - } catch (e2) { - originalListFilesToProcess = require('eslint/lib/util/glob-util').listFilesToProcess; - - listFilesToProcess = function (src, extensions) { - const patterns = src.reduce((carry, pattern) => { - return carry.concat(extensions.map((extension) => { - return /\*\*|\*\./.test(pattern) ? pattern : `${pattern}/**/*${extension}`; - })); - }, src.slice()); - - return originalListFilesToProcess(patterns); - }; - } } const EXPORT_DEFAULT_DECLARATION = 'ExportDefaultDeclaration';