From da8d4312a070daaa3c7b8e573f982f385a4c5f77 Mon Sep 17 00:00:00 2001 From: Guz013 <43732358+Guz013@users.noreply.github.com> Date: Sat, 2 Sep 2023 04:41:18 -0300 Subject: [PATCH] =?UTF-8?q?feat:=20=E2=9C=A8=20eslint-plugin-import=20rule?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- configs/js/docs/notes/duplicated-rules.md | 4 ++- configs/js/src/@types/globals.d.ts | 10 +++---- configs/js/src/configs/core.js | 1 + .../js/src/configs/environments/browser.js | 1 + configs/js/src/configs/environments/node.js | 7 +++++ configs/js/src/configs/formatting.js | 2 +- configs/js/src/configs/naming.js | 1 + configs/js/src/configs/overrides.js | 1 + configs/js/src/configs/problems.js | 11 ++++++++ .../js/src/configs/suggestions-typescript.js | 1 + configs/js/src/configs/suggestions.js | 27 +++++++++++++++++++ configs/js/src/presets/recommended.js | 1 + configs/js/src/presets/strict.js | 1 + 13 files changed, 61 insertions(+), 7 deletions(-) diff --git a/configs/js/docs/notes/duplicated-rules.md b/configs/js/docs/notes/duplicated-rules.md index 7276af0..bb4d167 100644 --- a/configs/js/docs/notes/duplicated-rules.md +++ b/configs/js/docs/notes/duplicated-rules.md @@ -3,7 +3,7 @@ This is a list of rules that implements the same features and/or end up fixing the same errors. -- **[`@typescript/member-ordering`][ts/member-ordering], [`@typescript/sort-type-constituents`][ts/sort-type-constituents]**: +- **[`@typescript/member-ordering`][ts/member-ordering], [`@typescript/sort-type-constituents`][ts/sort-type-constituents], [`import/order`][in/order]**: implements the same functions from [`eslint-plugin-perfectionist`][plugin-perfectionist] - **[`unicorn/no-for-loop`][un/no-for-loop] and [`@typescript/prefer-for-of`][ts/prefer-for-of]**: @@ -26,4 +26,6 @@ up fixing the same errors. [un/prefer-includes]: [un/prefer-regexp-test]: +[in/order]: + [plugin-perfectionist]: diff --git a/configs/js/src/@types/globals.d.ts b/configs/js/src/@types/globals.d.ts index 0bd6b01..cf164e2 100644 --- a/configs/js/src/@types/globals.d.ts +++ b/configs/js/src/@types/globals.d.ts @@ -1,10 +1,10 @@ declare module 'globals' { const globals: { - browser: Record - builtin: Record - commonjs: Record - node: Record - nodeBuiltin: Record + browser: { [rule: string]: boolean } + builtin: { [rule: string]: boolean } + commonjs: { [rule: string]: boolean } + node: { [rule: string]: boolean } + nodeBuiltin: { [rule: string]: boolean } }; export default globals; } diff --git a/configs/js/src/configs/core.js b/configs/js/src/configs/core.js index 71be1af..d17f889 100644 --- a/configs/js/src/configs/core.js +++ b/configs/js/src/configs/core.js @@ -1,4 +1,5 @@ import tsESLint from '@typescript-eslint/eslint-plugin'; +// eslint-disable-next-line import/no-relative-parent-imports import { jsFiles, tsFiles } from '../constants.js'; import unicornPlugin from 'eslint-plugin-unicorn'; import tsParser from '@typescript-eslint/parser'; diff --git a/configs/js/src/configs/environments/browser.js b/configs/js/src/configs/environments/browser.js index 88edf4b..27c8ee0 100644 --- a/configs/js/src/configs/environments/browser.js +++ b/configs/js/src/configs/environments/browser.js @@ -1,4 +1,5 @@ /* eslint-disable unicorn/no-useless-spread */ +// eslint-disable-next-line import/no-relative-parent-imports import { jsFiles, tsFiles } from '../../constants.js'; /** @type {import('eslint').Linter.FlatConfig} */ diff --git a/configs/js/src/configs/environments/node.js b/configs/js/src/configs/environments/node.js index 35564c9..e94d632 100644 --- a/configs/js/src/configs/environments/node.js +++ b/configs/js/src/configs/environments/node.js @@ -1,4 +1,5 @@ /* eslint-disable unicorn/no-useless-spread */ +// eslint-disable-next-line import/no-relative-parent-imports import { jsFiles, tsFiles } from '../../constants.js'; /** @type {import('eslint').Linter.FlatConfig} */ @@ -11,6 +12,9 @@ const commonjs = { ...{}, // Plugin: eslint-plugin-unicorn 'unicorn/prefer-module': 'off', + + ...{}, // Plugin: eslint-plugin-import + 'import/no-commonjs': 'off', }, }; @@ -20,6 +24,9 @@ const recommended = { rules: { ...{}, // Plugin: eslint-plugin-unicorn 'unicorn/prefer-node-protocol': 'error', + + ...{}, // Plugin: eslint-plugin-import + 'import/no-dynamic-require': 'error', }, }; diff --git a/configs/js/src/configs/formatting.js b/configs/js/src/configs/formatting.js index 78ad705..5b72fb0 100644 --- a/configs/js/src/configs/formatting.js +++ b/configs/js/src/configs/formatting.js @@ -1,5 +1,6 @@ /* eslint-disable unicorn/no-useless-spread */ import perfectionistPlugin from 'eslint-plugin-perfectionist'; +// eslint-disable-next-line import/no-relative-parent-imports import { jsFiles, tsFiles } from '../constants.js'; /** @@ -107,7 +108,6 @@ const recommended = { 'import/exports-last': 'error', 'import/first': 'error', 'import/group-exports': 'error', - 'import/newline-after-import': ['error', { considerComments: true }], ...{}, // Plugin: eslint-plugin-perfectionist ...perfectionistPlugin.configs['recommended-natural'].rules, diff --git a/configs/js/src/configs/naming.js b/configs/js/src/configs/naming.js index d93a15c..ffc9b59 100644 --- a/configs/js/src/configs/naming.js +++ b/configs/js/src/configs/naming.js @@ -1,4 +1,5 @@ /* eslint-disable unicorn/no-useless-spread */ +// eslint-disable-next-line import/no-relative-parent-imports import { jsFiles, tsFiles } from '../constants.js'; /** diff --git a/configs/js/src/configs/overrides.js b/configs/js/src/configs/overrides.js index f65fae9..bef8e93 100644 --- a/configs/js/src/configs/overrides.js +++ b/configs/js/src/configs/overrides.js @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/no-relative-parent-imports import { jsFiles, tsFiles } from '../constants.js'; // TODO [>=1.0.0]: Create a separate config for performance related practices diff --git a/configs/js/src/configs/problems.js b/configs/js/src/configs/problems.js index 79a6b91..e1568b9 100644 --- a/configs/js/src/configs/problems.js +++ b/configs/js/src/configs/problems.js @@ -1,4 +1,5 @@ /* eslint-disable unicorn/no-useless-spread */ +// eslint-disable-next-line import/no-relative-parent-imports import { jsFiles, tsFiles } from '../constants.js'; /** @@ -66,6 +67,13 @@ const recommended = { '@typescript-eslint/no-redeclare': 'error', 'no-loss-of-precision': 'off', 'no-redeclare': 'off', + + ...{}, // Plugin: eslint-plugin-import + 'import/default': 'error', + 'import/export': 'error', + 'import/named': 'error', + 'import/namespace': 'error', + 'import/no-unresolved': 'error', }, }; @@ -90,6 +98,9 @@ const strict = { 'no-unused-private-class-members': 'error', 'no-use-before-define': 'error', 'require-atomic-updates': 'error', + + ...{}, // Plugin: eslint-plugin-import + 'import/no-extraneous-dependencies': 'error', }, }; diff --git a/configs/js/src/configs/suggestions-typescript.js b/configs/js/src/configs/suggestions-typescript.js index 0b6a715..df578c1 100644 --- a/configs/js/src/configs/suggestions-typescript.js +++ b/configs/js/src/configs/suggestions-typescript.js @@ -1,4 +1,5 @@ +// eslint-disable-next-line import/no-relative-parent-imports import { tsFiles } from '../constants.js'; /** @type {import('eslint').Linter.FlatConfig} */ diff --git a/configs/js/src/configs/suggestions.js b/configs/js/src/configs/suggestions.js index c913e21..ba3b276 100644 --- a/configs/js/src/configs/suggestions.js +++ b/configs/js/src/configs/suggestions.js @@ -1,4 +1,5 @@ /* eslint-disable unicorn/no-useless-spread */ +// eslint-disable-next-line import/no-relative-parent-imports import { jsFiles, tsFiles } from '../constants.js'; /** @@ -190,6 +191,17 @@ const recommended = { 'unicorn/switch-case-braces': 'error', 'unicorn/text-encoding-identifier-case': 'error', 'unicorn/throw-new-error': 'error', + + ...{}, // Plugin: eslint-plugin-import'error', + 'import/no-amd': 'error', + 'import/no-commonjs': 'error', + 'import/no-deprecated': 'error', + 'import/no-duplicates': 'error', + 'import/no-empty-named-blocks': 'error', + 'import/no-named-as-default': 'error', + 'import/no-named-as-default-member': 'error', + 'import/no-self-import': 'error', + 'import/no-useless-path-segments': 'error', }, }; @@ -332,6 +344,21 @@ const strict = { 'unicorn/no-unsafe-regex': 'error', 'unicorn/no-unused-properties': 'error', + ...{}, // Plugin: eslint-plugin-import + 'import/extensions': ['error', 'always', { ignorePackages: true }], + 'import/max-dependencies': ['error', { ignoreTypeImports: true, max: 10 }], + 'import/no-absolute-path': 'error', + 'import/no-anonymous-default-export': 'error', + 'import/no-cycle': 'error', + 'import/no-import-module-exports': 'error', + 'import/no-mutable-exports': 'error', + 'import/no-named-default': 'error', + 'import/no-relative-packages': 'error', + 'import/no-relative-parent-imports': 'error', + 'import/no-unassigned-import': ['error', { allow: ['**/*.css', '**/*.scss', '**/*.less'] }], + 'import/prefer-default-export': 'error', + 'import/unambiguous': 'error', + }, }; diff --git a/configs/js/src/presets/recommended.js b/configs/js/src/presets/recommended.js index 164dacb..29b7517 100644 --- a/configs/js/src/presets/recommended.js +++ b/configs/js/src/presets/recommended.js @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/no-relative-parent-imports import configs from '../configs/index.js'; /** @type {import('eslint').Linter.FlatConfig[]} */ diff --git a/configs/js/src/presets/strict.js b/configs/js/src/presets/strict.js index 945f2e2..86c8e59 100644 --- a/configs/js/src/presets/strict.js +++ b/configs/js/src/presets/strict.js @@ -1,3 +1,4 @@ +// eslint-disable-next-line import/no-relative-parent-imports import configs from '../configs/index.js'; /** @type {import('eslint').Linter.FlatConfig[]} */