diff --git a/.github/renovate.json5 b/.github/renovate.json5 index b1a585e0cbe6..35ff3088230d 100644 --- a/.github/renovate.json5 +++ b/.github/renovate.json5 @@ -11,8 +11,6 @@ 'ajv', // ESM only so we can't go higher until we natively run ESM internally. 'globby', - // Blocked until we enable ESLint v9 locally in our own PR (#9119). - 'eslint', // ESM only so we can't go higher until we natively run ESM internally. 'execa', ], diff --git a/package.json b/package.json index 48548cd247b9..cf83f8e5d07f 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "cross-fetch": "^4.0.0", "cspell": "^8.15.2", "downlevel-dts": ">=0.11.0", - "eslint": "^9.3.0", + "eslint": "^9.13.0", "eslint-plugin-eslint-comments": "^3.2.0", "eslint-plugin-eslint-plugin": "^6.2.0", "eslint-plugin-import": "^2.29.1", @@ -137,7 +137,6 @@ "@types/estree": "link:./tools/dummypkg", "@types/node": "^20.0.0", "@types/react": "^18.2.14", - "eslint": "^9", "eslint-plugin-eslint-plugin@^5.5.0": "patch:eslint-plugin-eslint-plugin@npm%3A5.5.1#./.yarn/patches/eslint-plugin-eslint-plugin-npm-5.5.1-4206c2506d.patch", "eslint-visitor-keys": "^3.4.1", "jest-config": "^29", diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 3ec48b893710..3d01ba6a77ea 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -80,7 +80,7 @@ "ajv": "^6.12.6", "cross-env": "^7.0.3", "cross-fetch": "*", - "eslint": "*", + "eslint": "^9.13.0", "jest": "29.7.0", "jest-specific-snapshot": "^8.0.0", "json-schema": "*", diff --git a/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts b/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts index a49055b6c0d9..ce221c1dc57a 100644 --- a/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts +++ b/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts @@ -5,11 +5,6 @@ import rule from '../../src/rules/no-useless-constructor'; const ruleTester = new RuleTester(); -const error = { - messageId: 'noUselessConstructor' as const, - type: AST_NODE_TYPES.MethodDefinition, -}; - ruleTester.run('no-useless-constructor', rule, { valid: [ 'class A {}', @@ -214,13 +209,30 @@ class A extends Object { `, ], invalid: [ + /* eslint-disable @typescript-eslint/no-unnecessary-template-expression -- trailing whitespace */ + { code: ` class A { constructor() {} } `, - errors: [error], + errors: [ + { + messageId: 'noUselessConstructor', + suggestions: [ + { + messageId: 'removeConstructor', + output: ` +class A { +${' '} +} + `, + }, + ], + type: AST_NODE_TYPES.MethodDefinition, + }, + ], }, { code: ` @@ -230,7 +242,22 @@ class A extends B { } } `, - errors: [error], + errors: [ + { + messageId: 'noUselessConstructor', + suggestions: [ + { + messageId: 'removeConstructor', + output: ` +class A extends B { +${' '} +} + `, + }, + ], + type: AST_NODE_TYPES.MethodDefinition, + }, + ], }, { code: ` @@ -240,7 +267,22 @@ class A extends B { } } `, - errors: [error], + errors: [ + { + messageId: 'noUselessConstructor', + suggestions: [ + { + messageId: 'removeConstructor', + output: ` +class A extends B { +${' '} +} + `, + }, + ], + type: AST_NODE_TYPES.MethodDefinition, + }, + ], }, { code: ` @@ -250,7 +292,22 @@ class A extends B { } } `, - errors: [error], + errors: [ + { + messageId: 'noUselessConstructor', + suggestions: [ + { + messageId: 'removeConstructor', + output: ` +class A extends B { +${' '} +} + `, + }, + ], + type: AST_NODE_TYPES.MethodDefinition, + }, + ], }, { code: ` @@ -260,7 +317,22 @@ class A extends B { } } `, - errors: [error], + errors: [ + { + messageId: 'noUselessConstructor', + suggestions: [ + { + messageId: 'removeConstructor', + output: ` +class A extends B { +${' '} +} + `, + }, + ], + type: AST_NODE_TYPES.MethodDefinition, + }, + ], }, { code: ` @@ -270,7 +342,22 @@ class A extends B.C { } } `, - errors: [error], + errors: [ + { + messageId: 'noUselessConstructor', + suggestions: [ + { + messageId: 'removeConstructor', + output: ` +class A extends B.C { +${' '} +} + `, + }, + ], + type: AST_NODE_TYPES.MethodDefinition, + }, + ], }, { code: ` @@ -280,7 +367,22 @@ class A extends B { } } `, - errors: [error], + errors: [ + { + messageId: 'noUselessConstructor', + suggestions: [ + { + messageId: 'removeConstructor', + output: ` +class A extends B { +${' '} +} + `, + }, + ], + type: AST_NODE_TYPES.MethodDefinition, + }, + ], }, { code: ` @@ -290,7 +392,22 @@ class A extends B { } } `, - errors: [error], + errors: [ + { + messageId: 'noUselessConstructor', + suggestions: [ + { + messageId: 'removeConstructor', + output: ` +class A extends B { +${' '} +} + `, + }, + ], + type: AST_NODE_TYPES.MethodDefinition, + }, + ], }, { code: ` @@ -298,7 +415,23 @@ class A { public constructor() {} } `, - errors: [error], + errors: [ + { + messageId: 'noUselessConstructor', + suggestions: [ + { + messageId: 'removeConstructor', + output: ` +class A { +${' '} +} + `, + }, + ], + type: AST_NODE_TYPES.MethodDefinition, + }, + ], }, + /* eslint-enable @typescript-eslint/no-unnecessary-template-expression */ ], }); diff --git a/packages/eslint-plugin/tests/schema-snapshots/no-restricted-imports.shot b/packages/eslint-plugin/tests/schema-snapshots/no-restricted-imports.shot index 7c4fb5932293..c7b4409d0bf0 100644 --- a/packages/eslint-plugin/tests/schema-snapshots/no-restricted-imports.shot +++ b/packages/eslint-plugin/tests/schema-snapshots/no-restricted-imports.shot @@ -147,9 +147,11 @@ exports[`Rule schemas should be convertible to TS types for documentation purpos "message": { "minLength": 1, "type": "string" + }, + "regex": { + "type": "string" } }, - "required": ["group"], "type": "object" }, "type": "array", @@ -202,10 +204,11 @@ type Options = /** Whether to allow type-only imports for a path. */ allowTypeImports?: boolean; caseSensitive?: boolean; - group: [string, ...string[]]; + group?: [string, ...string[]]; importNamePattern?: string; importNames?: [string, ...string[]]; message?: string; + regex?: string; }[] | string[]; }, diff --git a/packages/eslint-plugin/typings/eslint-rules.d.ts b/packages/eslint-plugin/typings/eslint-rules.d.ts index 557a6eece2f4..a946d3365a55 100644 --- a/packages/eslint-plugin/typings/eslint-rules.d.ts +++ b/packages/eslint-plugin/typings/eslint-rules.d.ts @@ -404,7 +404,7 @@ declare module 'eslint/lib/rules/no-useless-constructor' { import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< - 'noUselessConstructor', + 'noUselessConstructor' | 'removeConstructor', [], unknown, { diff --git a/packages/website-eslint/package.json b/packages/website-eslint/package.json index 29dbea9a6d6c..b8387308bf40 100644 --- a/packages/website-eslint/package.json +++ b/packages/website-eslint/package.json @@ -29,7 +29,7 @@ "@typescript-eslint/typescript-estree": "workspace:*", "@typescript-eslint/visitor-keys": "workspace:*", "esbuild": "~0.24.0", - "eslint": "*", + "eslint": "^9.13.0", "esquery": "*", "prettier": "^3.2.5", "tsx": "*" diff --git a/packages/website/package.json b/packages/website/package.json index 55d3897cfbff..1fba9cef079b 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -27,7 +27,7 @@ "@uiw/react-shields": "2.0.1", "clsx": "^2.1.0", "docusaurus-plugin-typedoc": "^1.0.1", - "eslint": "*", + "eslint": "^9.13.0", "json5": "^2.2.3", "konamimojisplosion": "^0.5.2", "lz-string": "^1.5.0", diff --git a/yarn.lock b/yarn.lock index 942816da076c..cb1dc9513fbd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3383,13 +3383,20 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.6.1, @eslint-community/regexpp@npm:^4.8.0, @eslint-community/regexpp@npm:^4.9.1": +"@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.8.0, @eslint-community/regexpp@npm:^4.9.1": version: 4.11.0 resolution: "@eslint-community/regexpp@npm:4.11.0" checksum: 97d2fe46690b69417a551bd19a3dc53b6d9590d2295c43cc4c4e44e64131af541e2f4a44d5c12e87de990403654d3dae9d33600081f3a2f0386b368abc9111ec languageName: node linkType: hard +"@eslint-community/regexpp@npm:^4.11.0": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 0d628680e204bc316d545b4993d3658427ca404ae646ce541fcc65306b8c712c340e5e573e30fb9f85f4855c0c5f6dca9868931f2fcced06417fbe1a0c6cd2d6 + languageName: node + linkType: hard + "@eslint/compat@npm:^1.0.1": version: 1.2.0 resolution: "@eslint/compat@npm:1.2.0" @@ -3402,6 +3409,24 @@ __metadata: languageName: node linkType: hard +"@eslint/config-array@npm:^0.18.0": + version: 0.18.0 + resolution: "@eslint/config-array@npm:0.18.0" + dependencies: + "@eslint/object-schema": ^2.1.4 + debug: ^4.3.1 + minimatch: ^3.1.2 + checksum: 5ff748e1788745bfb3160c3b3151d62a7c054e336e9fe8069e86cfa6106f3abbd59b24f1253122268295f98c66803e9a7b23d7f947a8c00f62d2060cc44bc7fc + languageName: node + linkType: hard + +"@eslint/core@npm:^0.7.0": + version: 0.7.0 + resolution: "@eslint/core@npm:0.7.0" + checksum: 91d4aa2805f356fb0bba693411deab91590472666e22c9c03304ba03b288b74403a5e120db16d0926ea94281e15563a8d4d519cd1e565d514e2d5015a84b8575 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^2.1.4": version: 2.1.4 resolution: "@eslint/eslintrc@npm:2.1.4" @@ -3443,10 +3468,10 @@ __metadata: languageName: node linkType: hard -"@eslint/js@npm:9.3.0": - version: 9.3.0 - resolution: "@eslint/js@npm:9.3.0" - checksum: 5af317c8bcfef660efc17624b825c71bac16770f8866bfdc2922e1fcc2010af96e4f896e91724b81550e5dba6db6983c221b5be9a1294c9e727dee9ada15c9f8 +"@eslint/js@npm:9.13.0": + version: 9.13.0 + resolution: "@eslint/js@npm:9.13.0" + checksum: ad5dd72aa75bd8d5bd3c1ffe68cf748aed7edef5fcf97193eb52af35dbb89a1999f526a0e2c169ef5572afbbbbb5f37d6fd0af2991d9ccdc29f753da5cc0f532 languageName: node linkType: hard @@ -3457,6 +3482,22 @@ __metadata: languageName: node linkType: hard +"@eslint/object-schema@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/object-schema@npm:2.1.4" + checksum: 5a03094115bcdab7991dbbc5d17a9713f394cebb4b44d3eaf990d7487b9b8e1877b817997334ab40be52e299a0384595c6f6ba91b389901e5e1d21efda779271 + languageName: node + linkType: hard + +"@eslint/plugin-kit@npm:^0.2.0": + version: 0.2.2 + resolution: "@eslint/plugin-kit@npm:0.2.2" + dependencies: + levn: ^0.4.1 + checksum: 08935d81f59f8b2ccc6df1e2517684d6cb9911390e210dacd861be60a000224b0b2f5aa9364ff78e4b14152d1d777aa621f587479aae07d0670b2e14a5a18ef6 + languageName: node + linkType: hard + "@fastify/busboy@npm:^2.0.0": version: 2.0.0 resolution: "@fastify/busboy@npm:2.0.0" @@ -3480,14 +3521,20 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/config-array@npm:^0.13.0": - version: 0.13.0 - resolution: "@humanwhocodes/config-array@npm:0.13.0" +"@humanfs/core@npm:^0.19.1": + version: 0.19.1 + resolution: "@humanfs/core@npm:0.19.1" + checksum: 611e0545146f55ddfdd5c20239cfb7911f9d0e28258787c4fc1a1f6214250830c9367aaaeace0096ed90b6739bee1e9c52ad5ba8adaf74ab8b449119303babfe + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.5": + version: 0.16.6 + resolution: "@humanfs/node@npm:0.16.6" dependencies: - "@humanwhocodes/object-schema": ^2.0.3 - debug: ^4.3.1 - minimatch: ^3.0.5 - checksum: eae69ff9134025dd2924f0b430eb324981494be26f0fddd267a33c28711c4db643242cf9fddf7dadb9d16c96b54b2d2c073e60a56477df86e0173149313bd5d6 + "@humanfs/core": ^0.19.1 + "@humanwhocodes/retry": ^0.3.0 + checksum: f9cb52bb235f8b9c6fcff43a7e500669a38f8d6ce26593404a9b56365a1644e0ed60c720dc65ff6a696b1f85f3563ab055bb554ec8674f2559085ba840e47710 languageName: node linkType: hard @@ -3498,13 +3545,6 @@ __metadata: languageName: node linkType: hard -"@humanwhocodes/object-schema@npm:^2.0.3": - version: 2.0.3 - resolution: "@humanwhocodes/object-schema@npm:2.0.3" - checksum: d3b78f6c5831888c6ecc899df0d03bcc25d46f3ad26a11d7ea52944dc36a35ef543fad965322174238d677a43d5c694434f6607532cff7077062513ad7022631 - languageName: node - linkType: hard - "@humanwhocodes/retry@npm:^0.3.0": version: 0.3.0 resolution: "@humanwhocodes/retry@npm:0.3.0" @@ -3512,6 +3552,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/retry@npm:^0.3.1": + version: 0.3.1 + resolution: "@humanwhocodes/retry@npm:0.3.1" + checksum: 7e5517bb51dbea3e02ab6cacef59a8f4b0ca023fc4b0b8cbc40de0ad29f46edd50b897c6e7fba79366a0217e3f48e2da8975056f6c35cfe19d9cc48f1d03c1dd + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -3987,7 +4034,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:1.2.8, @nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": +"@nodelib/fs.walk@npm:1.2.8, @nodelib/fs.walk@npm:^1.2.3": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -5252,7 +5299,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.4, @types/json-schema@npm:^7.0.5, @types/json-schema@npm:^7.0.8, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 @@ -5626,7 +5673,7 @@ __metadata: ajv: ^6.12.6 cross-env: ^7.0.3 cross-fetch: "*" - eslint: "*" + eslint: ^9.13.0 graphemer: ^1.4.0 ignore: ^5.3.1 jest: 29.7.0 @@ -5843,7 +5890,7 @@ __metadata: cross-fetch: ^4.0.0 cspell: ^8.15.2 downlevel-dts: ">=0.11.0" - eslint: ^9.3.0 + eslint: ^9.13.0 eslint-plugin-eslint-comments: ^3.2.0 eslint-plugin-eslint-plugin: ^6.2.0 eslint-plugin-import: ^2.29.1 @@ -5997,7 +6044,7 @@ __metadata: "@typescript-eslint/typescript-estree": "workspace:*" "@typescript-eslint/visitor-keys": "workspace:*" esbuild: ~0.24.0 - eslint: "*" + eslint: ^9.13.0 esquery: "*" prettier: ^3.2.5 tsx: "*" @@ -6268,6 +6315,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.14.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 8755074ba55fff94e84e81c72f1013c2d9c78e973c31231c8ae505a5f966859baf654bddd75046bffd73ce816b149298977fff5077a3033dedba0ae2aad152d4 + languageName: node + linkType: hard + "address@npm:^1.0.1, address@npm:^1.1.2": version: 1.1.2 resolution: "address@npm:1.1.2" @@ -9977,13 +10033,13 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.0.1": - version: 8.0.1 - resolution: "eslint-scope@npm:8.0.1" +"eslint-scope@npm:^8.1.0": + version: 8.2.0 + resolution: "eslint-scope@npm:8.2.0" dependencies: esrecurse: ^4.3.0 estraverse: ^5.2.0 - checksum: 67a5a39312dadb8c9a677df0f2e8add8daf15280b08bfe07f898d5347ee2d7cd2a1f5c2760f34e46e8f5f13f7192f47c2c10abe676bfa4173ae5539365551940 + checksum: 750eff4672ca2bf274ec0d1bbeae08aadd53c1907d5c6aff5564d8e047a5f49afa8ae6eee333cab637fd3ebcab2141659d8f2f040f6fdc982b0f61f8bf03136f languageName: node linkType: hard @@ -9994,27 +10050,31 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^9": - version: 9.3.0 - resolution: "eslint@npm:9.3.0" +"eslint@npm:^9.13.0": + version: 9.13.0 + resolution: "eslint@npm:9.13.0" dependencies: "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.6.1 + "@eslint-community/regexpp": ^4.11.0 + "@eslint/config-array": ^0.18.0 + "@eslint/core": ^0.7.0 "@eslint/eslintrc": ^3.1.0 - "@eslint/js": 9.3.0 - "@humanwhocodes/config-array": ^0.13.0 + "@eslint/js": 9.13.0 + "@eslint/plugin-kit": ^0.2.0 + "@humanfs/node": ^0.16.5 "@humanwhocodes/module-importer": ^1.0.1 - "@humanwhocodes/retry": ^0.3.0 - "@nodelib/fs.walk": ^1.2.8 + "@humanwhocodes/retry": ^0.3.1 + "@types/estree": ^1.0.6 + "@types/json-schema": ^7.0.15 ajv: ^6.12.4 chalk: ^4.0.0 cross-spawn: ^7.0.2 debug: ^4.3.2 escape-string-regexp: ^4.0.0 - eslint-scope: ^8.0.1 - eslint-visitor-keys: ^4.0.0 - espree: ^10.0.1 - esquery: ^1.4.2 + eslint-scope: ^8.1.0 + eslint-visitor-keys: ^4.1.0 + espree: ^10.2.0 + esquery: ^1.5.0 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 file-entry-cache: ^8.0.0 @@ -10023,18 +10083,20 @@ __metadata: ignore: ^5.2.0 imurmurhash: ^0.1.4 is-glob: ^4.0.0 - is-path-inside: ^3.0.3 json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.4.1 lodash.merge: ^4.6.2 minimatch: ^3.1.2 natural-compare: ^1.4.0 optionator: ^0.9.3 - strip-ansi: ^6.0.1 text-table: ^0.2.0 + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true bin: eslint: bin/eslint.js - checksum: c6d1eb8b4b064470a99f0d927b0d2b88f1947d7e871761b43b84e6c9b6464db4f6ebbb868f7196a45d2589978b09919a8807d200e3b1640d0a9cd245c9504707 + checksum: 99e878d6883864b8361bfaf2a2304f1e133347ac19976c79e1430623cd311cb38253bbd122100788082eded947693cce5c7e67dfd2b5173e6f05edb92dcb2206 languageName: node linkType: hard @@ -10049,6 +10111,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^10.2.0": + version: 10.3.0 + resolution: "espree@npm:10.3.0" + dependencies: + acorn: ^8.14.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^4.2.0 + checksum: 63e8030ff5a98cea7f8b3e3a1487c998665e28d674af08b9b3100ed991670eb3cbb0e308c4548c79e03762753838fbe530c783f17309450d6b47a889fee72bef + languageName: node + linkType: hard + "espree@npm:^9.6.0": version: 9.6.1 resolution: "espree@npm:9.6.1" @@ -10070,7 +10143,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:*, esquery@npm:^1.4.0, esquery@npm:^1.4.2, esquery@npm:^1.5.0": +"esquery@npm:*, esquery@npm:^1.4.0, esquery@npm:^1.5.0": version: 1.6.0 resolution: "esquery@npm:1.6.0" dependencies: @@ -12420,7 +12493,7 @@ __metadata: languageName: node linkType: hard -"is-path-inside@npm:^3.0.2, is-path-inside@npm:^3.0.3": +"is-path-inside@npm:^3.0.2": version: 3.0.3 resolution: "is-path-inside@npm:3.0.3" checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 @@ -15000,7 +15073,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:3.1.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": +"minimatch@npm:3.1.2, minimatch@npm:^3.0.4, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -20295,7 +20368,7 @@ __metadata: copy-webpack-plugin: ^12.0.0 cross-fetch: "*" docusaurus-plugin-typedoc: ^1.0.1 - eslint: "*" + eslint: ^9.13.0 history: ^4.9.0 json5: ^2.2.3 konamimojisplosion: ^0.5.2