diff --git a/.eslintrc b/.eslintrc index 4b64162..b80673d 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,10 +5,7 @@ "node": true }, "parserOptions": { - "ecmaFeatures": { - "impliedStrict": true - }, - "ecmaVersion": 2017 + "ecmaVersion": 2018 }, "plugins": ["json"], "root": true diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml index 3269197..c61b02b 100644 --- a/.github/workflows/node.yml +++ b/.github/workflows/node.yml @@ -27,32 +27,9 @@ jobs: eslint: - 8 - 7 - - 6 - - 5 - - 4 - - 3 include: - node-version: 14 eslint: 7.7 - - node-version: 8 - eslint: 6 - - node-version: 8 - eslint: 5 - - node-version: 8 - eslint: 4 - - node-version: 8 - eslint: 3 - - node-version: 6 - eslint: 5 - ajv: 5 - - node-version: 6 - eslint: 4 - - node-version: 6 - eslint: 3 - - node-version: 4 - eslint: 4 - - node-version: 4 - eslint: 3 exclude: - node-version: 15 eslint: 8 @@ -71,12 +48,6 @@ jobs: node-version: ${{ matrix.node-version }} skip-ls-check: true - run: npm install --no-save eslint@${{ matrix.eslint }} - - run: npm install --no-save "ajv@${{ matrix.ajv }}" - if: ${{ !!matrix.ajv }} - - run: npm install --no-save "ajv@5" - if: ${{ !matrix.ajv && matrix.eslint == 4 }} - - run: npm install --no-save "ajv@6" - if: ${{ !matrix.ajv && matrix.eslint == 5 }} - run: npm install --no-save @eslint/eslintrc@0 if: ${{ matrix.eslint != 8 }} - run: npm prune > /dev/null diff --git a/package.json b/package.json index bd4092d..973fa31 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "commitizen": "^2.10.1", "create-require": "^1.1.1", "cz-conventional-changelog": "^2.1.0", - "eslint": "^3.12.0 || ^4 || ^5 || ^6 || ^7 || ^8", + "eslint": "^7 || ^8.2.0", "eslint-plugin-json": "^3.1.0", "ghooks": "^2.0.4", "in-publish": "^2.0.1", @@ -65,7 +65,7 @@ "validate-commit-msg": "^2.14.0" }, "peerDependencies": { - "eslint": "^3.12.0 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^7 || ^8.2.0" }, "nyc": { "exclude": [ @@ -107,6 +107,6 @@ }, "homepage": "https://github.com/sarbbottam/eslint-find-rules#readme", "engines": { - "node": ">= 4" + "node": "^10.12.0 || >=12.0.0 || ^14.17.0 || >=16.0.0" } } diff --git a/src/lib/normalize-plugin-name.js b/src/lib/normalize-plugin-name.js index ce6746d..73677e8 100644 --- a/src/lib/normalize-plugin-name.js +++ b/src/lib/normalize-plugin-name.js @@ -27,80 +27,6 @@ function _getNormalizer() { getShorthandName: naming.getShorthandName } }, - // eslint >= 6.1.0 - function () { - const normalizer = require('eslint/lib/shared/naming'); - - return { - normalizePackageName: normalizer.normalizePackageName, - getShorthandName: normalizer.getShorthandName - }; - }, - // eslint 6.0.0 - 6.0.1 - function () { - const normalizer = require('eslint/lib/cli-engine/naming'); - - return { - normalizePackageName: normalizer.normalizePackageName, - getShorthandName: normalizer.getShorthandName - }; - }, - // eslint 5 - function () { - const normalizer = require('eslint/lib/util/naming'); - - return { - normalizePackageName: normalizer.normalizePackageName, - getShorthandName: normalizer.getShorthandName - }; - }, - // eslint 4 - function () { - const normalizer = require('eslint/lib/util/naming'); - - return { - normalizePackageName: normalizer.normalizePackageName, - getShorthandName: normalizer.removeNamespaceFromTerm - }; - }, - // eslint 3 - function () { - const normalizer = require('eslint/lib/config/plugins'); - - const PLUGIN_NAME_PREFIX = 'eslint-plugin-'; - - function parsePluginName(pluginName) { - const pluginNamespace = normalizer.getNamespace(pluginName); - const pluginNameWithoutNamespace = normalizer.removeNamespace(pluginName); - const pluginNameWithoutPrefix = normalizer.removePrefix(pluginNameWithoutNamespace); - - return { - pluginNamespace, - pluginNameWithoutPrefix - }; - } - - function normalizePackageName(pluginName) { - const sections = parsePluginName(pluginName); - const longName = sections.pluginNamespace + - PLUGIN_NAME_PREFIX + - sections.pluginNameWithoutPrefix; - - return longName; - } - - function getShorthandName(pluginName) { - const sections = parsePluginName(pluginName); - const shortName = sections.pluginNamespace + sections.pluginNameWithoutPrefix; - - return shortName; - } - - return { - normalizePackageName, - getShorthandName - }; - } ]; for (const tryEslintVersion of eslintVersionFunctions) { diff --git a/test/fixtures/prior-v5/eslint-dedupe-plugin-rules.json b/test/fixtures/prior-v5/eslint-dedupe-plugin-rules.json deleted file mode 100644 index db07397..0000000 --- a/test/fixtures/prior-v5/eslint-dedupe-plugin-rules.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./eslintrc", - "plugins": [ - "plugin" - ], - "rules": { - "plugin/duplicate-bar-rule": [2] - } -} diff --git a/test/fixtures/prior-v5/eslint-with-deprecated-rules.json b/test/fixtures/prior-v5/eslint-with-deprecated-rules.json deleted file mode 100644 index 93b52f0..0000000 --- a/test/fixtures/prior-v5/eslint-with-deprecated-rules.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "plugins": [ - "plugin" - ], - "rules": { - "foo-rule": [2], - "old-rule": [2], - "plugin/foo-rule": [2], - "plugin/old-plugin-rule": [2] - } -} diff --git a/test/fixtures/prior-v5/eslint-with-plugin-with-no-rules.json b/test/fixtures/prior-v5/eslint-with-plugin-with-no-rules.json deleted file mode 100644 index 09c13b3..0000000 --- a/test/fixtures/prior-v5/eslint-with-plugin-with-no-rules.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "plugins": [ - "plugin", - "no-rules" - ], - "rules": {} -} diff --git a/test/fixtures/prior-v5/eslint.json b/test/fixtures/prior-v5/eslint.json deleted file mode 100644 index ca9c623..0000000 --- a/test/fixtures/prior-v5/eslint.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "extends": "./eslint.yml", - "plugins": [ - "plugin" - ], - "rules": { - } -} diff --git a/test/fixtures/prior-v5/eslint.yml b/test/fixtures/prior-v5/eslint.yml deleted file mode 100644 index c39e9d5..0000000 --- a/test/fixtures/prior-v5/eslint.yml +++ /dev/null @@ -1,5 +0,0 @@ -extends: - ./eslintrc -rules: - bar-rule: - - 2 diff --git a/test/fixtures/prior-v5/eslintrc b/test/fixtures/prior-v5/eslintrc deleted file mode 100644 index 157df27..0000000 --- a/test/fixtures/prior-v5/eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "rules": { - "foo-rule": [2] - } -} diff --git a/test/fixtures/prior-v5/no-path/index.js b/test/fixtures/prior-v5/no-path/index.js deleted file mode 100644 index e853bb4..0000000 --- a/test/fixtures/prior-v5/no-path/index.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - rules: { - 'foo-rule': [2] - } -} diff --git a/test/fixtures/prior-v5/no-path/package.json b/test/fixtures/prior-v5/no-path/package.json deleted file mode 100644 index 05749d7..0000000 --- a/test/fixtures/prior-v5/no-path/package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "name": "fake-project", - "version": "0.0.0", - "description": "Simulating a project's package.json.", - "private": true, - "main": "./index.js" -} diff --git a/test/lib/rule-finder.js b/test/lib/rule-finder.js index d9802dd..264ff3a 100644 --- a/test/lib/rule-finder.js +++ b/test/lib/rule-finder.js @@ -9,7 +9,6 @@ const eslintPkg = require('eslint/package.json'); const processCwd = process.cwd; const eslintVersion = semver.satisfies(eslintPkg.version, '< 5') ? 'prior-v5' : 'post-v5'; -const supportsScopedPlugins = semver.satisfies(eslintPkg.version, '>= 5'); const mockCreateRequire = (getExport, plugins, relative) => { // Use the mocked require. @@ -110,23 +109,6 @@ const getRuleFinder = proxyquire('../../src/lib/rule-finder', { } }); -function assertDeepEqual(a, b) { - if (supportsScopedPlugins) { - return assert.deepEqual(a, b); - } - - if (Array.isArray(b)) { - return assert.deepEqual(a, b.filter(s => !s.startsWith('@'))); - } - - const bWithoutScoped = Object.keys(b).filter(s => !s.startsWith('@')).reduce((acc, k) => { - acc[k] = b[k]; - return acc; - }, {}); - - return assert.deepEqual(a, bWithoutScoped); -} - const getRuleFinderForDedupeTests = proxyquire('../../src/lib/rule-finder', { eslint: { Linter: class { @@ -179,7 +161,7 @@ describe('rule-finder', function() { return noSpecifiedFile; }; const ruleFinder = await getRuleFinder(); - assertDeepEqual(ruleFinder.getUnusedRules(), ['bar-rule', 'baz-rule']); + assert.deepEqual(ruleFinder.getUnusedRules(), ['bar-rule', 'baz-rule']); }); it('no specifiedFile - unused rules including deprecated', async () => { @@ -187,7 +169,7 @@ describe('rule-finder', function() { return noSpecifiedFile; }; const ruleFinder = await getRuleFinder(null, {includeDeprecated: true}); - assertDeepEqual(ruleFinder.getUnusedRules(), ['bar-rule', 'baz-rule', 'old-rule']); + assert.deepEqual(ruleFinder.getUnusedRules(), ['bar-rule', 'baz-rule', 'old-rule']); }); it('no specifiedFile - current rules', async () => { @@ -195,7 +177,7 @@ describe('rule-finder', function() { return noSpecifiedFile; }; const ruleFinder = await getRuleFinder(); - assertDeepEqual(ruleFinder.getCurrentRules(), ['foo-rule']); + assert.deepEqual(ruleFinder.getCurrentRules(), ['foo-rule']); }); it('no specifiedFile - current rule config', async () => { @@ -203,7 +185,7 @@ describe('rule-finder', function() { return noSpecifiedFile; }; const ruleFinder = await getRuleFinder(); - assertDeepEqual(ruleFinder.getCurrentRulesDetailed(), {'foo-rule': [2]}); + assert.deepEqual(ruleFinder.getCurrentRulesDetailed(), {'foo-rule': [2]}); }); it('no specifiedFile - plugin rules', async () => { @@ -211,7 +193,7 @@ describe('rule-finder', function() { return noSpecifiedFile; }; const ruleFinder = await getRuleFinder(); - assertDeepEqual(ruleFinder.getPluginRules(), []); + assert.deepEqual(ruleFinder.getPluginRules(), []); }); it('no specifiedFile - all available rules', async () => { @@ -219,7 +201,7 @@ describe('rule-finder', function() { return noSpecifiedFile; }; const ruleFinder = await getRuleFinder(); - assertDeepEqual(ruleFinder.getAllAvailableRules(), ['bar-rule', 'baz-rule', 'foo-rule']); + assert.deepEqual(ruleFinder.getAllAvailableRules(), ['bar-rule', 'baz-rule', 'foo-rule']); }); it('no specifiedFile - all available rules without core', async () => { @@ -227,7 +209,7 @@ describe('rule-finder', function() { return noSpecifiedFile; }; const ruleFinder = await getRuleFinder(null, {omitCore: true}); - assertDeepEqual(ruleFinder.getAllAvailableRules(), []); + assert.deepEqual(ruleFinder.getAllAvailableRules(), []); }); it('no specifiedFile - all available rules including deprecated', async () => { @@ -235,12 +217,12 @@ describe('rule-finder', function() { return noSpecifiedFile; }; const ruleFinder = await getRuleFinder(null, {includeDeprecated: true}); - assertDeepEqual(ruleFinder.getAllAvailableRules(), ['bar-rule', 'baz-rule', 'foo-rule', 'old-rule']); + assert.deepEqual(ruleFinder.getAllAvailableRules(), ['bar-rule', 'baz-rule', 'foo-rule', 'old-rule']); }); it('specifiedFile (relative path) - unused rules', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative); - assertDeepEqual(ruleFinder.getUnusedRules(), [ + assert.deepEqual(ruleFinder.getUnusedRules(), [ '@scope-with-dash/bar-rule', '@scope-with-dash/scoped-with-dash-plugin/bar-rule', '@scope/bar-rule', @@ -254,7 +236,7 @@ describe('rule-finder', function() { it('specifiedFile (relative path) - unused rules including deprecated', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative, {includeDeprecated: true}); - assertDeepEqual(ruleFinder.getUnusedRules(), [ + assert.deepEqual(ruleFinder.getUnusedRules(), [ '@scope-with-dash/bar-rule', '@scope-with-dash/old-plugin-rule', '@scope-with-dash/scoped-with-dash-plugin/bar-rule', @@ -274,7 +256,7 @@ describe('rule-finder', function() { it('specifiedFile (relative path) - current rules', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative); - assertDeepEqual(ruleFinder.getCurrentRules(), [ + assert.deepEqual(ruleFinder.getCurrentRules(), [ '@scope-with-dash/foo-rule', '@scope-with-dash/scoped-with-dash-plugin/foo-rule', '@scope/foo-rule', @@ -286,7 +268,7 @@ describe('rule-finder', function() { it('specifiedFile (relative path) - current rules with ext', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative, { ext: ['.json'] }); - assertDeepEqual(ruleFinder.getCurrentRules(), [ + assert.deepEqual(ruleFinder.getCurrentRules(), [ '@scope-with-dash/foo-rule', '@scope-with-dash/scoped-with-dash-plugin/foo-rule', '@scope/foo-rule', @@ -298,7 +280,7 @@ describe('rule-finder', function() { it('specifiedFile (relative path) - current rules with ext without dot', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative, { ext: ['json'] }); - assertDeepEqual(ruleFinder.getCurrentRules(), [ + assert.deepEqual(ruleFinder.getCurrentRules(), [ '@scope-with-dash/foo-rule', '@scope-with-dash/scoped-with-dash-plugin/foo-rule', '@scope/foo-rule', @@ -310,12 +292,12 @@ describe('rule-finder', function() { it('specifiedFile (relative path) - current rules with ext not found', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative, { ext: ['.ts'] }); - assertDeepEqual(ruleFinder.getCurrentRules(), []); + assert.deepEqual(ruleFinder.getCurrentRules(), []); }); it('specifiedFile (relative path) - current rule config', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative); - assertDeepEqual(ruleFinder.getCurrentRulesDetailed(), { + assert.deepEqual(ruleFinder.getCurrentRulesDetailed(), { '@scope-with-dash/foo-rule': [2], '@scope-with-dash/scoped-with-dash-plugin/foo-rule': [2], '@scope/foo-rule': [2], @@ -327,7 +309,7 @@ describe('rule-finder', function() { it('specifiedFile (relative path) - plugin rules', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative); - assertDeepEqual(ruleFinder.getPluginRules(), [ + assert.deepEqual(ruleFinder.getPluginRules(), [ '@scope-with-dash/bar-rule', '@scope-with-dash/foo-rule', '@scope-with-dash/scoped-with-dash-plugin/bar-rule', @@ -344,7 +326,7 @@ describe('rule-finder', function() { it('specifiedFile (relative path) - plugin rules including deprecated', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative, {includeDeprecated: true}); - assertDeepEqual(ruleFinder.getPluginRules(), [ + assert.deepEqual(ruleFinder.getPluginRules(), [ '@scope-with-dash/bar-rule', '@scope-with-dash/foo-rule', '@scope-with-dash/old-plugin-rule', @@ -366,7 +348,7 @@ describe('rule-finder', function() { it('specifiedFile (relative path) - all available rules', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative); - assertDeepEqual( + assert.deepEqual( ruleFinder.getAllAvailableRules(), [ '@scope-with-dash/bar-rule', @@ -389,7 +371,7 @@ describe('rule-finder', function() { it('specifiedFile (relative path) - all available rules without core', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative, {omitCore: true}); - assertDeepEqual( + assert.deepEqual( ruleFinder.getAllAvailableRules(), [ '@scope-with-dash/bar-rule', @@ -409,7 +391,7 @@ describe('rule-finder', function() { it('specifiedFile (relative path) - all available rules including deprecated', async () => { const ruleFinder = await getRuleFinder(specifiedFileRelative, {includeDeprecated: true}); - assertDeepEqual( + assert.deepEqual( ruleFinder.getAllAvailableRules(), [ '@scope-with-dash/bar-rule', @@ -438,7 +420,7 @@ describe('rule-finder', function() { it('specifiedFile (absolute path) - unused rules', async () => { const ruleFinder = await getRuleFinder(specifiedFileAbsolute); - assertDeepEqual(ruleFinder.getUnusedRules(), [ + assert.deepEqual(ruleFinder.getUnusedRules(), [ '@scope-with-dash/bar-rule', '@scope-with-dash/scoped-with-dash-plugin/bar-rule', '@scope/bar-rule', @@ -452,7 +434,7 @@ describe('rule-finder', function() { it('specifiedFile (absolute path) - unused rules', async () => { const ruleFinder = await getRuleFinder(specifiedFileAbsolute, {includeDeprecated: true}); - assertDeepEqual(ruleFinder.getUnusedRules(), [ + assert.deepEqual(ruleFinder.getUnusedRules(), [ '@scope-with-dash/bar-rule', '@scope-with-dash/old-plugin-rule', '@scope-with-dash/scoped-with-dash-plugin/bar-rule', @@ -472,7 +454,7 @@ describe('rule-finder', function() { it('specifiedFile (absolute path) - current rules', async () => { const ruleFinder = await getRuleFinder(specifiedFileAbsolute); - assertDeepEqual(ruleFinder.getCurrentRules(), [ + assert.deepEqual(ruleFinder.getCurrentRules(), [ '@scope-with-dash/foo-rule', '@scope-with-dash/scoped-with-dash-plugin/foo-rule', '@scope/foo-rule', @@ -484,7 +466,7 @@ describe('rule-finder', function() { it('specifiedFile (absolute path) - current rule config', async () => { const ruleFinder = await getRuleFinder(specifiedFileAbsolute); - assertDeepEqual(ruleFinder.getCurrentRulesDetailed(), { + assert.deepEqual(ruleFinder.getCurrentRulesDetailed(), { '@scope-with-dash/foo-rule': [2], '@scope-with-dash/scoped-with-dash-plugin/foo-rule': [2], '@scope/foo-rule': [2], @@ -496,7 +478,7 @@ describe('rule-finder', function() { it('specifiedFile (absolute path) - plugin rules', async () => { const ruleFinder = await getRuleFinder(specifiedFileAbsolute); - assertDeepEqual(ruleFinder.getPluginRules(), [ + assert.deepEqual(ruleFinder.getPluginRules(), [ '@scope-with-dash/bar-rule', '@scope-with-dash/foo-rule', '@scope-with-dash/scoped-with-dash-plugin/bar-rule', @@ -513,7 +495,7 @@ describe('rule-finder', function() { it('specifiedFile (absolute path) - plugin rules including deprecated', async () => { const ruleFinder = await getRuleFinder(specifiedFileAbsolute, {includeDeprecated: true}); - assertDeepEqual(ruleFinder.getPluginRules(), [ + assert.deepEqual(ruleFinder.getPluginRules(), [ '@scope-with-dash/bar-rule', '@scope-with-dash/foo-rule', '@scope-with-dash/old-plugin-rule', @@ -535,7 +517,7 @@ describe('rule-finder', function() { it('specifiedFile (absolute path) - all available rules', async () => { const ruleFinder = await getRuleFinder(specifiedFileAbsolute); - assertDeepEqual( + assert.deepEqual( ruleFinder.getAllAvailableRules(), [ '@scope-with-dash/bar-rule', @@ -558,7 +540,7 @@ describe('rule-finder', function() { it('specifiedFile (absolute path) - all available rules including deprecated', async () => { const ruleFinder = await getRuleFinder(specifiedFileAbsolute, {includeDeprecated: true}); - assertDeepEqual( + assert.deepEqual( ruleFinder.getAllAvailableRules(), [ '@scope-with-dash/bar-rule', @@ -587,7 +569,7 @@ describe('rule-finder', function() { it('specifiedFile (absolute path) without rules - plugin rules', async () => { const ruleFinder = await getRuleFinder(noRulesFile); - assertDeepEqual(ruleFinder.getPluginRules(), [ + assert.deepEqual(ruleFinder.getPluginRules(), [ 'plugin/bar-rule', 'plugin/baz-rule', 'plugin/foo-rule' @@ -596,7 +578,7 @@ describe('rule-finder', function() { it('dedupes plugin rules - all available rules', async () => { const ruleFinder = await getRuleFinderForDedupeTests(noDuplicateRulesFiles); - assertDeepEqual(ruleFinder.getAllAvailableRules(), [ + assert.deepEqual(ruleFinder.getAllAvailableRules(), [ 'bar-rule', 'foo-rule', 'plugin/duplicate-bar-rule', @@ -606,7 +588,7 @@ describe('rule-finder', function() { it('dedupes plugin rules - unused rules', async () => { const ruleFinder = await getRuleFinderForDedupeTests(noDuplicateRulesFiles); - assertDeepEqual(ruleFinder.getUnusedRules(), [ + assert.deepEqual(ruleFinder.getUnusedRules(), [ 'bar-rule', 'plugin/duplicate-foo-rule' ]); @@ -614,12 +596,12 @@ describe('rule-finder', function() { it('specifiedFile (absolute path) without deprecated rules - deprecated rules', async () => { const ruleFinder = await getRuleFinder(specifiedFileAbsolute); - assertDeepEqual(ruleFinder.getDeprecatedRules(), []); + assert.deepEqual(ruleFinder.getDeprecatedRules(), []); }); it('specifiedFile (absolute path) with deprecated rules - deprecated rules', async () => { const ruleFinder = await getRuleFinder(usingDeprecatedRulesFile); - assertDeepEqual(ruleFinder.getDeprecatedRules(), [ + assert.deepEqual(ruleFinder.getDeprecatedRules(), [ '@scope-with-dash/old-plugin-rule', '@scope-with-dash/scoped-with-dash-plugin/old-plugin-rule', '@scope/old-plugin-rule',