From c6e10a012a5661281b81e486648a31b03a977ed1 Mon Sep 17 00:00:00 2001 From: Yusuke Hirao Date: Mon, 9 Feb 2026 21:38:02 +0900 Subject: [PATCH 1/2] feat(eslint): migrate to ESLint v10 - Update eslint to v10.0.0 and @eslint/js to v10.0.1 - Replace eslint-plugin-eslint-comments with @eslint-community/eslint-plugin-eslint-comments - Add @eslint/compat and wrap v10-incompatible plugins with fixupPluginRules (import-x, jsdoc, comments, sort-class-members) - Remove deprecated @typescript-eslint/no-var-requires rule --- packages/@d-zero/eslint-config/base.js | 17 +- packages/@d-zero/eslint-config/package.json | 7 +- packages/@d-zero/eslint-config/typescript.js | 1 - yarn.lock | 188 ++++++++++--------- 4 files changed, 121 insertions(+), 92 deletions(-) diff --git a/packages/@d-zero/eslint-config/base.js b/packages/@d-zero/eslint-config/base.js index 7ce7c1f8..d7a6fefe 100644 --- a/packages/@d-zero/eslint-config/base.js +++ b/packages/@d-zero/eslint-config/base.js @@ -1,5 +1,6 @@ +import { fixupPluginRules } from '@eslint/compat'; import js from '@eslint/js'; -import comments from 'eslint-plugin-eslint-comments'; +import comments from '@eslint-community/eslint-plugin-eslint-comments'; import { flatConfigs as importX } from 'eslint-plugin-import-x'; import jsdoc from 'eslint-plugin-jsdoc'; import * as regexpPlugin from 'eslint-plugin-regexp'; @@ -72,6 +73,10 @@ export const base = [ regexpPlugin.configs['flat/recommended'], { ...importX.recommended, + plugins: { + ...importX.recommended.plugins, + 'import-x': fixupPluginRules(importX.recommended.plugins['import-x']), + }, rules: { ...importX.recommended.rules, 'import-x/no-extraneous-dependencies': 2, @@ -108,6 +113,10 @@ export const base = [ }, { ...jsdoc.configs['flat/recommended'], + plugins: { + ...jsdoc.configs['flat/recommended'].plugins, + jsdoc: fixupPluginRules(jsdoc.configs['flat/recommended'].plugins.jsdoc), + }, rules: { ...jsdoc.configs['flat/recommended'].rules, 'jsdoc/require-param-type': 0, @@ -119,13 +128,13 @@ export const base = [ }, { plugins: { - comments, + comments: fixupPluginRules(comments), }, }, { plugins: { - comments, - 'sort-class-members': sortClassMembers, + comments: fixupPluginRules(comments), + 'sort-class-members': fixupPluginRules(sortClassMembers), }, rules: { 'sort-class-members/sort-class-members': [ diff --git a/packages/@d-zero/eslint-config/package.json b/packages/@d-zero/eslint-config/package.json index 6e52c7f1..141b5abf 100644 --- a/packages/@d-zero/eslint-config/package.json +++ b/packages/@d-zero/eslint-config/package.json @@ -19,9 +19,10 @@ ".": "./index.js" }, "dependencies": { - "@eslint/js": "9.39.2", - "eslint": "9.39.2", - "eslint-plugin-eslint-comments": "3.2.0", + "@eslint-community/eslint-plugin-eslint-comments": "4.6.0", + "@eslint/compat": "2.0.2", + "@eslint/js": "10.0.1", + "eslint": "10.0.0", "eslint-plugin-import-x": "4.16.1", "eslint-plugin-jsdoc": "62.5.4", "eslint-plugin-regexp": "3.0.0", diff --git a/packages/@d-zero/eslint-config/typescript.js b/packages/@d-zero/eslint-config/typescript.js index 43b00a30..1a0f8733 100644 --- a/packages/@d-zero/eslint-config/typescript.js +++ b/packages/@d-zero/eslint-config/typescript.js @@ -29,7 +29,6 @@ export const ts = tsESLint.config( '@typescript-eslint/no-namespace': [2, { allowDeclarations: true }], '@typescript-eslint/no-unnecessary-type-assertion': 2, '@typescript-eslint/no-unused-vars': 2, - '@typescript-eslint/no-var-requires': 2, '@typescript-eslint/prefer-namespace-keyword': 2, '@typescript-eslint/require-await': 2, '@typescript-eslint/restrict-plus-operands': 0, diff --git a/yarn.lock b/yarn.lock index f6b58447..c86c4952 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1048,9 +1048,10 @@ __metadata: version: 0.0.0-use.local resolution: "@d-zero/eslint-config@workspace:packages/@d-zero/eslint-config" dependencies: - "@eslint/js": "npm:9.39.2" - eslint: "npm:9.39.2" - eslint-plugin-eslint-comments: "npm:3.2.0" + "@eslint-community/eslint-plugin-eslint-comments": "npm:4.6.0" + "@eslint/compat": "npm:2.0.2" + "@eslint/js": "npm:10.0.1" + eslint: "npm:10.0.0" eslint-plugin-import-x: "npm:4.16.1" eslint-plugin-jsdoc: "npm:62.5.4" eslint-plugin-regexp: "npm:3.0.0" @@ -1372,6 +1373,18 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-plugin-eslint-comments@npm:4.6.0": + version: 4.6.0 + resolution: "@eslint-community/eslint-plugin-eslint-comments@npm:4.6.0" + dependencies: + escape-string-regexp: "npm:^4.0.0" + ignore: "npm:^7.0.5" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + checksum: 10c0/05d964f61aabb6ab0012608750605ac40cb32212858d291f4d10ac5ac66499f87e13c713da3719e7f5dd1460efd7d0805d27000fbc3d18f3326af83ddaad2bf3 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0": version: 4.7.0 resolution: "@eslint-community/eslint-utils@npm:4.7.0" @@ -1405,7 +1418,7 @@ __metadata: languageName: node linkType: hard -"@eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.12.1, @eslint-community/regexpp@npm:^4.8.0": +"@eslint-community/regexpp@npm:^4.11.0, @eslint-community/regexpp@npm:^4.8.0": version: 4.12.1 resolution: "@eslint-community/regexpp@npm:4.12.1" checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 @@ -1419,23 +1432,37 @@ __metadata: languageName: node linkType: hard -"@eslint/config-array@npm:^0.21.1": - version: 0.21.1 - resolution: "@eslint/config-array@npm:0.21.1" +"@eslint/compat@npm:2.0.2": + version: 2.0.2 + resolution: "@eslint/compat@npm:2.0.2" dependencies: - "@eslint/object-schema": "npm:^2.1.7" + "@eslint/core": "npm:^1.1.0" + peerDependencies: + eslint: ^8.40 || 9 || 10 + peerDependenciesMeta: + eslint: + optional: true + checksum: 10c0/176df611bcb54ff7d9c3ac440df6844e552a4ed5de30eba28edbeebb68ccc7f19111fdd4c10780101ee5f871bd03ec0457f38c67834c285751c2bdb37d8ae73c + languageName: node + linkType: hard + +"@eslint/config-array@npm:^0.23.0": + version: 0.23.1 + resolution: "@eslint/config-array@npm:0.23.1" + dependencies: + "@eslint/object-schema": "npm:^3.0.1" debug: "npm:^4.3.1" - minimatch: "npm:^3.1.2" - checksum: 10c0/2f657d4edd6ddcb920579b72e7a5b127865d4c3fb4dda24f11d5c4f445a93ca481aebdbd6bf3291c536f5d034458dbcbb298ee3b698bc6c9dd02900fe87eec3c + minimatch: "npm:^10.1.1" + checksum: 10c0/9a676f3820b3c4dcea8053d07b22c8d8c2501c68d146d35a046e74f825de98deee3679b0cd980e0493a727c26efcb65cd508a96679402936c4ae86ab04a6c918 languageName: node linkType: hard -"@eslint/config-helpers@npm:^0.4.2": - version: 0.4.2 - resolution: "@eslint/config-helpers@npm:0.4.2" +"@eslint/config-helpers@npm:^0.5.2": + version: 0.5.2 + resolution: "@eslint/config-helpers@npm:0.5.2" dependencies: - "@eslint/core": "npm:^0.17.0" - checksum: 10c0/92efd7a527b2d17eb1a148409d71d80f9ac160b565ac73ee092252e8bf08ecd08670699f46b306b94f13d22e88ac88a612120e7847570dd7cdc72f234d50dcb4 + "@eslint/core": "npm:^1.1.0" + checksum: 10c0/0dc65bc5dd80441afbf5007cae702a5d9dd08893e95fed702a463366cf9ce2f4fd90adb09f9012cb4fcc9783d897ccb739067b1b8a5942f4c8288a6efb396d58 languageName: node linkType: hard @@ -1448,38 +1475,35 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^3.3.1": - version: 3.3.1 - resolution: "@eslint/eslintrc@npm:3.3.1" +"@eslint/core@npm:^1.1.0": + version: 1.1.0 + resolution: "@eslint/core@npm:1.1.0" dependencies: - ajv: "npm:^6.12.4" - debug: "npm:^4.3.2" - espree: "npm:^10.0.1" - globals: "npm:^14.0.0" - ignore: "npm:^5.2.0" - import-fresh: "npm:^3.2.1" - js-yaml: "npm:^4.1.0" - minimatch: "npm:^3.1.2" - strip-json-comments: "npm:^3.1.1" - checksum: 10c0/b0e63f3bc5cce4555f791a4e487bf999173fcf27c65e1ab6e7d63634d8a43b33c3693e79f192cbff486d7df1be8ebb2bd2edc6e70ddd486cbfa84a359a3e3b41 + "@types/json-schema": "npm:^7.0.15" + checksum: 10c0/0f875d6f24fbf67cc796e01c2ca82884f755488052ed84183e56377c5b90fe10b491a26e600642db4daea1d5d8ab7906ec12f2bd5cbdb5004b0ef73c802bdb57 languageName: node linkType: hard -"@eslint/js@npm:9.39.2": - version: 9.39.2 - resolution: "@eslint/js@npm:9.39.2" - checksum: 10c0/00f51c52b04ac79faebfaa65a9652b2093b9c924e945479f1f3945473f78aee83cbc76c8d70bbffbf06f7024626575b16d97b66eab16182e1d0d39daff2f26f5 +"@eslint/js@npm:10.0.1": + version: 10.0.1 + resolution: "@eslint/js@npm:10.0.1" + peerDependencies: + eslint: ^10.0.0 + peerDependenciesMeta: + eslint: + optional: true + checksum: 10c0/9f3fcaf71ba7fdf65d82e8faad6ecfe97e11801cc3c362b306a88ea1ed1344ae0d35330dddb0e8ad18f010f6687a70b75491b9e01c8af57acd7987cee6b3ec6c languageName: node linkType: hard -"@eslint/object-schema@npm:^2.1.7": - version: 2.1.7 - resolution: "@eslint/object-schema@npm:2.1.7" - checksum: 10c0/936b6e499853d1335803f556d526c86f5fe2259ed241bc665000e1d6353828edd913feed43120d150adb75570cae162cf000b5b0dfc9596726761c36b82f4e87 +"@eslint/object-schema@npm:^3.0.1": + version: 3.0.1 + resolution: "@eslint/object-schema@npm:3.0.1" + checksum: 10c0/96ddab8a2f5f1ae4203c8881b9c25a9177e27ca19cd609ea0c275e09d9a59ef0bbcb46e8ef59b887a9054933d96b23c70a98e652a77532273be9cce82f4e38e9 languageName: node linkType: hard -"@eslint/plugin-kit@npm:^0.4.0, @eslint/plugin-kit@npm:^0.4.1": +"@eslint/plugin-kit@npm:^0.4.0": version: 0.4.1 resolution: "@eslint/plugin-kit@npm:0.4.1" dependencies: @@ -1489,6 +1513,16 @@ __metadata: languageName: node linkType: hard +"@eslint/plugin-kit@npm:^0.6.0": + version: 0.6.0 + resolution: "@eslint/plugin-kit@npm:0.6.0" + dependencies: + "@eslint/core": "npm:^1.1.0" + levn: "npm:^0.4.1" + checksum: 10c0/1d726338a9f4537fe2848796c44d801093ea3a99166dbc45bc6f7742fa2ad74ce0c2f114092ce4460710a9dfe5ea6e3500446f81842388bf81328c97c3a43d9d + languageName: node + linkType: hard + "@hono/node-server@npm:^1.19.7": version: 1.19.9 resolution: "@hono/node-server@npm:1.19.9" @@ -3523,6 +3557,13 @@ __metadata: languageName: node linkType: hard +"@types/esrecurse@npm:^4.3.1": + version: 4.3.1 + resolution: "@types/esrecurse@npm:4.3.1" + checksum: 10c0/90dad74d5da3ad27606d8e8e757322f33171cfeaa15ad558b615cf71bb2a516492d18f55f4816384685a3eb2412142e732bbae9a4a7cd2cf3deb7572aa4ebe03 + languageName: node + linkType: hard + "@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6, @types/estree@npm:^1.0.8": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" @@ -4793,7 +4834,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": +"chalk@npm:^4.0.2, chalk@npm:^4.1.0, chalk@npm:^4.1.1, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -6350,18 +6391,6 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-eslint-comments@npm:3.2.0": - version: 3.2.0 - resolution: "eslint-plugin-eslint-comments@npm:3.2.0" - dependencies: - escape-string-regexp: "npm:^1.0.5" - ignore: "npm:^5.0.5" - peerDependencies: - eslint: ">=4.19.1" - checksum: 10c0/c71db824592dc8ea498021572a0bd33d763ef26126bdb3b84a027ca75a1adbe0894ec95024f7de39ef12308560e62cbf8af0d06ffe472be5ba8bd9169c928e96 - languageName: node - linkType: hard - "eslint-plugin-import-x@npm:4.16.1": version: 4.16.1 resolution: "eslint-plugin-import-x@npm:4.16.1" @@ -6466,13 +6495,15 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^8.4.0": - version: 8.4.0 - resolution: "eslint-scope@npm:8.4.0" +"eslint-scope@npm:^9.1.0": + version: 9.1.0 + resolution: "eslint-scope@npm:9.1.0" dependencies: + "@types/esrecurse": "npm:^4.3.1" + "@types/estree": "npm:^1.0.8" esrecurse: "npm:^4.3.0" estraverse: "npm:^5.2.0" - checksum: 10c0/407f6c600204d0f3705bd557f81bd0189e69cd7996f408f8971ab5779c0af733d1af2f1412066b40ee1588b085874fc37a2333986c6521669cdbdd36ca5058e0 + checksum: 10c0/b503f739bb1d8da2e94b56b7655aaaa3af35e3180b93310523b11d326b90c4caf00ec0138a601c56f672a4da17958cf28d0c76806e448e5d35429754d2691040 languageName: node linkType: hard @@ -6497,31 +6528,28 @@ __metadata: languageName: node linkType: hard -"eslint@npm:9.39.2": - version: 9.39.2 - resolution: "eslint@npm:9.39.2" +"eslint@npm:10.0.0": + version: 10.0.0 + resolution: "eslint@npm:10.0.0" dependencies: "@eslint-community/eslint-utils": "npm:^4.8.0" - "@eslint-community/regexpp": "npm:^4.12.1" - "@eslint/config-array": "npm:^0.21.1" - "@eslint/config-helpers": "npm:^0.4.2" - "@eslint/core": "npm:^0.17.0" - "@eslint/eslintrc": "npm:^3.3.1" - "@eslint/js": "npm:9.39.2" - "@eslint/plugin-kit": "npm:^0.4.1" + "@eslint-community/regexpp": "npm:^4.12.2" + "@eslint/config-array": "npm:^0.23.0" + "@eslint/config-helpers": "npm:^0.5.2" + "@eslint/core": "npm:^1.1.0" + "@eslint/plugin-kit": "npm:^0.6.0" "@humanfs/node": "npm:^0.16.6" "@humanwhocodes/module-importer": "npm:^1.0.1" "@humanwhocodes/retry": "npm:^0.4.2" "@types/estree": "npm:^1.0.6" ajv: "npm:^6.12.4" - chalk: "npm:^4.0.0" cross-spawn: "npm:^7.0.6" debug: "npm:^4.3.2" escape-string-regexp: "npm:^4.0.0" - eslint-scope: "npm:^8.4.0" - eslint-visitor-keys: "npm:^4.2.1" - espree: "npm:^10.4.0" - esquery: "npm:^1.5.0" + eslint-scope: "npm:^9.1.0" + eslint-visitor-keys: "npm:^5.0.0" + espree: "npm:^11.1.0" + esquery: "npm:^1.7.0" esutils: "npm:^2.0.2" fast-deep-equal: "npm:^3.1.3" file-entry-cache: "npm:^8.0.0" @@ -6531,8 +6559,7 @@ __metadata: imurmurhash: "npm:^0.1.4" is-glob: "npm:^4.0.0" json-stable-stringify-without-jsonify: "npm:^1.0.1" - lodash.merge: "npm:^4.6.2" - minimatch: "npm:^3.1.2" + minimatch: "npm:^10.1.1" natural-compare: "npm:^1.4.0" optionator: "npm:^0.9.3" peerDependencies: @@ -6542,11 +6569,11 @@ __metadata: optional: true bin: eslint: bin/eslint.js - checksum: 10c0/bb88ca8fd16bb7e1ac3e13804c54d41c583214460c0faa7b3e7c574e69c5600c7122295500fb4b0c06067831111db740931e98da1340329527658e1cf80073d3 + checksum: 10c0/87f3aa069693969841d773423c214ec83226873ead8565a65bdb40a7a0d3d5c95b8262c8232403eea235c5e1477457f893a3b6a72a0f4abc6bf2fee8f8410ef8 languageName: node linkType: hard -"espree@npm:10.4.0, espree@npm:^10.0.1, espree@npm:^10.4.0": +"espree@npm:10.4.0": version: 10.4.0 resolution: "espree@npm:10.4.0" dependencies: @@ -6578,7 +6605,7 @@ __metadata: languageName: node linkType: hard -"esquery@npm:^1.5.0, esquery@npm:^1.6.0": +"esquery@npm:^1.6.0": version: 1.6.0 resolution: "esquery@npm:1.6.0" dependencies: @@ -7634,13 +7661,6 @@ __metadata: languageName: node linkType: hard -"globals@npm:^14.0.0": - version: 14.0.0 - resolution: "globals@npm:14.0.0" - checksum: 10c0/b96ff42620c9231ad468d4c58ff42afee7777ee1c963013ff8aabe095a451d0ceeb8dcd8ef4cbd64d2538cef45f787a78ba3a9574f4a634438963e334471302d - languageName: node - linkType: hard - "globals@npm:^16.4.0": version: 16.5.0 resolution: "globals@npm:16.5.0" @@ -8062,14 +8082,14 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.0.5, ignore@npm:^5.2.0": +"ignore@npm:^5.2.0": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard -"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0, import-fresh@npm:^3.3.1": +"import-fresh@npm:^3.3.0, import-fresh@npm:^3.3.1": version: 3.3.1 resolution: "import-fresh@npm:3.3.1" dependencies: @@ -13084,7 +13104,7 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.0.1, strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.0.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd From 50352ea4edd0682701de989487b9161409fa0b19 Mon Sep 17 00:00:00 2001 From: Yusuke Hirao Date: Mon, 9 Feb 2026 21:39:56 +0900 Subject: [PATCH 2/2] fix(stylelint-rules): fix no-useless-assignment in prefer-individual-transform-properties --- .../prefer-individual-transform-properties/index.ts | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/@d-zero/stylelint-rules/src/rules/prefer-individual-transform-properties/index.ts b/packages/@d-zero/stylelint-rules/src/rules/prefer-individual-transform-properties/index.ts index f08df5e6..4003c87d 100644 --- a/packages/@d-zero/stylelint-rules/src/rules/prefer-individual-transform-properties/index.ts +++ b/packages/@d-zero/stylelint-rules/src/rules/prefer-individual-transform-properties/index.ts @@ -53,15 +53,18 @@ function canBeReplacedWithIndividualProperties(value: string): { // Generate suggestion based on function type const args = postcssValueParser.stringify(node.nodes); suggestions.push(`${property}: ${args}`); - - // Don't walk into the arguments of transform functions - return false; + break; } } if (!isReplaceable) { hasNonReplaceableFunction = true; } + + // Don't walk into the arguments of transform functions + if (isReplaceable) { + return false; + } } return true; });