From c600babfce7f0cec17e40f1afd7b921a77b5a9d0 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 12 Aug 2025 15:54:58 +0300 Subject: [PATCH 1/3] fix: disable `n/no-extraneous-import` due `import/no-extraneous-dependencies` (#85) --- configs/node.js | 8 ++++---- eslint.config.js | 4 ++-- package-lock.json | 2 +- validation/code.cjs | 3 +++ validation/code.js | 3 +++ validation/code.mjs | 3 +++ 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/configs/node.js b/configs/node.js index 3817af8..991eac9 100644 --- a/configs/node.js +++ b/configs/node.js @@ -29,11 +29,11 @@ const commonRules = { // From recommended // "n/no-exports-assign": "error", - // From recommended - // "n/no-extraneous-import": "error", + // We have `import/no-extraneous-dependencies` rule + "n/no-extraneous-import": "off", - // From recommended - // "n/no-extraneous-require": "error", + // We have `import/no-extraneous-dependencies` rule + "n/no-extraneous-require": "off", // Deprecated // "n/no-hide-core-modules": "error", diff --git a/eslint.config.js b/eslint.config.js index 2dac083..1de6206 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,6 +1,6 @@ import { defineConfig } from "eslint/config"; -import configs from "../eslint-config-webpack/configs.js"; -import config from "../eslint-config-webpack/index.js"; +import configs from "./configs.js"; +import config from "./index.js"; export default defineConfig([ { diff --git a/package-lock.json b/package-lock.json index ed06687..67e6f77 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "typescript-eslint": "^8.38.0" }, "engines": { - "node": ">= 18.20.0" + "node": ">= 20.9.0" }, "peerDependencies": { "@eslint/js": ">= 9.28.0", diff --git a/validation/code.cjs b/validation/code.cjs index ea80f94..ac44182 100644 --- a/validation/code.cjs +++ b/validation/code.cjs @@ -19,6 +19,9 @@ require("./unknown.unknown"); require("./style.css"); +// eslint-disable-next-line no-unused-vars, import/order, import/no-extraneous-dependencies +const scope = require("eslint-scope"); + code(); otherSum(1, 2); diff --git a/validation/code.js b/validation/code.js index 945fd38..c626e90 100644 --- a/validation/code.js +++ b/validation/code.js @@ -9,6 +9,9 @@ import { myVar } from "./without-extension"; import "./style.css"; +// eslint-disable-next-line no-unused-vars, import/order, import/no-extraneous-dependencies +import * as scope from "eslint-scope"; + notFoo(); const result = sumFn(1, 2); diff --git a/validation/code.mjs b/validation/code.mjs index 9ff3cbd..705da9e 100644 --- a/validation/code.mjs +++ b/validation/code.mjs @@ -5,6 +5,9 @@ import code from "./module.cjs"; import { aaa, bbb } from "./module.cjs"; import myOtherCode from "./module.js"; +// eslint-disable-next-line no-unused-vars, import/order, import/no-extraneous-dependencies +import * as scope from "eslint-scope"; + // eslint-disable-next-line import/no-unresolved import("./unknown.ext"); From 494fd3873dfcaf215690aa6544a3a6cb288008f7 Mon Sep 17 00:00:00 2001 From: Alexander Akait <4567934+alexander-akait@users.noreply.github.com> Date: Tue, 12 Aug 2025 16:42:03 +0300 Subject: [PATCH 2/3] feat: new browsers configurations (#86) --- configs.js | 36 +++++++++++++++++++++++++----- configs/browser.js | 34 ++++++++++++++++++++++++++-- configs/javascript.js | 2 +- configs/markdown.js | 1 + eslint.config.js | 17 +++++++++----- validation/browser-es5/code.js | 9 ++++++++ validation/browser-es5/markdown.md | 5 +++++ 7 files changed, 90 insertions(+), 14 deletions(-) create mode 100644 validation/browser-es5/code.js create mode 100644 validation/browser-es5/markdown.md diff --git a/configs.js b/configs.js index 4b5f8a4..de0d0ce 100644 --- a/configs.js +++ b/configs.js @@ -288,8 +288,6 @@ const typescriptConfig = getTypescriptConfig(); const reactConfig = getReactConfig(); const jestConfig = getJestConfig(); -// TODO remove old alises (not started with `node-`) in the next major release - const recommended = [ globalIgnores(ignorePaths), isModule @@ -305,7 +303,9 @@ const recommended = [ configs["package-json/recommended"], ]; +// TODO remove me in the next major release configs.recommended = recommended; + configs["node-recommended"] = recommended; const nodeRecommendedModule = [ @@ -321,7 +321,9 @@ const nodeRecommendedModule = [ configs["package-json/recommended"], ]; +// TODO remove me in the next major release configs["recommended-module"] = nodeRecommendedModule; + configs["node-recommended-module"] = nodeRecommendedModule; const nodeRecommendedCommonJS = [ @@ -337,7 +339,9 @@ const nodeRecommendedCommonJS = [ configs["package-json/recommended"], ]; +// TODO remove me in the next major release configs["recommended-commonjs"] = nodeRecommendedCommonJS; + configs["node-recommended-commonjs"] = nodeRecommendedCommonJS; const nodeRecommendedDirty = [ @@ -351,8 +355,9 @@ const nodeRecommendedDirty = [ configs["stylistic/recommended"], configs["package-json/recommended"], ]; - +// TODO remove me in the next major release configs["recommended-dirty"] = nodeRecommendedDirty; + configs["node-recommended-dirty"] = nodeRecommendedDirty; const browserRecommended = [ @@ -369,9 +374,9 @@ const browserRecommended = [ configs["browser-recommended"] = browserRecommended; -const browserOutdatedRecommended = [ +const browserOutdatedRecommendedModule = [ globalIgnores(ignorePaths), - configs["browser/recommended-outdated"], + configs["browser/recommended-outdated-module"], { ...configs["javascript/es5"], languageOptions: { @@ -386,7 +391,26 @@ const browserOutdatedRecommended = [ configs["package-json/recommended"], ]; -configs["browser-outdated-recommended"] = browserOutdatedRecommended; +// TODO remove in the next major release +configs["browser-outdated-recommended"] = browserOutdatedRecommendedModule; + +configs["browser-outdated-recommended-module"] = + browserOutdatedRecommendedModule; + +const browserOutdatedRecommendedScript = [ + globalIgnores(ignorePaths), + configs["browser/recommended-outdated-script"], + configs["javascript/es5"], + typescriptJSDocConfig, + typescriptConfig, + jestConfig, + configs["markdown/recommended"], + configs["stylistic/recommended"], + configs["package-json/recommended"], +]; + +configs["browser-outdated-recommended-script"] = + browserOutdatedRecommendedScript; const universalRecommended = [ globalIgnores(ignorePaths), diff --git a/configs/browser.js b/configs/browser.js index a60aecb..777aa69 100644 --- a/configs/browser.js +++ b/configs/browser.js @@ -2,8 +2,30 @@ import importPlugin from "eslint-plugin-import"; import unicornPlugin from "eslint-plugin-unicorn"; import globals from "globals"; -const recommendedBrowserOutdatedConfig = { +const recommendedBrowserOutdatedScriptConfig = { + name: "browser/recommended-outdated-script", languageOptions: { + sourceType: "script", + globals: { + ...globals.browser, + }, + }, +}; + +const recommendedBrowserOutdatedCommonjsConfig = { + name: "browser/recommended-outdated-commonjs", + languageOptions: { + sourceType: "commonjs", + globals: { + ...globals.browser, + }, + }, +}; + +const recommendedBrowserOutdatedModuleConfig = { + name: "browser/recommended-outdated-module", + languageOptions: { + sourceType: "module", globals: { ...globals.browser, }, @@ -11,7 +33,9 @@ const recommendedBrowserOutdatedConfig = { }; const recommendedBrowserConfig = { + name: "browser/recommended", languageOptions: { + sourceType: "module", globals: { ...globals.browser, }, @@ -45,5 +69,11 @@ const recommendedBrowserConfig = { export default { "browser/recommended": recommendedBrowserConfig, - "browser/recommended-outdated": recommendedBrowserOutdatedConfig, + // TODO remove me in the next major release + "browser/recommended-outdated": recommendedBrowserOutdatedModuleConfig, + // Useful when you need to generate outdated es5 code using babel/swc/etc + "browser/recommended-outdated-script": recommendedBrowserOutdatedScriptConfig, + "browser/recommended-outdated-commonjs": + recommendedBrowserOutdatedCommonjsConfig, + "browser/recommended-outdated-module": recommendedBrowserOutdatedModuleConfig, }; diff --git a/configs/javascript.js b/configs/javascript.js index da7f22e..a807f97 100644 --- a/configs/javascript.js +++ b/configs/javascript.js @@ -645,7 +645,7 @@ const suggestions = { // No need // "sort-vars": "off", - strict: ["error", "safe"], + strict: ["error", "global"], "symbol-description": "error", diff --git a/configs/markdown.js b/configs/markdown.js index b689274..30499d9 100644 --- a/configs/markdown.js +++ b/configs/markdown.js @@ -25,6 +25,7 @@ async function getMarkdownRecommendedConfig() { files: ["**/*.md/*.js", "**/*.md/*.ts"], languageOptions: { sourceType: "module", + ecmaVersion: "latest", parserOptions: { ecmaFeatures: { globalReturn: true, diff --git a/eslint.config.js b/eslint.config.js index 1de6206..b3a5dab 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -9,6 +9,7 @@ export default defineConfig([ "./validation/module-package/**/*", "./validation/dirty-package/**/*", "./validation/browser/**/*", + "./validation/browser-es5/**/*", "./validation/browser-outdated/**/*", "./validation/universal/**/*", ], @@ -17,21 +18,21 @@ export default defineConfig([ // For test purposes { files: ["./validation/commonjs-package/**/*"], - extends: [configs["recommended-commonjs"]], + extends: [configs["node-recommended-commonjs"]], rules: { "n/no-unpublished-require": "off", }, }, { files: ["./validation/module-package/**/*"], - extends: [configs["recommended-module"]], + extends: [configs["node-recommended-module"]], rules: { "n/no-unpublished-require": "off", }, }, { files: ["./validation/dirty-package/**/*"], - extends: [configs["recommended-dirty"]], + extends: [configs["node-recommended-dirty"]], rules: { "n/no-unpublished-require": "off", }, @@ -40,6 +41,13 @@ export default defineConfig([ files: ["./validation/browser/**/*"], extends: [configs["browser-recommended"]], }, + { + files: ["./validation/browser-es5/**/*"], + extends: [configs["browser-outdated-recommended-script"]], + rules: { + "n/no-unpublished-require": "off", + }, + }, { files: ["./validation/browser-outdated/**/*"], extends: [configs["browser-outdated-recommended"]], @@ -57,9 +65,8 @@ export default defineConfig([ "n/hashbang": "off", }, }, - // For test purposes { files: ["./validation/webpack/**/*"], - extends: [configs["recommended-commonjs"], configs["webpack/special"]], + extends: [configs["node-recommended-commonjs"], configs["webpack/special"]], }, ]); diff --git a/validation/browser-es5/code.js b/validation/browser-es5/code.js new file mode 100644 index 0000000..ff052fc --- /dev/null +++ b/validation/browser-es5/code.js @@ -0,0 +1,9 @@ +"use strict"; + +/* eslint-disable no-unused-vars */ + +// eslint-disable-next-line no-undef +var eslint = require("eslint"); + +var a = 1; +var b = "test".indexOf("e") > 0; diff --git a/validation/browser-es5/markdown.md b/validation/browser-es5/markdown.md new file mode 100644 index 0000000..a3c8d1f --- /dev/null +++ b/validation/browser-es5/markdown.md @@ -0,0 +1,5 @@ +```js +import myMod from "my-mod"; + +console.log(myMod); +``` From 9c1728b223ab812249c8128fb9944b9e4a1667a2 Mon Sep 17 00:00:00 2001 From: alexander-akait Date: Tue, 12 Aug 2025 17:00:07 +0300 Subject: [PATCH 3/3] chore(release): 4.6.0 --- CHANGELOG.md | 12 ++++++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 117bb7d..91312fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [4.6.0](https://github.com/webpack/eslint-config-webpack/compare/v4.5.1...v4.6.0) (2025-08-12) + + +### Features + +* new browsers configurations ([#86](https://github.com/webpack/eslint-config-webpack/issues/86)) ([494fd38](https://github.com/webpack/eslint-config-webpack/commit/494fd3873dfcaf215690aa6544a3a6cb288008f7)) + + +### Bug Fixes + +* disable `n/no-extraneous-import` due `import/no-extraneous-dependencies` ([#85](https://github.com/webpack/eslint-config-webpack/issues/85)) ([c600bab](https://github.com/webpack/eslint-config-webpack/commit/c600babfce7f0cec17e40f1afd7b921a77b5a9d0)) + ### [4.5.1](https://github.com/webpack/eslint-config-webpack/compare/v4.5.0...v4.5.1) (2025-07-25) diff --git a/package-lock.json b/package-lock.json index 67e6f77..5778c83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "eslint-config-webpack", - "version": "4.5.1", + "version": "4.6.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "eslint-config-webpack", - "version": "4.5.1", + "version": "4.6.0", "license": "MIT", "dependencies": { "detect-indent": "^7.0.1", diff --git a/package.json b/package.json index a5a239d..9340322 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "eslint-config-webpack", - "version": "4.5.1", + "version": "4.6.0", "description": "Provides Webpack's eslint rules as an extensible shared config", "keywords": [ "eslint",