Conversation
✅ Deploy Preview for docs-eslint canceled.
|
|
Would it make sense to link this issue to #3565? |
|
Sure! I forgot to add the link in the description. |
|
I did some initial testing, and on my machine (Windows 11, 8 logical cores), concurrency seems to be slower. I just ran ESLint on itself. Resultsnzaka@X1-Laptop MINGW64 ~/projects/eslint/eslint (rfc129)
$ time node bin/eslint.js .
real 1m24.218s
user 0m0.514s
sys 0m1.014s
nzaka@X1-Laptop MINGW64 ~/projects/eslint/eslint (rfc129)
$ time node bin/eslint.js . --concurrency auto
real 2m2.273s
user 0m0.544s
sys 0m1.639s
nzaka@X1-Laptop MINGW64 ~/projects/eslint/eslint (rfc129)
$ time node bin/eslint.js . --concurrency auto
real 1m43.752s
user 0m0.468s
sys 0m1.872s
nzaka@X1-Laptop MINGW64 ~/projects/eslint/eslint (rfc129)
$ time node bin/eslint.js . --concurrency 2
real 1m34.724s
user 0m0.607s
sys 0m1.966s
$ time node bin/eslint.js . --concurrency 3
real 1m31.344s
user 0m0.622s
sys 0m1.232s
$ time node bin/eslint.js . --concurrency 4
real 1m46.929s
user 0m0.529s
sys 0m1.170s
$ time node bin/eslint.js . --concurrency 6
real 1m43.638s
user 0m0.592s
sys 0m1.451sWould be good to get some benchmarking on other machines as well. |
|
Benchmarked runnning on my M2 Max laptop (12 logical cores, 8 performance, 4 efficiency): ResultsAs expected, using about half of the available cores ended up being the fastest overall execution. Not using the |
|
@fasttime it may be helpful to add in some debug statements with profiling data to see where the time is being spent. |
@faultyserver Indeed yes, it's expected. That's the reason why @nzakas I've added some debug messages, all details are in the PR description. Please check if this helps to make sense of the slow results. Thanks for testing! |
|
With the latest changes, concurrency=auto runs in roughly the same time as running without concurrency (1m55s), so that's an improvement. As an experiment, I eliminated the use of the Retrier completely and that brought the time down to 1m30s. I don't think removing the Retrier completely will work on larger projects, but it at least gives us an idea of where some of the time is being spent. |
Maybe there is room for improvement in the Retrier logic, as that should be a thin wrapper around the main functionality, I guess. In multithread mode, each worker thread will read at most one file at a time, such that no limited concurrency is necessary even when using the Retrier. This significantly lowers the chances of running into EMFILE and ENFILE errors. I think these errors could still occur if a plugin opens many files at the same time, or if the ESLint API is used to lint files in a process that has many other files open. |
|
I agree, the chances are diminished inside of workers but aren't 0. Because removing the retrier sped things up significantly, it seems worth investigating a lighter-weight option to use inside of workers. |
|
As you asked for further benchmarks, I also gave the current version a try:
Results$ hyperfine --runs 3 --parameter-list threads 1,2,4,6,8,10,auto 'node ./node_modules/.bin/eslint --concurrency {threads}' Benchmark 1: node ./node_modules/.bin/eslint --concurrency 1 Time (mean ± σ): 77.193 s ± 0.800 s [User: 106.509 s, System: 5.332 s] Range (min … max): 76.318 s … 77.885 s 3 runsBenchmark 2: node ./node_modules/.bin/eslint --concurrency 2 Benchmark 3: node ./node_modules/.bin/eslint --concurrency 4 Benchmark 4: node ./node_modules/.bin/eslint --concurrency 6 Benchmark 5: node ./node_modules/.bin/eslint --concurrency 8 Benchmark 6: node ./node_modules/.bin/eslint --concurrency 10 Benchmark 7: node ./node_modules/.bin/eslint --concurrency auto Summary $ hyperfine --runs 3 'node ./node_modules/.bin/eslint' |
|
Benchmark from https://github.com/mauriciolauffer/openui5/tree/eslint-v9 Results > concurrency ONhyperfine --runs 5 --parameter-list threads 2,3,4,auto 'node .\node_modules\eslint\bin\eslint.js src --quiet --concurrency {threads}'... Benchmark 1: node .\node_modules\eslint\bin\eslint.js src --quiet --concurrency 2 Benchmark 2: node .\node_modules\eslint\bin\eslint.js src --quiet --concurrency 3 Benchmark 3: node .\node_modules\eslint\bin\eslint.js src --quiet --concurrency 4 Benchmark 4: node .\node_modules\eslint\bin\eslint.js src --quiet --concurrency auto Summary Results > concurrency OFFhyperfine --runs 5 'node .\node_modules\eslint\bin\eslint.js src --quiet'... Benchmark 1: node .\node_modules\eslint\bin\eslint.js src --quiet |
|
For this react project: Example ESLint config{
"settings": {
"import-x/resolver-next": [
{
"interfaceVersion": 3,
"name": "eslint-import-resolver-typescript"
}
],
"polyfills": [
"navigator.serviceWorker",
"Notification",
"requestIdleCallback"
],
"react": {
"version": "18"
},
"import-x/extensions": [
".ts",
".tsx",
".cts",
".mts",
".js",
".jsx",
".cjs",
".mjs"
],
"import-x/external-module-folders": [
"node_modules",
"node_modules/@types"
],
"import-x/parsers": {
"@typescript-eslint/parser": [
".ts",
".tsx",
".cts",
".mts"
]
},
"import-x/resolver": {
"typescript": true
}
},
"linterOptions": {
"reportUnusedDisableDirectives": 1
},
"rules": {
"constructor-super": [
0
],
"for-direction": [
2
],
"getter-return": [
0,
{
"allowImplicit": false
}
],
"no-async-promise-executor": [
2
],
"no-case-declarations": [
2
],
"no-class-assign": [
0
],
"no-compare-neg-zero": [
2
],
"no-cond-assign": [
2,
"except-parens"
],
"no-const-assign": [
0
],
"no-constant-binary-expression": [
2
],
"no-constant-condition": [
2,
{
"checkLoops": "allExceptWhileTrue"
}
],
"no-control-regex": [
2
],
"no-debugger": [
2
],
"no-delete-var": [
2
],
"no-dupe-args": [
0
],
"no-dupe-class-members": [
0
],
"no-dupe-else-if": [
2
],
"no-dupe-keys": [
0
],
"no-duplicate-case": [
2
],
"no-empty": [
2,
{
"allowEmptyCatch": false
}
],
"no-empty-character-class": [
2
],
"no-empty-pattern": [
2,
{
"allowObjectPatternsAsParameters": false
}
],
"no-empty-static-block": [
2
],
"no-ex-assign": [
2
],
"no-extra-boolean-cast": [
2,
{}
],
"no-fallthrough": [
2,
{
"allowEmptyCase": false,
"reportUnusedFallthroughComment": false
}
],
"no-func-assign": [
0
],
"no-global-assign": [
2,
{
"exceptions": []
}
],
"no-import-assign": [
0
],
"no-invalid-regexp": [
2,
{}
],
"no-irregular-whitespace": [
2,
{
"skipComments": false,
"skipJSXText": false,
"skipRegExps": false,
"skipStrings": true,
"skipTemplates": false
}
],
"no-loss-of-precision": [
2
],
"no-misleading-character-class": [
2
],
"no-new-native-nonconstructor": [
0
],
"no-nonoctal-decimal-escape": [
2
],
"no-obj-calls": [
0
],
"no-octal": [
2
],
"no-prototype-builtins": [
2
],
"no-redeclare": [
0,
{
"builtinGlobals": true
}
],
"no-regex-spaces": [
2
],
"no-self-assign": [
2,
{
"props": true
}
],
"no-setter-return": [
0
],
"no-shadow-restricted-names": [
2,
{
"reportGlobalThis": false
}
],
"no-sparse-arrays": [
2
],
"no-this-before-super": [
0
],
"no-undef": [
0,
{
"typeof": false
}
],
"no-unexpected-multiline": [
2
],
"no-unreachable": [
0
],
"no-unsafe-finally": [
2
],
"no-unsafe-negation": [
0,
{
"enforceForOrderingRelations": false
}
],
"no-unsafe-optional-chaining": [
2,
{
"disallowArithmeticOperators": false
}
],
"no-unused-labels": [
2
],
"no-unused-private-class-members": [
2
],
"no-unused-vars": [
0,
{
"ignoreRestSiblings": true
}
],
"no-useless-backreference": [
2
],
"no-useless-catch": [
2
],
"no-useless-escape": [
2,
{
"allowRegexCharacters": []
}
],
"no-with": [
0
],
"require-yield": [
2
],
"use-isnan": [
2,
{
"enforceForIndexOf": false,
"enforceForSwitchCase": true
}
],
"valid-typeof": [
2,
{
"requireStringLiterals": false
}
],
"accessor-pairs": [
2,
{
"enforceForClassMembers": true,
"getWithoutSet": false,
"setWithoutGet": true
}
],
"array-callback-return": [
2,
{
"allowImplicit": false,
"checkForEach": false,
"allowVoid": false
}
],
"block-scoped-var": [
2
],
"class-methods-use-this": [
0,
{
"enforceForClassFields": true,
"exceptMethods": [],
"ignoreOverrideMethods": false
}
],
"consistent-return": [
2,
{
"treatUndefinedAsUnspecified": false
}
],
"default-case-last": [
2
],
"default-case": [
2,
{}
],
"default-param-last": [
0
],
"eqeqeq": [
2,
"always",
{
"null": "ignore"
}
],
"func-name-matching": [
2
],
"func-names": [
2,
"as-needed",
{}
],
"grouped-accessor-pairs": [
2,
"anyOrder"
],
"no-alert": [
2
],
"no-array-constructor": [
0
],
"no-caller": [
2
],
"no-console": [
1,
{}
],
"no-constructor-return": [
2
],
"no-div-regex": [
2
],
"no-duplicate-imports": [
0,
{
"includeExports": false
}
],
"no-empty-function": [
2,
{
"allow": []
}
],
"no-eq-null": [
2
],
"no-eval": [
2,
{
"allowIndirect": false
}
],
"no-extend-native": [
2,
{
"exceptions": []
}
],
"no-implicit-coercion": [
2,
{
"allow": [],
"boolean": true,
"disallowTemplateShorthand": false,
"number": true,
"string": true
}
],
"no-implicit-globals": [
0,
{
"lexicalBindings": false
}
],
"no-implied-eval": [
0
],
"no-invalid-this": [
0,
{
"capIsConstructor": true
}
],
"no-iterator": [
2
],
"no-label-var": [
2
],
"no-loop-func": [
2
],
"no-new-func": [
2
],
"no-new-wrappers": [
2
],
"no-new": [
2
],
"no-octal-escape": [
2
],
"no-param-reassign": [
2
],
"no-proto": [
2
],
"no-return-assign": [
2,
"except-parens"
],
"no-script-url": [
2
],
"no-self-compare": [
2
],
"no-sequences": [
2,
{
"allowInParentheses": true
}
],
"no-shadow": [
0,
{
"allow": [],
"builtinGlobals": false,
"hoist": "functions",
"ignoreOnInitialization": false,
"ignoreTypeValueShadow": true,
"ignoreFunctionTypeParameterNameValueShadow": true
}
],
"no-template-curly-in-string": [
2
],
"no-throw-literal": [
0
],
"no-unmodified-loop-condition": [
2
],
"no-unused-expressions": [
0,
{
"allowShortCircuit": false,
"allowTernary": false,
"allowTaggedTemplates": false,
"enforceForJSX": false,
"ignoreDirectives": false
}
],
"no-use-before-define": [
0,
{
"classes": true,
"functions": false,
"variables": true,
"allowNamedExports": false,
"enums": true,
"typedefs": true,
"ignoreTypeReferences": true
}
],
"no-useless-call": [
2
],
"no-useless-computed-key": [
2,
{
"enforceForClassMembers": true
}
],
"no-useless-concat": [
2
],
"no-useless-constructor": [
0
],
"no-useless-rename": [
2,
{
"ignoreDestructuring": false,
"ignoreImport": false,
"ignoreExport": false
}
],
"no-useless-return": [
2
],
"no-var": [
2
],
"no-void": [
2,
{
"allowAsStatement": true
}
],
"object-shorthand": [
2,
"always",
{
"avoidQuotes": true
}
],
"prefer-numeric-literals": [
2
],
"prefer-promise-reject-errors": [
0,
{
"allowEmptyReject": false
}
],
"prefer-rest-params": [
2
],
"prefer-spread": [
2
],
"prefer-template": [
2
],
"radix": [
2,
"always"
],
"require-await": [
0
],
"symbol-description": [
2
],
"vars-on-top": [
2
],
"import/no-unresolved": [
2
],
"import/named": [
0
],
"import/namespace": [
2
],
"import/default": [
2
],
"import/export": [
2
],
"import/first": [
2
],
"import/no-absolute-path": [
2
],
"import/no-amd": [
2
],
"import/no-anonymous-default-export": [
2
],
"import/no-commonjs": [
2
],
"import/no-cycle": [
0
],
"import/no-deprecated": [
1
],
"import/no-duplicates": [
2
],
"import/no-dynamic-require": [
2
],
"import/no-empty-named-blocks": [
2
],
"import/no-extraneous-dependencies": [
2
],
"import/no-import-module-exports": [
2
],
"import/no-mutable-exports": [
2
],
"import/no-named-as-default-member": [
2
],
"import/no-named-as-default": [
2
],
"import/no-relative-packages": [
1
],
"import/no-self-import": [
2
],
"import/no-useless-path-segments": [
2
],
"import/no-webpack-loader-syntax": [
2
],
"compat/compat": [
2
],
"perfectionist/sort-imports": [
1,
{
"internalPattern": [
"^@mw/.+",
"^@masterworks/.+"
],
"groups": [
"builtin",
"external",
"internal",
"parent",
"sibling",
"index",
"object",
"style",
"side-effect",
"side-effect-style",
"unknown"
]
}
],
"no-new-symbol": [
0
],
"prefer-const": [
2,
{
"destructuring": "any",
"ignoreReadBeforeAssign": false
}
],
"@typescript-eslint/await-thenable": [
2
],
"@typescript-eslint/ban-ts-comment": [
2,
{
"minimumDescriptionLength": 10
}
],
"@typescript-eslint/no-array-constructor": [
2
],
"@typescript-eslint/no-array-delete": [
2
],
"@typescript-eslint/no-base-to-string": [
0
],
"@typescript-eslint/no-duplicate-enum-values": [
2
],
"@typescript-eslint/no-duplicate-type-constituents": [
2
],
"@typescript-eslint/no-empty-object-type": [
2
],
"@typescript-eslint/no-explicit-any": [
2
],
"@typescript-eslint/no-extra-non-null-assertion": [
2
],
"@typescript-eslint/no-floating-promises": [
2
],
"@typescript-eslint/no-for-in-array": [
2
],
"@typescript-eslint/no-implied-eval": [
2
],
"@typescript-eslint/no-misused-new": [
2
],
"@typescript-eslint/no-misused-promises": [
2
],
"@typescript-eslint/no-namespace": [
2
],
"@typescript-eslint/no-non-null-asserted-optional-chain": [
2
],
"@typescript-eslint/no-redundant-type-constituents": [
2
],
"@typescript-eslint/no-require-imports": [
2
],
"@typescript-eslint/no-this-alias": [
2
],
"@typescript-eslint/no-unnecessary-type-assertion": [
2
],
"@typescript-eslint/no-unnecessary-type-constraint": [
2
],
"@typescript-eslint/no-unsafe-argument": [
2
],
"@typescript-eslint/no-unsafe-assignment": [
2
],
"@typescript-eslint/no-unsafe-call": [
2
],
"@typescript-eslint/no-unsafe-declaration-merging": [
2
],
"@typescript-eslint/no-unsafe-enum-comparison": [
2
],
"@typescript-eslint/no-unsafe-function-type": [
2
],
"@typescript-eslint/no-unsafe-member-access": [
2
],
"@typescript-eslint/no-unsafe-return": [
2
],
"@typescript-eslint/no-unsafe-unary-minus": [
2
],
"@typescript-eslint/no-unused-expressions": [
2,
{
"allowShortCircuit": false,
"allowTaggedTemplates": false,
"allowTernary": false
}
],
"@typescript-eslint/no-unused-vars": [
2
],
"@typescript-eslint/no-wrapper-object-types": [
2
],
"@typescript-eslint/only-throw-error": [
2
],
"@typescript-eslint/prefer-as-const": [
2
],
"@typescript-eslint/prefer-namespace-keyword": [
2
],
"@typescript-eslint/prefer-promise-reject-errors": [
2
],
"@typescript-eslint/require-await": [
2
],
"@typescript-eslint/restrict-plus-operands": [
2,
{
"allowAny": false,
"allowBoolean": false,
"allowNullish": false,
"allowNumberAndString": false,
"allowRegExp": false
}
],
"@typescript-eslint/restrict-template-expressions": [
2,
{
"allowNumber": true
}
],
"@typescript-eslint/triple-slash-reference": [
2
],
"@typescript-eslint/unbound-method": [
2,
{
"ignoreStatic": true
}
],
"@typescript-eslint/class-methods-use-this": [
2
],
"@typescript-eslint/default-param-last": [
2
],
"@typescript-eslint/no-dupe-class-members": [
2
],
"@typescript-eslint/no-use-before-define": [
2
],
"@typescript-eslint/parameter-properties": [
2
],
"@typescript-eslint/require-array-sort-compare": [
2
],
"@typescript-eslint/no-confusing-void-expression": [
2
],
"@typescript-eslint/no-deprecated": [
1
],
"@typescript-eslint/no-dynamic-delete": [
2
],
"@typescript-eslint/no-extraneous-class": [
2
],
"@typescript-eslint/no-invalid-void-type": [
2,
{
"allowAsThisParameter": true,
"allowInGenericTypeArguments": true
}
],
"@typescript-eslint/no-meaningless-void-operator": [
2
],
"@typescript-eslint/no-misused-spread": [
2
],
"@typescript-eslint/no-mixed-enums": [
2
],
"@typescript-eslint/no-non-null-asserted-nullish-coalescing": [
2
],
"@typescript-eslint/no-non-null-assertion": [
2
],
"@typescript-eslint/no-unnecessary-boolean-literal-compare": [
2
],
"@typescript-eslint/no-unnecessary-condition": [
2
],
"@typescript-eslint/no-unnecessary-template-expression": [
2
],
"@typescript-eslint/no-unnecessary-type-arguments": [
2
],
"@typescript-eslint/no-unnecessary-type-parameters": [
0
],
"@typescript-eslint/no-useless-constructor": [
2
],
"@typescript-eslint/prefer-literal-enum-member": [
2
],
"@typescript-eslint/prefer-reduce-type-parameter": [
2
],
"@typescript-eslint/prefer-return-this-type": [
2
],
"@typescript-eslint/related-getter-setter-pairs": [
2
],
"no-return-await": [
0
],
"@typescript-eslint/return-await": [
2,
"error-handling-correctness-only"
],
"@typescript-eslint/unified-signatures": [
2
],
"@typescript-eslint/use-unknown-in-catch-callback-variable": [
1
],
"@typescript-eslint/adjacent-overload-signatures": [
1
],
"@typescript-eslint/explicit-function-return-type": [
2,
{
"allowConciseArrowFunctionExpressionsStartingWithVoid": true,
"allowExpressions": true,
"allowIIFEs": true
}
],
"@typescript-eslint/no-shadow": [
2
],
"@typescript-eslint/prefer-enum-initializers": [
2
],
"@typescript-eslint/promise-function-async": [
2
],
"@typescript-eslint/switch-exhaustiveness-check": [
2
],
"react/display-name": [
2
],
"react/jsx-key": [
2,
{
"checkFragmentShorthand": true,
"checkKeyMustBeforeSpread": false,
"warnOnDuplicates": false
}
],
"react/jsx-no-comment-textnodes": [
2
],
"react/jsx-no-duplicate-props": [
2
],
"react/jsx-no-target-blank": [
2
],
"react/jsx-no-undef": [
2
],
"react/jsx-uses-react": [
0
],
"react/jsx-uses-vars": [
2
],
"react/no-children-prop": [
2
],
"react/no-danger-with-children": [
2
],
"react/no-deprecated": [
1
],
"react/no-direct-mutation-state": [
2
],
"react/no-find-dom-node": [
2
],
"react/no-is-mounted": [
2
],
"react/no-render-return-value": [
2
],
"react/no-string-refs": [
2
],
"react/no-unescaped-entities": [
2,
{
"forbid": [
{
"char": ">",
"alternatives": [
">"
]
},
{
"char": "}",
"alternatives": [
"}"
]
}
]
}
],
"react/no-unknown-property": [
2
],
"react/no-unsafe": [
0
],
"react/prop-types": [
0
],
"react/react-in-jsx-scope": [
0
],
"react/require-render-return": [
2
],
"react-hooks/exhaustive-deps": [
2
],
"react-hooks/rules-of-hooks": [
2
],
"react/button-has-type": [
2
],
"react/jsx-no-bind": [
2,
{
"allowArrowFunctions": true,
"allowBind": false,
"allowFunctions": false,
"ignoreRefs": false,
"ignoreDOMComponents": false
}
],
"react/no-access-state-in-setstate": [
2
],
"react/no-array-index-key": [
2
],
"react/no-did-mount-set-state": [
2
],
"react/no-did-update-set-state": [
2
],
"react/no-redundant-should-component-update": [
2
],
"react/no-this-in-sfc": [
2
],
"react/no-typos": [
2
],
"react/no-unused-prop-types": [
2
],
"react/no-unused-state": [
2
],
"react/no-will-update-set-state": [
2
],
"react/prefer-es6-class": [
2
],
"react/prefer-stateless-function": [
2
],
"react/self-closing-comp": [
2
],
"react/style-prop-object": [
2,
{
"allow": [
"FormattedNumber"
]
}
],
"react/void-dom-elements-no-children": [
2
],
"react/default-props-match-prop-types": [
0
],
"react/forbid-foreign-prop-types": [
0
],
"jsx-a11y/alt-text": [
2
],
"jsx-a11y/anchor-ambiguous-text": [
0
],
"jsx-a11y/anchor-has-content": [
2
],
"jsx-a11y/anchor-is-valid": [
2
],
"jsx-a11y/aria-activedescendant-has-tabindex": [
2
],
"jsx-a11y/aria-props": [
2
],
"jsx-a11y/aria-proptypes": [
2
],
"jsx-a11y/aria-role": [
2
],
"jsx-a11y/aria-unsupported-elements": [
2
],
"jsx-a11y/autocomplete-valid": [
2
],
"jsx-a11y/click-events-have-key-events": [
2
],
"jsx-a11y/control-has-associated-label": [
0,
{
"ignoreElements": [
"audio",
"canvas",
"embed",
"input",
"textarea",
"tr",
"video"
],
"ignoreRoles": [
"grid",
"listbox",
"menu",
"menubar",
"radiogroup",
"row",
"tablist",
"toolbar",
"tree",
"treegrid"
],
"includeRoles": [
"alert",
"dialog"
]
}
],
"jsx-a11y/heading-has-content": [
2
],
"jsx-a11y/html-has-lang": [
2
],
"jsx-a11y/iframe-has-title": [
2
],
"jsx-a11y/img-redundant-alt": [
2
],
"jsx-a11y/interactive-supports-focus": [
2,
{
"tabbable": [
"button",
"checkbox",
"link",
"searchbox",
"spinbutton",
"switch",
"textbox"
]
}
],
"jsx-a11y/label-has-associated-control": [
2,
{
"labelComponents": [
"Label"
],
"labelAttributes": [
"label"
],
"controlComponents": [
"Input",
"Field"
],
"depth": 3
}
],
"jsx-a11y/label-has-for": [
0
],
"jsx-a11y/media-has-caption": [
2
],
"jsx-a11y/mouse-events-have-key-events": [
2
],
"jsx-a11y/no-access-key": [
2
],
"jsx-a11y/no-autofocus": [
2
],
"jsx-a11y/no-distracting-elements": [
2
],
"jsx-a11y/no-interactive-element-to-noninteractive-role": [
2,
{
"tr": [
"none",
"presentation"
],
"canvas": [
"img"
]
}
],
"jsx-a11y/no-noninteractive-element-interactions": [
2,
{
"handlers": [
"onClick",
"onError",
"onLoad",
"onMouseDown",
"onMouseUp",
"onKeyPress",
"onKeyDown",
"onKeyUp"
],
"alert": [
"onKeyUp",
"onKeyDown",
"onKeyPress"
],
"body": [
"onError",
"onLoad"
],
"dialog": [
"onKeyUp",
"onKeyDown",
"onKeyPress"
],
"iframe": [
"onError",
"onLoad"
],
"img": [
"onError",
"onLoad"
]
}
],
"jsx-a11y/no-noninteractive-element-to-interactive-role": [
2,
{
"ul": [
"listbox",
"menu",
"menubar",
"radiogroup",
"tablist",
"tree",
"treegrid"
],
"ol": [
"listbox",
"menu",
"menubar",
"radiogroup",
"tablist",
"tree",
"treegrid"
],
"li": [
"menuitem",
"menuitemradio",
"menuitemcheckbox",
"option",
"row",
"tab",
"treeitem"
],
"table": [
"grid"
],
"td": [
"gridcell"
],
"fieldset": [
"radiogroup",
"presentation"
]
}
],
"jsx-a11y/no-noninteractive-tabindex": [
2,
{
"tags": [],
"roles": [
"tabpanel"
],
"allowExpressionValues": true
}
],
"jsx-a11y/no-redundant-roles": [
2,
{
"ul": [
"list"
],
"ol": [
"list"
],
"li": [
"listitem"
]
}
],
"jsx-a11y/no-static-element-interactions": [
2,
{
"allowExpressionValues": true,
"handlers": [
"onClick",
"onMouseDown",
"onMouseUp",
"onKeyPress",
"onKeyDown",
"onKeyUp"
]
}
],
"jsx-a11y/role-has-required-aria-props": [
2
],
"jsx-a11y/role-supports-aria-props": [
2
],
"jsx-a11y/scope": [
2
],
"jsx-a11y/tabindex-no-positive": [
2
],
"arrow-body-style": [
2,
"as-needed"
],
"camelcase": [
2,
{
"allow": [],
"ignoreDestructuring": true,
"ignoreGlobals": true,
"ignoreImports": true,
"properties": "never"
}
],
"capitalized-comments": [
2,
"always",
{
"ignoreConsecutiveComments": true,
"ignoreInlineComments": true
}
],
"dot-notation": [
2,
{
"allowKeywords": true,
"allowPattern": ""
}
],
"no-else-return": [
2,
{
"allowElseIf": true
}
],
"no-extra-bind": [
2
],
"no-extra-label": [
2
],
"prefer-arrow-callback": [
2,
{
"allowNamedFunctions": false,
"allowUnboundThis": true
}
],
"yoda": [
2,
"never",
{
"exceptRange": false,
"onlyEquality": false
}
],
"import/consistent-type-specifier-style": [
0,
"prefer-top-level"
],
"import/order": [
0
],
"@stylistic/arrow-parens": [
2,
"always"
],
"@stylistic/arrow-spacing": [
2
],
"@stylistic/block-spacing": [
2
],
"@stylistic/dot-location": [
2,
"property"
],
"@stylistic/no-floating-decimal": [
2
],
"@stylistic/no-multi-spaces": [
2
],
"@stylistic/rest-spread-spacing": [
2
],
"@stylistic/template-curly-spacing": [
2
],
"@stylistic/wrap-iife": [
2,
"any"
],
"@stylistic/yield-star-spacing": [
2,
"after"
],
"@typescript-eslint/consistent-generic-constructors": [
2
],
"@typescript-eslint/consistent-indexed-object-style": [
2,
"record"
],
"@typescript-eslint/consistent-type-assertions": [
2
],
"@typescript-eslint/consistent-type-exports": [
2
],
"@typescript-eslint/consistent-type-imports": [
2,
{
"prefer": "type-imports",
"fixStyle": "separate-type-imports"
}
],
"@typescript-eslint/member-ordering": [
1
],
"@typescript-eslint/no-inferrable-types": [
1
],
"@typescript-eslint/prefer-for-of": [
2
],
"@typescript-eslint/prefer-includes": [
2
],
"@typescript-eslint/prefer-nullish-coalescing": [
2,
{
"ignoreConditionalTests": true,
"ignorePrimitives": true,
"ignoreTernaryTests": true
}
],
"@typescript-eslint/prefer-optional-chain": [
2
],
"@typescript-eslint/prefer-readonly": [
2
],
"@typescript-eslint/prefer-string-starts-ends-with": [
2
],
"@typescript-eslint/sort-type-constituents": [
2
],
"react/jsx-boolean-value": [
2,
"never"
],
"react/jsx-closing-bracket-location": [
2
],
"react/jsx-closing-tag-location": [
2
],
"react/jsx-curly-spacing": [
2
],
"react/jsx-equals-spacing": [
2,
"never"
],
"react/jsx-fragments": [
2,
"syntax"
],
"react/jsx-no-useless-fragment": [
2
],
"react/jsx-props-no-multi-spaces": [
2
],
"react/jsx-tag-spacing": [
2
],
"react/jsx-wrap-multilines": [
2,
{
"arrow": "parens-new-line",
"assignment": "parens-new-line",
"condition": "parens-new-line",
"declaration": "parens-new-line",
"logical": "parens-new-line",
"prop": "parens-new-line",
"return": "parens-new-line"
}
]
},
"plugins": [
"@",
"import:eslint-plugin-import-x@4.15.0",
"compat:eslint-plugin-compat@6.0.2",
"perfectionist:eslint-plugin-perfectionist@4.13.0",
"@typescript-eslint:@typescript-eslint/eslint-plugin@8.33.1",
"react",
"react-hooks:eslint-plugin-react-hooks",
"jsx-a11y:eslint-plugin-jsx-a11y@6.10.2",
"@stylistic"
],
"language": "@/js",
"languageOptions": {
"sourceType": "module",
"ecmaVersion": 2025,
"parser": "typescript-eslint/parser@8.33.1",
"parserOptions": {
"projectService": true,
"tsconfigRootDir": "/Users/sam/Code/masterworks/frontend/",
"ecmaFeatures": {
"jsx": true
},
"jsxPragma": null
},
"globals": {
"AbortController": false,
"AbortSignal": false,
"AbsoluteOrientationSensor": false,
"AbstractRange": false,
"Accelerometer": false,
"addEventListener": false,
"ai": false,
"AI": false,
"AICreateMonitor": false,
"AITextSession": false,
"alert": false,
"AnalyserNode": false,
"Animation": false,
"AnimationEffect": false,
"AnimationEvent": false,
"AnimationPlaybackEvent": false,
"AnimationTimeline": false,
"AsyncDisposableStack": false,
"atob": false,
"Attr": false,
"Audio": false,
"AudioBuffer": false,
"AudioBufferSourceNode": false,
"AudioContext": false,
"AudioData": false,
"AudioDecoder": false,
"AudioDestinationNode": false,
"AudioEncoder": false,
"AudioListener": false,
"AudioNode": false,
"AudioParam": false,
"AudioParamMap": false,
"AudioProcessingEvent": false,
"AudioScheduledSourceNode": false,
"AudioSinkInfo": false,
"AudioWorklet": false,
"AudioWorkletGlobalScope": false,
"AudioWorkletNode": false,
"AudioWorkletProcessor": false,
"AuthenticatorAssertionResponse": false,
"AuthenticatorAttestationResponse": false,
"AuthenticatorResponse": false,
"BackgroundFetchManager": false,
"BackgroundFetchRecord": false,
"BackgroundFetchRegistration": false,
"BarcodeDetector": false,
"BarProp": false,
"BaseAudioContext": false,
"BatteryManager": false,
"BeforeUnloadEvent": false,
"BiquadFilterNode": false,
"Blob": false,
"BlobEvent": false,
"Bluetooth": false,
"BluetoothCharacteristicProperties": false,
"BluetoothDevice": false,
"BluetoothRemoteGATTCharacteristic": false,
"BluetoothRemoteGATTDescriptor": false,
"BluetoothRemoteGATTServer": false,
"BluetoothRemoteGATTService": false,
"BluetoothUUID": false,
"blur": false,
"BroadcastChannel": false,
"BrowserCaptureMediaStreamTrack": false,
"btoa": false,
"ByteLengthQueuingStrategy": false,
"Cache": false,
"caches": false,
"CacheStorage": false,
"cancelAnimationFrame": false,
"cancelIdleCallback": false,
"CanvasCaptureMediaStream": false,
"CanvasCaptureMediaStreamTrack": false,
"CanvasGradient": false,
"CanvasPattern": false,
"CanvasRenderingContext2D": false,
"CaptureController": false,
"CaretPosition": false,
"CDATASection": false,
"ChannelMergerNode": false,
"ChannelSplitterNode": false,
"ChapterInformation": false,
"CharacterBoundsUpdateEvent": false,
"CharacterData": false,
"clearInterval": false,
"clearTimeout": false,
"clientInformation": false,
"Clipboard": false,
"ClipboardEvent": false,
"ClipboardItem": false,
"close": false,
"closed": false,
"CloseEvent": false,
"CloseWatcher": false,
"CommandEvent": false,
"Comment": false,
"CompositionEvent": false,
"CompressionStream": false,
"confirm": false,
"console": false,
"ConstantSourceNode": false,
"ContentVisibilityAutoStateChangeEvent": false,
"ConvolverNode": false,
"CookieChangeEvent": false,
"CookieDeprecationLabel": false,
"cookieStore": false,
"CookieStore": false,
"CookieStoreManager": false,
"CountQueuingStrategy": false,
"createImageBitmap": false,
"Credential": false,
"credentialless": false,
"CredentialsContainer": false,
"CropTarget": false,
"crossOriginIsolated": false,
"crypto": false,
"Crypto": false,
"CryptoKey": false,
"CSPViolationReportBody": false,
"CSS": false,
"CSSAnimation": false,
"CSSConditionRule": false,
"CSSContainerRule": false,
"CSSCounterStyleRule": false,
"CSSFontFaceRule": false,
"CSSFontFeatureValuesRule": false,
"CSSFontPaletteValuesRule": false,
"CSSGroupingRule": false,
"CSSImageValue": false,
"CSSImportRule": false,
"CSSKeyframeRule": false,
"CSSKeyframesRule": false,
"CSSKeywordValue": false,
"CSSLayerBlockRule": false,
"CSSLayerStatementRule": false,
"CSSMarginRule": false,
"CSSMathClamp": false,
"CSSMathInvert": false,
"CSSMathMax": false,
"CSSMathMin": false,
"CSSMathNegate": false,
"CSSMathProduct": false,
"CSSMathSum": false,
"CSSMathValue": false,
"CSSMatrixComponent": false,
"CSSMediaRule": false,
"CSSNamespaceRule": false,
"CSSNestedDeclarations": false,
"CSSNumericArray": false,
"CSSNumericValue": false,
"CSSPageDescriptors": false,
"CSSPageRule": false,
"CSSPerspective": false,
"CSSPositionTryDescriptors": false,
"CSSPositionTryRule": false,
"CSSPositionValue": false,
"CSSPropertyRule": false,
"CSSRotate": false,
"CSSRule": false,
"CSSRuleList": false,
"CSSScale": false,
"CSSScopeRule": false,
"CSSSkew": false,
"CSSSkewX": false,
"CSSSkewY": false,
"CSSStartingStyleRule": false,
"CSSStyleDeclaration": false,
"CSSStyleRule": false,
"CSSStyleSheet": false,
"CSSStyleValue": false,
"CSSSupportsRule": false,
"CSSTransformComponent": false,
"CSSTransformValue": false,
"CSSTransition": false,
"CSSTranslate": false,
"CSSUnitValue": false,
"CSSUnparsedValue": false,
"CSSVariableReferenceValue": false,
"CSSViewTransitionRule": false,
"currentFrame": false,
"currentTime": false,
"CustomElementRegistry": false,
"customElements": false,
"CustomEvent": false,
"CustomStateSet": false,
"DataTransfer": false,
"DataTransferItem": false,
"DataTransferItemList": false,
"DecompressionStream": false,
"DelayNode": false,
"DelegatedInkTrailPresenter": false,
"DeviceMotionEvent": false,
"DeviceMotionEventAcceleration": false,
"DeviceMotionEventRotationRate": false,
"DeviceOrientationEvent": false,
"devicePixelRatio": false,
"DevicePosture": false,
"dispatchEvent": false,
"DisposableStack": false,
"document": false,
"Document": false,
"DocumentFragment": false,
"documentPictureInPicture": false,
"DocumentPictureInPicture": false,
"DocumentPictureInPictureEvent": false,
"DocumentTimeline": false,
"DocumentType": false,
"DOMError": false,
"DOMException": false,
"DOMImplementation": false,
"DOMMatrix": false,
"DOMMatrixReadOnly": false,
"DOMParser": false,
"DOMPoint": false,
"DOMPointReadOnly": false,
"DOMQuad": false,
"DOMRect": false,
"DOMRectList": false,
"DOMRectReadOnly": false,
"DOMStringList": false,
"DOMStringMap": false,
"DOMTokenList": false,
"DragEvent": false,
"DynamicsCompressorNode": false,
"EditContext": false,
"Element": false,
"ElementInternals": false,
"EncodedAudioChunk": false,
"EncodedVideoChunk": false,
"ErrorEvent": false,
"event": false,
"Event": false,
"EventCounts": false,
"EventSource": false,
"EventTarget": false,
"external": false,
"External": false,
"EyeDropper": false,
"FeaturePolicy": false,
"FederatedCredential": false,
"fence": false,
"Fence": false,
"FencedFrameConfig": false,
"fetch": false,
"fetchLater": false,
"FetchLaterResult": false,
"File": false,
"FileList": false,
"FileReader": false,
"FileSystem": false,
"FileSystemDirectoryEntry": false,
"FileSystemDirectoryHandle": false,
"FileSystemDirectoryReader": false,
"FileSystemEntry": false,
"FileSystemFileEntry": false,
"FileSystemFileHandle": false,
"FileSystemHandle": false,
"FileSystemObserver": false,
"FileSystemWritableFileStream": false,
"find": false,
"focus": false,
"FocusEvent": false,
"FontData": false,
"FontFace": false,
"FontFaceSet": false,
"FontFaceSetLoadEvent": false,
"FormData": false,
"FormDataEvent": false,
"FragmentDirective": false,
"frameElement": false,
"frames": false,
"GainNode": false,
"Gamepad": false,
"GamepadAxisMoveEvent": false,
"GamepadButton": false,
"GamepadButtonEvent": false,
"GamepadEvent": false,
"GamepadHapticActuator": false,
"GamepadPose": false,
"Geolocation": false,
"GeolocationCoordinates": false,
"GeolocationPosition": false,
"GeolocationPositionError": false,
"getComputedStyle": false,
"getScreenDetails": false,
"getSelection": false,
"GPU": false,
"GPUAdapter": false,
"GPUAdapterInfo": false,
"GPUBindGroup": false,
"GPUBindGroupLayout": false,
"GPUBuffer": false,
"GPUBufferUsage": false,
"GPUCanvasContext": false,
"GPUColorWrite": false,
"GPUCommandBuffer": false,
"GPUCommandEncoder": false,
"GPUCompilationInfo": false,
"GPUCompilationMessage": false,
"GPUComputePassEncoder": false,
"GPUComputePipeline": false,
"GPUDevice": false,
"GPUDeviceLostInfo": false,
"GPUError": false,
"GPUExternalTexture": false,
"GPUInternalError": false,
"GPUMapMode": false,
"GPUOutOfMemoryError": false,
"GPUPipelineError": false,
"GPUPipelineLayout": false,
"GPUQuerySet": false,
"GPUQueue": false,
"GPURenderBundle": false,
"GPURenderBundleEncoder": false,
"GPURenderPassEncoder": false,
"GPURenderPipeline": false,
"GPUSampler": false,
"GPUShaderModule": false,
"GPUShaderStage": false,
"GPUSupportedFeatures": false,
"GPUSupportedLimits": false,
"GPUTexture": false,
"GPUTextureUsage": false,
"GPUTextureView": false,
"GPUUncapturedErrorEvent": false,
"GPUValidationError": false,
"GravitySensor": false,
"Gyroscope": false,
"HashChangeEvent": false,
"Headers": false,
"HID": false,
"HIDConnectionEvent": false,
"HIDDevice": false,
"HIDInputReportEvent": false,
"Highlight": false,
"HighlightRegistry": false,
"history": false,
"History": false,
"HTMLAllCollection": false,
"HTMLAnchorElement": false,
"HTMLAreaElement": false,
"HTMLAudioElement": false,
"HTMLBaseElement": false,
"HTMLBodyElement": false,
"HTMLBRElement": false,
"HTMLButtonElement": false,
"HTMLCanvasElement": false,
"HTMLCollection": false,
"HTMLDataElement": false,
"HTMLDataListElement": false,
"HTMLDetailsElement": false,
"HTMLDialogElement": false,
"HTMLDirectoryElement": false,
"HTMLDivElement": false,
"HTMLDListElement": false,
"HTMLDocument": false,
"HTMLElement": false,
"HTMLEmbedElement": false,
"HTMLFencedFrameElement": false,
"HTMLFieldSetElement": false,
"HTMLFontElement": false,
"HTMLFormControlsCollection": false,
"HTMLFormElement": false,
"HTMLFrameElement": false,
"HTMLFrameSetElement": false,
"HTMLHeadElement": false,
"HTMLHeadingElement": false,
"HTMLHRElement": false,
"HTMLHtmlElement": false,
"HTMLIFrameElement": false,
"HTMLImageElement": false,
"HTMLInputElement": false,
"HTMLLabelElement": false,
"HTMLLegendElement": false,
"HTMLLIElement": false,
"HTMLLinkElement": false,
"HTMLMapElement": false,
"HTMLMarqueeElement": false,
"HTMLMediaElement": false,
"HTMLMenuElement": false,
"HTMLMetaElement": false,
"HTMLMeterElement": false,
"HTMLModElement": false,
"HTMLObjectElement": false,
"HTMLOListElement": false,
"HTMLOptGroupElement": false,
"HTMLOptionElement": false,
"HTMLOptionsCollection": false,
"HTMLOutputElement": false,
"HTMLParagraphElement": false,
"HTMLParamElement": false,
"HTMLPictureElement": false,
"HTMLPreElement": false,
"HTMLProgressElement": false,
"HTMLQuoteElement": false,
"HTMLScriptElement": false,
"HTMLSelectedContentElement": false,
"HTMLSelectElement": false,
"HTMLSlotElement": false,
"HTMLSourceElement": false,
"HTMLSpanElement": false,
"HTMLStyleElement": false,
"HTMLTableCaptionElement": false,
"HTMLTableCellElement": false,
"HTMLTableColElement": false,
"HTMLTableElement": false,
"HTMLTableRowElement": false,
"HTMLTableSectionElement": false,
"HTMLTemplateElement": false,
"HTMLTextAreaElement": false,
"HTMLTimeElement": false,
"HTMLTitleElement": false,
"HTMLTrackElement": false,
"HTMLUListElement": false,
"HTMLUnknownElement": false,
"HTMLVideoElement": false,
"IDBCursor": false,
"IDBCursorWithValue": false,
"IDBDatabase": false,
"IDBFactory": false,
"IDBIndex": false,
"IDBKeyRange": false,
"IDBObjectStore": false,
"IDBOpenDBRequest": false,
"IDBRequest": false,
"IDBTransaction": false,
"IDBVersionChangeEvent": false,
"IdentityCredential": false,
"IdentityCredentialError": false,
"IdentityProvider": false,
"IdleDeadline": false,
"IdleDetector": false,
"IIRFilterNode": false,
"Image": false,
"ImageBitmap": false,
"ImageBitmapRenderingContext": false,
"ImageCapture": false,
"ImageData": false,
"ImageDecoder": false,
"ImageTrack": false,
"ImageTrackList": false,
"indexedDB": false,
"Ink": false,
"innerHeight": false,
"innerWidth": false,
"InputDeviceCapabilities": false,
"InputDeviceInfo": false,
"InputEvent": false,
"IntersectionObserver": false,
"IntersectionObserverEntry": false,
"isSecureContext": false,
"Keyboard": false,
"KeyboardEvent": false,
"KeyboardLayoutMap": false,
"KeyframeEffect": false,
"LanguageDetector": false,
"LargestContentfulPaint": false,
"LaunchParams": false,
"launchQueue": false,
"LaunchQueue": false,
"LayoutShift": false,
"LayoutShiftAttribution": false,
"length": false,
"LinearAccelerationSensor": false,
"localStorage": false,
"location": true,
"Location": false,
"locationbar": false,
"Lock": false,
"LockManager": false,
"matchMedia": false,
"MathMLElement": false,
"MediaCapabilities": false,
"MediaCapabilitiesInfo": false,
"MediaDeviceInfo": false,
"MediaDevices": false,
"MediaElementAudioSourceNode": false,
"MediaEncryptedEvent": false,
"MediaError": false,
"MediaKeyError": false,
"MediaKeyMessageEvent": false,
"MediaKeys": false,
"MediaKeySession": false,
"MediaKeyStatusMap": false,
"MediaKeySystemAccess": false,
"MediaList": false,
"MediaMetadata": false,
"MediaQueryList": false,
"MediaQueryListEvent": false,
"MediaRecorder": false,
"MediaRecorderErrorEvent": false,
"MediaSession": false,
"MediaSource": false,
"MediaSourceHandle": false,
"MediaStream": false,
"MediaStreamAudioDestinationNode": false,
"MediaStreamAudioSourceNode": false,
"MediaStreamEvent": false,
"MediaStreamTrack": false,
"MediaStreamTrackAudioSourceNode": false,
"MediaStreamTrackAudioStats": false,
"MediaStreamTrackEvent": false,
"MediaStreamTrackGenerator": false,
"MediaStreamTrackProcessor": false,
"MediaStreamTrackVideoStats": false,
"menubar": false,
"MessageChannel": false,
"MessageEvent": false,
"MessagePort": false,
"MIDIAccess": false,
"MIDIConnectionEvent": false,
"MIDIInput": false,
"MIDIInputMap": false,
"MIDIMessageEvent": false,
"MIDIOutput": false,
"MIDIOutputMap": false,
"MIDIPort": false,
"MimeType": false,
"MimeTypeArray": false,
"model": false,
"ModelGenericSession": false,
"ModelManager": false,
"MouseEvent": false,
"moveBy": false,
"moveTo": false,
"MutationEvent": false,
"MutationObserver": false,
"MutationRecord": false,
"name": false,
"NamedNodeMap": false,
"NavigateEvent": false,
"navigation": false,
"Navigation": false,
"NavigationActivation": false,
"NavigationCurrentEntryChangeEvent": false,
"NavigationDestination": false,
"NavigationHistoryEntry": false,
"NavigationPreloadManager": false,
"NavigationTransition": false,
"navigator": false,
"Navigator": false,
"NavigatorLogin": false,
"NavigatorManagedData": false,
"NavigatorUAData": false,
"NetworkInformation": false,
"Node": false,
"NodeFilter": false,
"NodeIterator": false,
"NodeList": false,
"Notification": false,
"NotifyPaintEvent": false,
"NotRestoredReasonDetails": false,
"NotRestoredReasons": false,
"Observable": false,
"OfflineAudioCompletionEvent": false,
"OfflineAudioContext": false,
"offscreenBuffering": false,
"OffscreenCanvas": false,
"OffscreenCanvasRenderingContext2D": false,
"onabort": true,
"onafterprint": true,
"onanimationcancel": true,
"onanimationend": true,
"onanimationiteration": true,
"onanimationstart": true,
"onappinstalled": true,
"onauxclick": true,
"onbeforeinput": true,
"onbeforeinstallprompt": true,
"onbeforematch": true,
"onbeforeprint": true,
"onbeforetoggle": true,
"onbeforeunload": true,
"onbeforexrselect": true,
"onblur": true,
"oncancel": true,
"oncanplay": true,
"oncanplaythrough": true,
"onchange": true,
"onclick": true,
"onclose": true,
"oncommand": true,
"oncontentvisibilityautostatechange": true,
"oncontextlost": true,
"oncontextmenu": true,
"oncontextrestored": true,
"oncopy": true,
"oncuechange": true,
"oncut": true,
"ondblclick": true,
"ondevicemotion": true,
"ondeviceorientation": true,
"ondeviceorientationabsolute": true,
"ondrag": true,
"ondragend": true,
"ondragenter": true,
"ondragleave": true,
"ondragover": true,
"ondragstart": true,
"ondrop": true,
"ondurationchange": true,
"onemptied": true,
"onended": true,
"onerror": true,
"onfocus": true,
"onformdata": true,
"ongamepadconnected": true,
"ongamepaddisconnected": true,
"ongotpointercapture": true,
"onhashchange": true,
"oninput": true,
"oninvalid": true,
"onkeydown": true,
"onkeypress": true,
"onkeyup": true,
"onlanguagechange": true,
"onload": true,
"onloadeddata": true,
"onloadedmetadata": true,
"onloadstart": true,
"onlostpointercapture": true,
"onmessage": true,
"onmessageerror": true,
"onmousedown": true,
"onmouseenter": true,
"onmouseleave": true,
"onmousemove": true,
"onmouseout": true,
"onmouseover": true,
"onmouseup": true,
"onmousewheel": true,
"onoffline": true,
"ononline": true,
"onpagehide": true,
"onpagereveal": true,
"onpageshow": true,
"onpageswap": true,
"onpaste": true,
"onpause": true,
"onplay": true,
"onplaying": true,
"onpointercancel": true,
"onpointerdown": true,
"onpointerenter": true,
"onpointerleave": true,
"onpointermove": true,
"onpointerout": true,
"onpointerover": true,
"onpointerrawupdate": true,
"onpointerup": true,
"onpopstate": true,
"onprogress": true,
"onratechange": true,
"onrejectionhandled": true,
"onreset": true,
"onresize": true,
"onscroll": true,
"onscrollend": true,
"onscrollsnapchange": true,
"onscrollsnapchanging": true,
"onsearch": true,
"onsecuritypolicyviolation": true,
"onseeked": true,
"onseeking": true,
"onselect": true,
"onselectionchange": true,
"onselectstart": true,
"onslotchange": true,
"onstalled": true,
"onstorage": true,
"onsubmit": true,
"onsuspend": true,
"ontimeupdate": true,
"ontoggle": true,
"ontransitioncancel": true,
"ontransitionend": true,
"ontransitionrun": true,
"ontransitionstart": true,
"onunhandledrejection": true,
"onunload": true,
"onvolumechange": true,
"onwaiting": true,
"onwheel": true,
"open": false,
"opener": false,
"Option": false,
"OrientationSensor": false,
"origin": false,
"originAgentCluster": false,
"OscillatorNode": false,
"OTPCredential": false,
"outerHeight": false,
"outerWidth": false,
"OverconstrainedError": false,
"PageRevealEvent": false,
"PageSwapEvent": false,
"PageTransitionEvent": false,
"pageXOffset": false,
"pageYOffset": false,
"PannerNode": false,
"parent": false,
"PasswordCredential": false,
"Path2D": false,
"PaymentAddress": false,
"PaymentManager": false,
"PaymentMethodChangeEvent": false,
"PaymentRequest": false,
"PaymentRequestUpdateEvent": false,
"PaymentResponse": false,
"performance": false,
"Performance": false,
"PerformanceElementTiming": false,
"PerformanceEntry": false,
"PerformanceEventTiming": false,
"PerformanceLongAnimationFrameTiming": false,
"PerformanceLongTaskTiming": false,
"PerformanceMark": false,
"PerformanceMeasure": false,
"PerformanceNavigation": false,
"PerformanceNavigationTiming": false,
"PerformanceObserver": false,
"PerformanceObserverEntryList": false,
"PerformancePaintTiming": false,
"PerformanceResourceTiming": false,
"PerformanceScriptTiming": false,
"PerformanceServerTiming": false,
"PerformanceTiming": false,
"PeriodicSyncManager": false,
"PeriodicWave": false,
"Permissions": false,
"PermissionStatus": false,
"PERSISTENT": false,
"personalbar": false,
"PictureInPictureEvent": false,
"PictureInPictureWindow": false,
"Plugin": false,
"PluginArray": false,
"PointerEvent": false,
"PopStateEvent": false,
"postMessage": false,
"Presentation": false,
"PresentationAvailability": false,
"PresentationConnection": false,
"PresentationConnectionAvailableEvent": false,
"PresentationConnectionCloseEvent": false,
"PresentationConnectionList": false,
"PresentationReceiver": false,
"PresentationRequest": false,
"PressureObserver": false,
"PressureRecord": false,
"print": false,
"ProcessingInstruction": false,
"Profiler": false,
"ProgressEvent": false,
"PromiseRejectionEvent": false,
"prompt": false,
"ProtectedAudience": false,
"PublicKeyCredential": false,
"PushManager": false,
"PushSubscription": false,
"PushSubscriptionOptions": false,
"queryLocalFonts": false,
"queueMicrotask": false,
"RadioNodeList": false,
"Range": false,
"ReadableByteStreamController": false,
"ReadableStream": false,
"ReadableStreamBYOBReader": false,
"ReadableStreamBYOBRequest": false,
"ReadableStreamDefaultController": false,
"ReadableStreamDefaultReader": false,
"registerProcessor": false,
"RelativeOrientationSensor": false,
"RemotePlayback": false,
"removeEventListener": false,
"ReportBody": false,
"reportError": false,
"ReportingObserver": false,
"Request": false,
"requestAnimationFrame": false,
"requestIdleCallback": false,
"resizeBy": false,
"ResizeObserver": false,
"ResizeObserverEntry": false,
"ResizeObserverSize": false,
"resizeTo": false,
"Response": false,
"RestrictionTarget": false,
"RTCCertificate": false,
"RTCDataChannel": false,
"RTCDataChannelEvent": false,
"RTCDtlsTransport": false,
"RTCDTMFSender": false,
"RTCDTMFToneChangeEvent": false,
"RTCEncodedAudioFrame": false,
"RTCEncodedVideoFrame": false,
"RTCError": false,
"RTCErrorEvent": false,
"RTCIceCandidate": false,
"RTCIceTransport": false,
"RTCPeerConnection": false,
"RTCPeerConnectionIceErrorEvent": false,
"RTCPeerConnectionIceEvent": false,
"RTCRtpReceiver": false,
"RTCRtpScriptTransform": false,
"RTCRtpSender": false,
"RTCRtpTransceiver": false,
"RTCSctpTransport": false,
"RTCSessionDescription": false,
"RTCStatsReport": false,
"RTCTrackEvent": false,
"sampleRate": false,
"scheduler": false,
"Scheduler": false,
"Scheduling": false,
"screen": false,
"Screen": false,
"ScreenDetailed": false,
"ScreenDetails": false,
"screenLeft": false,
"ScreenOrientation": false,
"screenTop": false,
"screenX": false,
"screenY": false,
"ScriptProcessorNode": false,
"scroll": false,
"scrollbars": false,
"scrollBy": false,
"ScrollTimeline": false,
"scrollTo": false,
"scrollX": false,
"scrollY": false,
"SecurityPolicyViolationEvent": false,
"Selection": false,
"self": false,
"Sensor": false,
"SensorErrorEvent": false,
"Serial": false,
"SerialPort": false,
"ServiceWorker": false,
"ServiceWorkerContainer": false,
"ServiceWorkerRegistration": false,
"sessionStorage": false,
"setInterval": false,
"setTimeout": false,
"ShadowRoot": false,
"sharedStorage": false,
"SharedStorage": false,
"SharedStorageAppendMethod": false,
"SharedStorageClearMethod": false,
"SharedStorageDeleteMethod": false,
"SharedStorageModifierMethod": false,
"SharedStorageSetMethod": false,
"SharedStorageWorklet": false,
"SharedWorker": false,
"showDirectoryPicker": false,
"showOpenFilePicker": false,
"showSaveFilePicker": false,
"SnapEvent": false,
"SourceBuffer": false,
"SourceBufferList": false,
"speechSynthesis": false,
"SpeechSynthesis": false,
"SpeechSynthesisErrorEvent": false,
"SpeechSynthesisEvent": false,
"SpeechSynthesisUtterance": false,
"SpeechSynthesisVoice": false,
"StaticRange": false,
"status": false,
"statusbar": false,
"StereoPannerNode": false,
"stop": false,
"Storage": false,
"StorageBucket": false,
"StorageBucketManager": false,
"StorageEvent": false,
"StorageManager": false,
"structuredClone": false,
"styleMedia": false,
"StylePropertyMap": false,
"StylePropertyMapReadOnly": false,
"StyleSheet": false,
"StyleSheetList": false,
"SubmitEvent": false,
"Subscriber": false,
"SubtleCrypto": false,
"SuppressedError": false,
"SVGAElement": false,
"SVGAngle": false,
"SVGAnimatedAngle": false,
"SVGAnimatedBoolean": false,
"SVGAnimatedEnumeration": false,
"SVGAnimatedInteger": false,
"SVGAnimatedLength": false,
"SVGAnimatedLengthList": false,
"SVGAnimatedNumber": false,
"SVGAnimatedNumberList": false,
"SVGAnimatedPreserveAspectRatio": false,
"SVGAnimatedRect": false,
"SVGAnimatedString": false,
"SVGAnimatedTransformList": false,
"SVGAnimateElement": false,
"SVGAnimateMotionElement": false,
"SVGAnimateTransformElement": false,
"SVGAnimationElement": false,
"SVGCircleElement": false,
"SVGClipPathElement": false,
"SVGComponentTransferFunctionElement": false,
"SVGDefsElement": false,
"SVGDescElement": false,
"SVGElement": false,
"SVGEllipseElement": false,
"SVGFEBlendElement": false,
"SVGFEColorMatrixElement": false,
"SVGFEComponentTransferElement": false,
"SVGFECompositeElement": false,
"SVGFEConvolveMatrixElement": false,
"SVGFEDiffuseLightingElement": false,
"SVGFEDisplacementMapElement": false,
"SVGFEDistantLightElement": false,
"SVGFEDropShadowElement": false,
"SVGFEFloodElement": false,
"SVGFEFuncAElement": false,
"SVGFEFuncBElement": false,
"SVGFEFuncGElement": false,
"SVGFEFuncRElement": false,
"SVGFEGaussianBlurElement": false,
"SVGFEImageElement": false,
"SVGFEMergeElement": false,
"SVGFEMergeNodeElement": false,
"SVGFEMorphologyElement": false,
"SVGFEOffsetElement": false,
"SVGFEPointLightElement": false,
"SVGFESpecularLightingElement": false,
"SVGFESpotLightElement": false,
"SVGFETileElement": false,
"SVGFETurbulenceElement": false,
"SVGFilterElement": false,
"SVGForeignObjectElement": false,
"SVGGElement": false,
"SVGGeometryElement": false,
"SVGGradientElement": false,
"SVGGraphicsElement": false,
"SVGImageElement": false,
"SVGLength": false,
"SVGLengthList": false,
"SVGLinearGradientElement": false,
"SVGLineElement": false,
"SVGMarkerElement": false,
"SVGMaskElement": false,
"SVGMatrix": false,
"SVGMetadataElement": false,
"SVGMPathElement": false,
"SVGNumber": false,
"SVGNumberList": false,
"SVGPathElement": false,
"SVGPatternElement": false,
"SVGPoint": false,
"SVGPointList": false,
"SVGPolygonElement": false,
"SVGPolylineElement": false,
"SVGPreserveAspectRatio": false,
"SVGRadialGradientElement": false,
"SVGRect": false,
"SVGRectElement": false,
"SVGScriptElement": false,
"SVGSetElement": false,
"SVGStopElement": false,
"SVGStringList": false,
"SVGStyleElement": false,
"SVGSVGElement": false,
"SVGSwitchElement": false,
"SVGSymbolElement": false,
"SVGTextContentElement": false,
"SVGTextElement": false,
"SVGTextPathElement": false,
"SVGTextPositioningElement": false,
"SVGTitleElement": false,
"SVGTransform": false,
"SVGTransformList": false,
"SVGTSpanElement": false,
"SVGUnitTypes": false,
"SVGUseElement": false,
"SVGViewElement": false,
"SyncManager": false,
"TaskAttributionTiming": false,
"TaskController": false,
"TaskPriorityChangeEvent": false,
"TaskSignal": false,
"TEMPORARY": false,
"Text": false,
"TextDecoder": false,
"TextDecoderStream": false,
"TextEncoder": false,
"TextEncoderStream": false,
"TextEvent": false,
"TextFormat": false,
"TextFormatUpdateEvent": false,
"TextMetrics": false,
"TextTrack": false,
"TextTrackCue": false,
"TextTrackCueList": false,
"TextTrackList": false,
"TextUpdateEvent": false,
"TimeEvent": false,
"TimeRanges": false,
"ToggleEvent": false,
"toolbar": false,
"top": false,
"Touch": false,
"TouchEvent": false,
"TouchList": false,
"TrackEvent": false,
"TransformStream": false,
"TransformStreamDefaultController": false,
"TransitionEvent": false,
"TreeWalker": false,
"TrustedHTML": false,
"TrustedScript": false,
"TrustedScriptURL": false,
"TrustedTypePolicy": false,
"TrustedTypePolicyFactory": false,
"trustedTypes": false,
"UIEvent": false,
"URL": false,
"URLPattern": false,
"URLSearchParams": false,
"USB": false,
"USBAlternateInterface": false,
"USBConfiguration": false,
"USBConnectionEvent": false,
"USBDevice": false,
"USBEndpoint": false,
"USBInterface": false,
"USBInTransferResult": false,
"USBIsochronousInTransferPacket": false,
"USBIsochronousInTransferResult": false,
"USBIsochronousOutTransferPacket": false,
"USBIsochronousOutTransferResult": false,
"USBOutTransferResult": false,
"UserActivation": false,
"ValidityState": false,
"VideoColorSpace": false,
"VideoDecoder": false,
"VideoEncoder": false,
"VideoFrame": false,
"VideoPlaybackQuality": false,
"ViewTimeline": false,
"ViewTransition": false,
"ViewTransitionTypeSet": false,
"VirtualKeyboard": false,
"VirtualKeyboardGeometryChangeEvent": false,
"VisibilityStateEntry": false,
"visualViewport": false,
"VisualViewport": false,
"VTTCue": false,
"VTTRegion": false,
"WakeLock": false,
"WakeLockSentinel": false,
"WaveShaperNode": false,
"WebAssembly": false,
"WebGL2RenderingContext": false,
"WebGLActiveInfo": false,
"WebGLBuffer": false,
"WebGLContextEvent": false,
"WebGLFramebuffer": false,
"WebGLObject": false,
"WebGLProgram": false,
"WebGLQuery": false,
"WebGLRenderbuffer": false,
"WebGLRenderingContext": false,
"WebGLSampler": false,
"WebGLShader": false,
"WebGLShaderPrecisionFormat": false,
"WebGLSync": false,
"WebGLTexture": false,
"WebGLTransformFeedback": false,
"WebGLUniformLocation": false,
"WebGLVertexArrayObject": false,
"WebSocket": false,
"WebSocketError": false,
"WebSocketStream": false,
"WebTransport": false,
"WebTransportBidirectionalStream": false,
"WebTransportDatagramDuplexStream": false,
"WebTransportError": false,
"WebTransportReceiveStream": false,
"WebTransportSendStream": false,
"WGSLLanguageFeatures": false,
"WheelEvent": false,
"when": false,
"window": false,
"Window": false,
"WindowControlsOverlay": false,
"WindowControlsOverlayGeometryChangeEvent": false,
"Worker": false,
"Worklet": false,
"WorkletGlobalScope": false,
"WritableStream": false,
"WritableStreamDefaultController": false,
"WritableStreamDefaultWriter": false,
"XMLDocument": false,
"XMLHttpRequest": false,
"XMLHttpRequestEventTarget": false,
"XMLHttpRequestUpload": false,
"XMLSerializer": false,
"XPathEvaluator": false,
"XPathExpression": false,
"XPathResult": false,
"XRAnchor": false,
"XRAnchorSet": false,
"XRBoundedReferenceSpace": false,
"XRCamera": false,
"XRCPUDepthInformation": false,
"XRDepthInformation": false,
"XRDOMOverlayState": false,
"XRFrame": false,
"XRHand": false,
"XRHitTestResult": false,
"XRHitTestSource": false,
"XRInputSource": false,
"XRInputSourceArray": false,
"XRInputSourceEvent": false,
"XRInputSourcesChangeEvent": false,
"XRJointPose": false,
"XRJointSpace": false,
"XRLayer": false,
"XRLightEstimate": false,
"XRLightProbe": false,
"XRPose": false,
"XRRay": false,
"XRReferenceSpace": false,
"XRReferenceSpaceEvent": false,
"XRRenderState": false,
"XRRigidTransform": false,
"XRSession": false,
"XRSessionEvent": false,
"XRSpace": false,
"XRSystem": false,
"XRTransientInputHitTestResult": false,
"XRTransientInputHitTestSource": false,
"XRView": false,
"XRViewerPose": false,
"XRViewport": false,
"XRWebGLBinding": false,
"XRWebGLDepthInformation": false,
"XRWebGLLayer": false,
"XSLTProcessor": false,
"process": "readonly"
}
}
}Top-10 rulesBenchmark results$pkgx hyperfine --runs 3 --parameter-list threads off,2,3,4,auto './node_modules/.bin/eslint --quiet --concurrency {threads}'
Benchmark 1: ./node_modules/.bin/eslint --quiet --concurrency off
Time (mean ± σ): 79.499 s ± 0.637 s [User: 112.108 s, System: 6.522 s]
Range (min … max): 79.015 s … 80.220 s 3 runs
Benchmark 2: ./node_modules/.bin/eslint --quiet --concurrency 2
Time (mean ± σ): 57.637 s ± 0.571 s [User: 157.154 s, System: 12.519 s]
Range (min … max): 57.104 s … 58.239 s 3 runs
Benchmark 3: ./node_modules/.bin/eslint --quiet --concurrency 3
Time (mean ± σ): 53.158 s ± 0.627 s [User: 205.728 s, System: 21.050 s]
Range (min … max): 52.579 s … 53.825 s 3 runs
Benchmark 4: ./node_modules/.bin/eslint --quiet --concurrency 4
Time (mean ± σ): 59.152 s ± 3.709 s [User: 276.589 s, System: 33.123 s]
Range (min … max): 56.210 s … 63.318 s 3 runs
Benchmark 5: ./node_modules/.bin/eslint --quiet --concurrency auto
Time (mean ± σ): 62.648 s ± 0.432 s [User: 299.816 s, System: 33.271 s]
Range (min … max): 62.158 s … 62.975 s 3 runs
Summary
./node_modules/.bin/eslint --quiet --concurrency 3 ran
1.08 ± 0.02 times faster than ./node_modules/.bin/eslint --quiet --concurrency 2
1.11 ± 0.07 times faster than ./node_modules/.bin/eslint --quiet --concurrency 4
1.18 ± 0.02 times faster than ./node_modules/.bin/eslint --quiet --concurrency auto
1.50 ± 0.02 times faster than ./node_modules/.bin/eslint --quiet --concurrency offCaveat: my M2 Macbook Air temp-throttled during the benchmark. Qualitatively, Amazing! 😍 |
|
Thanks a lot for the benchmarks @DreierF, @mauriciolauffer and @stefanmaric! It would be interesting to see how those results compare with what you get when you run ESLint with |
|
I already had a measurement without |
|
Thanks everyone for the benchmark results! This confirms my theory that the effects of concurrency can't be felt on smaller projects whereas larger projects can see some significant gains. It will be interested to see what the cutoff is and we might want to consider outputting a warning if ESLint is run on a small number of files with concurrency. |
|
To provide some additional data around a possible cutoff point, here are benchmark results including Environment: M4 Max, 12 performance, 4 efficiencyI'm using an M4 Max MacBook Pro with 12 performance cores and four efficiency cores. File counts: 1071 totalTop-10 rules: all pluginsMost of these rules require an upfront information-gathering pass for types or imports. Benchmark results: 4-6 are fastest, 1.33x faster than off |
Co-authored-by: Milos Djermanovic <milos.djermanovic@gmail.com>
|
I made some benchmarks on the getsentry/sentry codebase, which has over 1M lines of TypeScript to lint. Our eslint config is here. Machine stats: before, with eslint 9.32.0: with this PR: concurrency 3 performed best, and the savings are substantial - about 35% 🎉 It’s also interesting that from the concurrency setting, |
This comment was marked as off-topic.
This comment was marked as off-topic.
|
@kachkaev that's off-topic for this PR. If you'd like to discuss sharding further, please open a separate issue. |
nzakas
left a comment
There was a problem hiding this comment.
LGTM. Accepting we'll probably get some bug reports once I released, I think this is a good starting point. Nice work!
Holding off on merging for @mdjermanovic to verify.
|
Thanks for the results @TkDodo. For large projects, concurrency |
|
FWIW, I've been using this branch on a large codebase and it makes a huge difference and I've had no issues with it so far. |
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | devDependencies | minor | [`9.33.0` -> `9.34.0`](https://renovatebot.com/diffs/npm/eslint/9.33.0/9.34.0) | --- ### Release Notes <details> <summary>eslint/eslint (eslint)</summary> ### [`v9.34.0`](https://github.com/eslint/eslint/releases/tag/v9.34.0) [Compare Source](eslint/eslint@v9.33.0...v9.34.0) #### Features - [`0bb777a`](eslint/eslint@0bb777a) feat: multithread linting ([#​19794](eslint/eslint#19794)) (Francesco Trotta) - [`43a5f9e`](eslint/eslint@43a5f9e) feat: add eslint-plugin-regexp to eslint-config-eslint base config ([#​19951](eslint/eslint#19951)) (Pixel998) #### Bug Fixes - [`9b89903`](eslint/eslint@9b89903) fix: default value of accessor-pairs option in rule.d.ts file ([#​20024](eslint/eslint#20024)) (Tanuj Kanti) - [`6c07420`](eslint/eslint@6c07420) fix: fix spurious failure in neostandard integration test ([#​20023](eslint/eslint#20023)) (Kirk Waiblinger) - [`676f4ac`](eslint/eslint@676f4ac) fix: allow scientific notation with trailing zeros matching exponent ([#​20002](eslint/eslint#20002)) (Sweta Tanwar) #### Documentation - [`0b4a590`](eslint/eslint@0b4a590) docs: make rulesdir deprecation clearer ([#​20018](eslint/eslint#20018)) (Domenico Gemoli) - [`327c672`](eslint/eslint@327c672) docs: Update README (GitHub Actions Bot) - [`bf26229`](eslint/eslint@bf26229) docs: Fix typo in core-concepts/index.md ([#​20009](eslint/eslint#20009)) (Tobias Hernstig) - [`2309327`](eslint/eslint@2309327) docs: fix typo in the "Configuring Rules" section ([#​20001](eslint/eslint#20001)) (ghazi-git) - [`2b87e21`](eslint/eslint@2b87e21) docs: \[no-else-return] clarify sample code. ([#​19991](eslint/eslint#19991)) (Yuki Takada (Yukinosuke Takada)) - [`c36570c`](eslint/eslint@c36570c) docs: Update README (GitHub Actions Bot) #### Chores - [`f19ad94`](eslint/eslint@f19ad94) chore: upgrade to `@eslint/js@9.34.0` ([#​20030](eslint/eslint#20030)) (Francesco Trotta) - [`b48fa20`](eslint/eslint@b48fa20) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`4bce8a2`](eslint/eslint@4bce8a2) chore: package.json update for eslint-config-eslint release (Jenkins) - [`0c9999c`](eslint/eslint@0c9999c) refactor: prefer default options in `grouped-accessor-pairs` ([#​20028](eslint/eslint#20028)) (루밀LuMir) - [`d503f19`](eslint/eslint@d503f19) ci: fix `stale.yml` ([#​20010](eslint/eslint#20010)) (루밀LuMir) - [`e2dc67d`](eslint/eslint@e2dc67d) ci: centralize `stale.yml` ([#​19994](eslint/eslint#19994)) (루밀LuMir) - [`7093cb8`](eslint/eslint@7093cb8) ci: bump actions/checkout from 4 to 5 ([#​20005](eslint/eslint#20005)) (dependabot\[bot]) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS42MS4wIiwidXBkYXRlZEluVmVyIjoiNDEuNjEuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Reviewed-on: https://git.robbevp.be/robbevp/website-robbevanpetegem/pulls/495 Co-authored-by: Renovate Bot <renovate@robbevp.be> Co-committed-by: Renovate Bot <renovate@robbevp.be>
|
Sorry if this is creating noise, at storyblok - we managed to shave ~ 40% time on our CI with eslint by setting concurrency auto on our main frontend monorepo. Just wanted to say thank you for the hard work. (We have a strict setup with vue-eslint-parser which leads to relatively slow runs) |
|
@jeremycolin would you mind sharing that on this discussion? #20040 |
This MR contains the following updates:
| Package | Type | Update | Change | OpenSSF |
|---|---|---|---|---|
| [@eslint/compat](https://github.com/eslint/rewrite/tree/main/packages/compat#readme) ([source](https://github.com/eslint/rewrite/tree/HEAD/packages/compat)) | devDependencies | minor | [`1.3.2` → `1.4.1`](https://renovatebot.com/diffs/npm/@eslint%2fcompat/1.3.2/1.4.1) | [](https://securityscorecards.dev/viewer/?uri=github.com/eslint/rewrite) |
| [@eslint/js](https://eslint.org) ([source](https://github.com/eslint/eslint/tree/HEAD/packages/js)) | devDependencies | minor | [`9.29.0` → `9.39.2`](https://renovatebot.com/diffs/npm/@eslint%2fjs/9.29.0/9.39.2) | [](https://securityscorecards.dev/viewer/?uri=github.com/eslint/eslint) |
| [@mui/icons-material](https://mui.com/material-ui/material-icons/) ([source](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material)) | dependencies | minor | [`7.1.2` → `7.3.6`](https://renovatebot.com/diffs/npm/@mui%2ficons-material/7.1.2/7.3.6) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/material-ui) |
| [@mui/material](https://mui.com/material-ui/) ([source](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material)) | dependencies | minor | [`7.1.2` → `7.3.6`](https://renovatebot.com/diffs/npm/@mui%2fmaterial/7.1.2/7.3.6) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/material-ui) |
| [@mui/x-charts](https://mui.com/x/react-charts/) ([source](https://github.com/mui/mui-x/tree/HEAD/packages/x-charts)) | dependencies | minor | [`8.5.3` → `8.23.0`](https://renovatebot.com/diffs/npm/@mui%2fx-charts/8.5.3/8.23.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) |
| [@mui/x-tree-view](https://mui.com/x/react-tree-view/) ([source](https://github.com/mui/mui-x/tree/HEAD/packages/x-tree-view)) | dependencies | minor | [`8.5.3` → `8.23.0`](https://renovatebot.com/diffs/npm/@mui%2fx-tree-view/8.5.3/8.23.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) |
| [@openapitools/openapi-generator-cli](https://github.com/OpenAPITools/openapi-generator-cli) | devDependencies | minor | [`2.23.4` → `2.26.0`](https://renovatebot.com/diffs/npm/@openapitools%2fopenapi-generator-cli/2.23.4/2.26.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/OpenAPITools/openapi-generator-cli) |
| [@reduxjs/toolkit](https://redux-toolkit.js.org) ([source](https://github.com/reduxjs/redux-toolkit)) | dependencies | minor | [`2.8.2` → `2.11.2`](https://renovatebot.com/diffs/npm/@reduxjs%2ftoolkit/2.8.2/2.11.2) | [](https://securityscorecards.dev/viewer/?uri=github.com/reduxjs/redux-toolkit) |
| [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) | devDependencies | minor | [`6.6.4` → `6.9.1`](https://renovatebot.com/diffs/npm/@testing-library%2fjest-dom/6.6.4/6.9.1) | [](https://securityscorecards.dev/viewer/?uri=github.com/testing-library/jest-dom) |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | devDependencies | minor | [`19.1.17` → `19.2.7`](https://renovatebot.com/diffs/npm/@types%2freact/19.1.17/19.2.7) | [](https://securityscorecards.dev/viewer/?uri=github.com/DefinitelyTyped/DefinitelyTyped) |
| [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-dom) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom)) | devDependencies | minor | [`19.1.11` → `19.2.3`](https://renovatebot.com/diffs/npm/@types%2freact-dom/19.1.11/19.2.3) | [](https://securityscorecards.dev/viewer/?uri=github.com/DefinitelyTyped/DefinitelyTyped) |
| [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | devDependencies | minor | [`8.39.1` → `8.51.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/8.39.1/8.51.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | devDependencies | minor | [`8.39.1` → `8.51.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.39.1/8.51.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme) ([source](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react)) | devDependencies | minor | [`4.5.2` → `4.7.0`](https://renovatebot.com/diffs/npm/@vitejs%2fplugin-react/4.5.2/4.7.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/vitejs/vite-plugin-react) |
| [ace-builds](https://github.com/ajaxorg/ace-builds) | dependencies | minor | [`1.42.0` → `1.43.5`](https://renovatebot.com/diffs/npm/ace-builds/1.42.0/1.43.5) | [](https://securityscorecards.dev/viewer/?uri=github.com/ajaxorg/ace-builds) |
| [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | devDependencies | minor | [`9.32.0` → `9.39.2`](https://renovatebot.com/diffs/npm/eslint/9.32.0/9.39.2) | [](https://securityscorecards.dev/viewer/?uri=github.com/eslint/eslint) |
| [eslint-plugin-unused-imports](https://github.com/sweepline/eslint-plugin-unused-imports) | devDependencies | minor | [`4.1.4` → `4.3.0`](https://renovatebot.com/diffs/npm/eslint-plugin-unused-imports/4.1.4/4.3.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/sweepline/eslint-plugin-unused-imports) |
| [globals](https://github.com/sindresorhus/globals) | devDependencies | minor | [`16.2.0` → `16.5.0`](https://renovatebot.com/diffs/npm/globals/16.2.0/16.5.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/sindresorhus/globals) |
| [i18next](https://www.i18next.com) ([source](https://github.com/i18next/i18next)) | dependencies | minor | [`25.2.1` → `25.7.3`](https://renovatebot.com/diffs/npm/i18next/25.2.1/25.7.3) | [](https://securityscorecards.dev/viewer/?uri=github.com/i18next/i18next) |
| [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | devDependencies | minor | [`3.5.3` → `3.7.4`](https://renovatebot.com/diffs/npm/prettier/3.5.3/3.7.4) | [](https://securityscorecards.dev/viewer/?uri=github.com/prettier/prettier) |
| [react](https://react.dev/) ([source](https://github.com/facebook/react/tree/HEAD/packages/react)) | dependencies | minor | [`19.1.1` → `19.2.3`](https://renovatebot.com/diffs/npm/react/19.1.1/19.2.3) | [](https://securityscorecards.dev/viewer/?uri=github.com/facebook/react) |
| [react-dom](https://react.dev/) ([source](https://github.com/facebook/react/tree/HEAD/packages/react-dom)) | dependencies | minor | [`19.1.1` → `19.2.3`](https://renovatebot.com/diffs/npm/react-dom/19.1.1/19.2.3) | [](https://securityscorecards.dev/viewer/?uri=github.com/facebook/react) |
| [react-i18next](https://github.com/i18next/react-i18next) | dependencies | minor | [`15.5.3` → `15.7.4`](https://renovatebot.com/diffs/npm/react-i18next/15.5.3/15.7.4) | [](https://securityscorecards.dev/viewer/?uri=github.com/i18next/react-i18next) |
| [react-router-dom](https://github.com/remix-run/react-router) ([source](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | dependencies | minor | [`7.6.3` → `7.11.0`](https://renovatebot.com/diffs/npm/react-router-dom/7.6.3/7.11.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/remix-run/react-router) |
| [typescript](https://www.typescriptlang.org/) ([source](https://github.com/microsoft/TypeScript)) | devDependencies | minor | [`5.8.3` → `5.9.3`](https://renovatebot.com/diffs/npm/typescript/5.8.3/5.9.3) | [](https://securityscorecards.dev/viewer/?uri=github.com/microsoft/TypeScript) |
| [vite](https://vite.dev) ([source](https://github.com/vitejs/vite/tree/HEAD/packages/vite)) | devDependencies | minor | [`6.3.7` → `6.4.1`](https://renovatebot.com/diffs/npm/vite/6.3.7/6.4.1) | [](https://securityscorecards.dev/viewer/?uri=github.com/vitejs/vite) |
| [vite-plugin-svgr](https://github.com/pd4d10/vite-plugin-svgr) | devDependencies | minor | [`4.3.0` → `4.5.0`](https://renovatebot.com/diffs/npm/vite-plugin-svgr/4.3.0/4.5.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/pd4d10/vite-plugin-svgr) |
---
### Release Notes
<details>
<summary>eslint/rewrite (@​eslint/compat)</summary>
### [`v1.4.1`](https://github.com/eslint/rewrite/blob/HEAD/packages/compat/CHANGELOG.md#141-2025-10-27)
[Compare Source](https://github.com/eslint/rewrite/compare/7f592e3b60dd0a3b38d891a80aeeb92cf78d8e86...f5ecc7e945634a173af677d2d597d583bd2704e6)
##### Dependencies
- The following workspace dependencies were updated
- dependencies
- [@​eslint/core](https://github.com/eslint/core) bumped from ^0.16.0 to ^0.17.0
### [`v1.4.0`](https://github.com/eslint/rewrite/blob/HEAD/packages/compat/CHANGELOG.md#140-2025-09-16)
[Compare Source](https://github.com/eslint/rewrite/compare/9e68ab61df9c4ebc082b603fb5e3dfe2dcf98666...7f592e3b60dd0a3b38d891a80aeeb92cf78d8e86)
##### Features
- Add config types in [@​eslint/core](https://github.com/eslint/core) ([#​237](https://github.com/eslint/rewrite/issues/237)) ([7b6dd37](https://github.com/eslint/rewrite/commit/7b6dd370a598ea7fc94fba427a2579342b50b90f))
##### Dependencies
- The following workspace dependencies were updated
- dependencies
- [@​eslint/core](https://github.com/eslint/core) bumped from ^0.15.2 to ^0.16.0
</details>
<details>
<summary>eslint/eslint (@​eslint/js)</summary>
### [`v9.39.2`](https://github.com/eslint/eslint/releases/tag/v9.39.2)
[Compare Source](https://github.com/eslint/eslint/compare/v9.39.1...v9.39.2)
##### Bug Fixes
- [`5705833`](https://github.com/eslint/eslint/commit/57058331946568164449c5caabe2cf206e4fb5d9) fix: warn when `eslint-env` configuration comments are found ([#​20381](https://github.com/eslint/eslint/issues/20381)) (sethamus)
##### Build Related
- [`506f154`](https://github.com/eslint/eslint/commit/506f1549a64aa65bdddc75c71cb62f0ab94b5a23) build: add .scss files entry to knip ([#​20391](https://github.com/eslint/eslint/issues/20391)) (Milos Djermanovic)
##### Chores
- [`7ca0af7`](https://github.com/eslint/eslint/commit/7ca0af7f9f89dd4a01736dae01931c45d528171b) chore: upgrade to `@eslint/js@9.39.2` ([#​20394](https://github.com/eslint/eslint/issues/20394)) (Francesco Trotta)
- [`c43ce24`](https://github.com/eslint/eslint/commit/c43ce24ff0ce073ec4ad691cd5a50171dfe6cf1e) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`4c9858e`](https://github.com/eslint/eslint/commit/4c9858e47bb9146cf20f546a562bc58a9ee3dae1) ci: add `v9.x-dev` branch ([#​20382](https://github.com/eslint/eslint/issues/20382)) (Milos Djermanovic)
### [`v9.39.1`](https://github.com/eslint/eslint/releases/tag/v9.39.1)
[Compare Source](https://github.com/eslint/eslint/compare/v9.39.0...v9.39.1)
##### Bug Fixes
- [`650753e`](https://github.com/eslint/eslint/commit/650753ee3976784343ceb40170619dab1aa9fe0d) fix: Only pass node to JS lang visitor methods ([#​20283](https://github.com/eslint/eslint/issues/20283)) (Nicholas C. Zakas)
##### Documentation
- [`51b51f4`](https://github.com/eslint/eslint/commit/51b51f4f1ce82ef63264c4e45d9ef579bcd73f8e) docs: add a section on when to use extends vs cascading ([#​20268](https://github.com/eslint/eslint/issues/20268)) (Tanuj Kanti)
- [`b44d426`](https://github.com/eslint/eslint/commit/b44d42699dcd1729b7ecb50ca70e4c1c17f551f1) docs: Update README (GitHub Actions Bot)
##### Chores
- [`92db329`](https://github.com/eslint/eslint/commit/92db329211c8da5ce8340a4d4c05ce9c12845381) chore: update `@eslint/js` version to 9.39.1 ([#​20284](https://github.com/eslint/eslint/issues/20284)) (Francesco Trotta)
- [`c7ebefc`](https://github.com/eslint/eslint/commit/c7ebefc9eaf99b76b30b0d3cf9960807a47367c4) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`61778f6`](https://github.com/eslint/eslint/commit/61778f6ca33c0f63962a91d6a75a4fa5db9f47d2) chore: update eslint-config-eslint dependency [@​eslint/js](https://github.com/eslint/js) to ^9.39.0 ([#​20275](https://github.com/eslint/eslint/issues/20275)) (renovate\[bot])
- [`d9ca2fc`](https://github.com/eslint/eslint/commit/d9ca2fcd9ad63331bfd329a69534e1ff04f231e8) ci: Add rangeStrategy to eslint group in renovate config ([#​20266](https://github.com/eslint/eslint/issues/20266)) (唯然)
- [`009e507`](https://github.com/eslint/eslint/commit/009e5076ff5a4bd845f55e17676e3bb88f47c280) test: fix version tests for ESLint v10 ([#​20274](https://github.com/eslint/eslint/issues/20274)) (Milos Djermanovic)
### [`v9.39.0`](https://github.com/eslint/eslint/releases/tag/v9.39.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.38.0...v9.39.0)
##### Features
- [`cc57d87`](https://github.com/eslint/eslint/commit/cc57d87a3f119e9d39c55e044e526ae067fa31ce) feat: update error loc to key in `no-dupe-class-members` ([#​20259](https://github.com/eslint/eslint/issues/20259)) (Tanuj Kanti)
- [`126552f`](https://github.com/eslint/eslint/commit/126552fcf35da3ddcefa527db06dabc54c04041c) feat: update error location in `for-direction` and `no-dupe-args` ([#​20258](https://github.com/eslint/eslint/issues/20258)) (Tanuj Kanti)
- [`167d097`](https://github.com/eslint/eslint/commit/167d0970d3802a66910e9820f31dcd717fab0b2a) feat: update `complexity` rule to highlight only static block header ([#​20245](https://github.com/eslint/eslint/issues/20245)) (jaymarvelz)
##### Bug Fixes
- [`15f5c7c`](https://github.com/eslint/eslint/commit/15f5c7c168d0698683943f51dd617f14a5e6815c) fix: forward traversal `step.args` to visitors ([#​20253](https://github.com/eslint/eslint/issues/20253)) (jaymarvelz)
- [`5a1a534`](https://github.com/eslint/eslint/commit/5a1a534e877f7c4c992885867f923df307c3929d) fix: allow JSDoc comments in object-shorthand rule ([#​20167](https://github.com/eslint/eslint/issues/20167)) (Nitin Kumar)
- [`e86b813`](https://github.com/eslint/eslint/commit/e86b813eb660f1a5adc8e143a70d9b683cd12362) fix: Use more types from [@​eslint/core](https://github.com/eslint/core) ([#​20257](https://github.com/eslint/eslint/issues/20257)) (Nicholas C. Zakas)
- [`927272d`](https://github.com/eslint/eslint/commit/927272d1f0d5683b029b729d368a96527f283323) fix: correct `Scope` typings ([#​20198](https://github.com/eslint/eslint/issues/20198)) (jaymarvelz)
- [`37f76d9`](https://github.com/eslint/eslint/commit/37f76d9c539bb6fc816fedb7be4486b71a58620a) fix: use `AST.Program` type for Program node ([#​20244](https://github.com/eslint/eslint/issues/20244)) (Francesco Trotta)
- [`ae07f0b`](https://github.com/eslint/eslint/commit/ae07f0b3334ebd22ae2e7b09bca5973b96aa9768) fix: unify timing report for concurrent linting ([#​20188](https://github.com/eslint/eslint/issues/20188)) (jaymarvelz)
- [`b165d47`](https://github.com/eslint/eslint/commit/b165d471be6062f4475b972155b02654a974a0e9) fix: correct `Rule` typings ([#​20199](https://github.com/eslint/eslint/issues/20199)) (jaymarvelz)
- [`fb97cda`](https://github.com/eslint/eslint/commit/fb97cda70d87286a7dbd2457f578ef578d6905e8) fix: improve error message for missing fix function in suggestions ([#​20218](https://github.com/eslint/eslint/issues/20218)) (jaymarvelz)
##### Documentation
- [`d3e81e3`](https://github.com/eslint/eslint/commit/d3e81e30ee6be5a21151b7a17ef10a714b6059c0) docs: Always recommend to include a files property ([#​20158](https://github.com/eslint/eslint/issues/20158)) (Percy Ma)
- [`0f0385f`](https://github.com/eslint/eslint/commit/0f0385f1404dcadaba4812120b1ad02334dbd66a) docs: use consistent naming recommendation ([#​20250](https://github.com/eslint/eslint/issues/20250)) (Alex M. Spieslechner)
- [`a3b1456`](https://github.com/eslint/eslint/commit/a3b145609ac649fac837c8c0515cbb2a9321ca40) docs: Update README (GitHub Actions Bot)
- [`cf5f2dd`](https://github.com/eslint/eslint/commit/cf5f2dd58dd98084a21da04fe7b9054b9478d552) docs: fix correct tag of `no-useless-constructor` ([#​20255](https://github.com/eslint/eslint/issues/20255)) (Tanuj Kanti)
- [`10b995c`](https://github.com/eslint/eslint/commit/10b995c8e5473de8d66d3cd99d816e046f35e3ec) docs: add TS options and examples for `nofunc` in `no-use-before-define` ([#​20249](https://github.com/eslint/eslint/issues/20249)) (Tanuj Kanti)
- [`2584187`](https://github.com/eslint/eslint/commit/2584187e4a305ea7a98e1a5bd4dca2a60ad132f8) docs: remove repetitive word in comment ([#​20242](https://github.com/eslint/eslint/issues/20242)) (reddaisyy)
- [`637216b`](https://github.com/eslint/eslint/commit/637216bd4f2aae7c928ad04a4e40eecffb50c9e5) docs: update CLI flags migration instructions ([#​20238](https://github.com/eslint/eslint/issues/20238)) (jaymarvelz)
- [`e7cda3b`](https://github.com/eslint/eslint/commit/e7cda3bdf1bdd664e6033503a3315ad81736b200) docs: Update README (GitHub Actions Bot)
- [`7b9446f`](https://github.com/eslint/eslint/commit/7b9446f7cc2054aa2cdf8e6225f4ac15a03671a8) docs: handle empty flags sections on the feature flags page ([#​20222](https://github.com/eslint/eslint/issues/20222)) (sethamus)
##### Chores
- [`dfe3c1b`](https://github.com/eslint/eslint/commit/dfe3c1b2034228765c48c8a445554223767dd16d) chore: update `@eslint/js` version to 9.39.0 ([#​20270](https://github.com/eslint/eslint/issues/20270)) (Francesco Trotta)
- [`2375a6d`](https://github.com/eslint/eslint/commit/2375a6de8263393c129d41cac1b407b40111a73c) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`a1f4e52`](https://github.com/eslint/eslint/commit/a1f4e52d67c94bef61edd1607dcd130047c1baf0) chore: update `@eslint` dependencies ([#​20265](https://github.com/eslint/eslint/issues/20265)) (Francesco Trotta)
- [`c7d3229`](https://github.com/eslint/eslint/commit/c7d32298482752eeac9fb46378d4f1ea095f3836) chore: update dependency [@​eslint/core](https://github.com/eslint/core) to ^0.17.0 ([#​20256](https://github.com/eslint/eslint/issues/20256)) (renovate\[bot])
- [`27549bc`](https://github.com/eslint/eslint/commit/27549bc774c7c2dc5c569070a3e87c62f602bf7d) chore: update fuzz testing to not error if code sample minimizer fails ([#​20252](https://github.com/eslint/eslint/issues/20252)) (Milos Djermanovic)
- [`a1370ee`](https://github.com/eslint/eslint/commit/a1370ee40e9d8e0e41843f3278cd745fc1ad543f) ci: bump actions/setup-node from 5 to 6 ([#​20230](https://github.com/eslint/eslint/issues/20230)) (dependabot\[bot])
- [`9e7fad4`](https://github.com/eslint/eslint/commit/9e7fad4a1867709060686d03e0ec1d0d69671cfb) chore: add script to auto-generate eslint:recommended configuration ([#​20208](https://github.com/eslint/eslint/issues/20208)) (唯然)
### [`v9.38.0`](https://github.com/eslint/eslint/releases/tag/v9.38.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.37.0...v9.38.0)
##### Features
- [`ce40f74`](https://github.com/eslint/eslint/commit/ce40f74efd45f66d9fbfc6f78ce622ee72008485) feat: update `complexity` rule to only highlight function header ([#​20048](https://github.com/eslint/eslint/issues/20048)) (Atul Nair)
- [`e37e590`](https://github.com/eslint/eslint/commit/e37e590aae2a7fcca4d3a9adc1379ad466e5c5d1) feat: correct `no-loss-of-precision` false positives with `e` notation ([#​20187](https://github.com/eslint/eslint/issues/20187)) (Francesco Trotta)
##### Bug Fixes
- [`50c3dfd`](https://github.com/eslint/eslint/commit/50c3dfd98065622765a51a8ddb1e70c44fc5a4cb) fix: improve type support for isolated dependencies in pnpm ([#​20201](https://github.com/eslint/eslint/issues/20201)) (Francesco Trotta)
- [`a1f06a3`](https://github.com/eslint/eslint/commit/a1f06a350c4155c4dbf39bf932a38d71d70f1b65) fix: correct SourceCode typings ([#​20114](https://github.com/eslint/eslint/issues/20114)) (Pixel998)
##### Documentation
- [`462675a`](https://github.com/eslint/eslint/commit/462675af8a811f9ca984efaedbdc5b46b13ced7a) docs: improve web accessibility by hiding non-semantic character ([#​20205](https://github.com/eslint/eslint/issues/20205)) (루밀LuMir)
- [`c070e65`](https://github.com/eslint/eslint/commit/c070e65f6bb9e38d06a89ba2b3261781bec3d397) docs: correct formatting in `no-irregular-whitespace` rule documentation ([#​20203](https://github.com/eslint/eslint/issues/20203)) (루밀LuMir)
- [`b39e71a`](https://github.com/eslint/eslint/commit/b39e71a2130ae1ea3fbc19b19f5b951eb625722a) docs: Update README (GitHub Actions Bot)
- [`cd39983`](https://github.com/eslint/eslint/commit/cd3998314876a4fad6463d9011bc73778ccc1fd9) docs: move `custom-formatters` type descriptions to `nodejs-api` ([#​20190](https://github.com/eslint/eslint/issues/20190)) (Percy Ma)
##### Chores
- [`d17c795`](https://github.com/eslint/eslint/commit/d17c795bf1624e0604998482b98e6bb6bff39045) chore: upgrade [@​eslint/js](https://github.com/eslint/js)[@​9](https://github.com/9).38.0 ([#​20221](https://github.com/eslint/eslint/issues/20221)) (Milos Djermanovic)
- [`25d0e33`](https://github.com/eslint/eslint/commit/25d0e33270e08baed09dbee2cdd56a8e5cd9da0f) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`c82b5ef`](https://github.com/eslint/eslint/commit/c82b5efa1fc91900e029efa23e688fad67fc17fa) refactor: Use types from [@​eslint/core](https://github.com/eslint/core) ([#​20168](https://github.com/eslint/eslint/issues/20168)) (Nicholas C. Zakas)
- [`ff31609`](https://github.com/eslint/eslint/commit/ff31609f195654d448954210ba4d31e921d463e8) ci: add Node.js 25 to `ci.yml` ([#​20220](https://github.com/eslint/eslint/issues/20220)) (루밀LuMir)
- [`004577e`](https://github.com/eslint/eslint/commit/004577eda2f2f4b2829e0364f8b41893cebfc859) ci: bump github/codeql-action from 3 to 4 ([#​20211](https://github.com/eslint/eslint/issues/20211)) (dependabot\[bot])
- [`eac71fb`](https://github.com/eslint/eslint/commit/eac71fb77113de7bf199ff20c6ee44cefcb59848) test: remove use of `nodejsScope` option of eslint-scope from tests ([#​20206](https://github.com/eslint/eslint/issues/20206)) (Milos Djermanovic)
- [`4168a18`](https://github.com/eslint/eslint/commit/4168a18b7efd8facbbd71cd44a62942a9f656a30) chore: fix typo in legacy-eslint.js ([#​20202](https://github.com/eslint/eslint/issues/20202)) (Sweta Tanwar)
- [`205dbd2`](https://github.com/eslint/eslint/commit/205dbd2d9272e761574c478e3b0181f7b89ed0f6) chore: fix typos ([#​20200](https://github.com/eslint/eslint/issues/20200)) (ntnyq)
- [`dbb200e`](https://github.com/eslint/eslint/commit/dbb200e3604e63bba23a18d40089ca44604835ed) chore: use team member's username when name is not available in data ([#​20194](https://github.com/eslint/eslint/issues/20194)) (Milos Djermanovic)
- [`8962089`](https://github.com/eslint/eslint/commit/8962089edbd978b43513576387a134036b8e2d36) chore: mark deprecated rules as available until v11.0.0 ([#​20184](https://github.com/eslint/eslint/issues/20184)) (Pixel998)
### [`v9.37.0`](https://github.com/eslint/eslint/releases/tag/v9.37.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.36.0...v9.37.0)
##### Features
- [`39f7fb4`](https://github.com/eslint/eslint/commit/39f7fb493a6924ff7dc638fd4d6e7b3d8eb95383) feat: `preserve-caught-error` should recognize all static "cause" keys ([#​20163](https://github.com/eslint/eslint/issues/20163)) (Pixel998)
- [`f81eabc`](https://github.com/eslint/eslint/commit/f81eabc5849ece98b8ca054f96b29f038a69bcf8) feat: support TS syntax in `no-restricted-imports` ([#​19562](https://github.com/eslint/eslint/issues/19562)) (Nitin Kumar)
##### Bug Fixes
- [`a129cce`](https://github.com/eslint/eslint/commit/a129cced7a86ea2518eb9be6990fa18af39694ca) fix: correct `no-loss-of-precision` false positives for leading zeros ([#​20164](https://github.com/eslint/eslint/issues/20164)) (Francesco Trotta)
- [`09e04fc`](https://github.com/eslint/eslint/commit/09e04fcc3f4cc963eea7c9c579391de5e231595b) fix: add missing AST token types ([#​20172](https://github.com/eslint/eslint/issues/20172)) (Pixel998)
- [`861c6da`](https://github.com/eslint/eslint/commit/861c6da2bd2796414e6eed782155ec34e2ed6344) fix: correct `ESLint` typings ([#​20122](https://github.com/eslint/eslint/issues/20122)) (Pixel998)
##### Documentation
- [`b950359`](https://github.com/eslint/eslint/commit/b950359c5f39085483c3137a6a160e582ef32007) docs: fix typos across the docs ([#​20182](https://github.com/eslint/eslint/issues/20182)) (루밀LuMir)
- [`42498a2`](https://github.com/eslint/eslint/commit/42498a27981d50750dd15ae8660dbe85c4f4587c) docs: improve ToC accessibility by hiding non-semantic character ([#​20181](https://github.com/eslint/eslint/issues/20181)) (Percy Ma)
- [`29ea092`](https://github.com/eslint/eslint/commit/29ea092b93608756350b1e9c5a4f29c8a49264ab) docs: Update README (GitHub Actions Bot)
- [`5c97a04`](https://github.com/eslint/eslint/commit/5c97a04578e6280c2395f642c2d8d6bdf30eec18) docs: show `availableUntil` in deprecated rule banner ([#​20170](https://github.com/eslint/eslint/issues/20170)) (Pixel998)
- [`90a71bf`](https://github.com/eslint/eslint/commit/90a71bf5024a86fc232cd2e05f96811e2a18fd0f) docs: update `README` files to add badge and instructions ([#​20115](https://github.com/eslint/eslint/issues/20115)) (루밀LuMir)
- [`1603ae1`](https://github.com/eslint/eslint/commit/1603ae1526d9b6f557c7d5534a4f40f46842edd6) docs: update references from `master` to `main` ([#​20153](https://github.com/eslint/eslint/issues/20153)) (루밀LuMir)
##### Chores
- [`afe8a13`](https://github.com/eslint/eslint/commit/afe8a1346958242031fea66fdfbb239e8bf408b7) chore: update `@eslint/js` dependency to version 9.37.0 ([#​20183](https://github.com/eslint/eslint/issues/20183)) (Francesco Trotta)
- [`abee4ca`](https://github.com/eslint/eslint/commit/abee4ca1fa10da733b1cc4a7d5e765b912a9de82) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`fc9381f`](https://github.com/eslint/eslint/commit/fc9381f6ca57b824e82d118c14631c17bea79d7e) chore: fix typos in comments ([#​20175](https://github.com/eslint/eslint/issues/20175)) (overlookmotel)
- [`e1574a2`](https://github.com/eslint/eslint/commit/e1574a22d38fd7e1891f86f8db0b09053f8963cb) chore: unpin jiti ([#​20173](https://github.com/eslint/eslint/issues/20173)) (renovate\[bot])
- [`e1ac05e`](https://github.com/eslint/eslint/commit/e1ac05e2fae779e738f85bd47dda1cc2b7099346) refactor: mark `ESLint.findConfigFile()` as `async`, add missing docs ([#​20157](https://github.com/eslint/eslint/issues/20157)) (Pixel998)
- [`347906d`](https://github.com/eslint/eslint/commit/347906d627c53bf45d63ba831d2fd2b83fb0a749) chore: update eslint ([#​20149](https://github.com/eslint/eslint/issues/20149)) (renovate\[bot])
- [`0cb5897`](https://github.com/eslint/eslint/commit/0cb5897e24059bacadb8d2e6458184904759fda1) test: remove tmp dir created for circular fixes in multithread mode test ([#​20146](https://github.com/eslint/eslint/issues/20146)) (Milos Djermanovic)
- [`bb99566`](https://github.com/eslint/eslint/commit/bb995665e32b3a958e78006c9fd75744c5604f1b) ci: pin `jiti` to version 2.5.1 ([#​20151](https://github.com/eslint/eslint/issues/20151)) (Pixel998)
- [`177f669`](https://github.com/eslint/eslint/commit/177f669adc0f96d14ae1a71cde7786f327515863) perf: improve worker count calculation for `"auto"` concurrency ([#​20067](https://github.com/eslint/eslint/issues/20067)) (Francesco Trotta)
- [`448b57b`](https://github.com/eslint/eslint/commit/448b57bca3406ee12c4e44e9298fc0c99d3ee10c) chore: Mark deprecated formatting rules as available until v11.0.0 ([#​20144](https://github.com/eslint/eslint/issues/20144)) (Milos Djermanovic)
### [`v9.36.0`](https://github.com/eslint/eslint/releases/tag/v9.36.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.35.0...v9.36.0)
##### Features
- [`47afcf6`](https://github.com/eslint/eslint/commit/47afcf668df65eac68d7b04145d037037010a076) feat: correct `preserve-caught-error` edge cases ([#​20109](https://github.com/eslint/eslint/issues/20109)) (Francesco Trotta)
##### Bug Fixes
- [`75b74d8`](https://github.com/eslint/eslint/commit/75b74d865d3b8e7fa3bcf5ad29f4bf6d18d1310e) fix: add missing rule option types ([#​20127](https://github.com/eslint/eslint/issues/20127)) (ntnyq)
- [`1c0d850`](https://github.com/eslint/eslint/commit/1c0d85049e3f30a8809340c1abc881c63b7812ff) fix: update `eslint-all.js` to use `Object.freeze` for `rules` object ([#​20116](https://github.com/eslint/eslint/issues/20116)) (루밀LuMir)
- [`7d61b7f`](https://github.com/eslint/eslint/commit/7d61b7fadc9c5c6f2b131e37e8a3cffa5aae8ee6) fix: add missing scope types to `Scope.type` ([#​20110](https://github.com/eslint/eslint/issues/20110)) (Pixel998)
- [`7a670c3`](https://github.com/eslint/eslint/commit/7a670c301b58609017ce8cfda99ee81f95de3898) fix: correct rule option typings in `rules.d.ts` ([#​20084](https://github.com/eslint/eslint/issues/20084)) (Pixel998)
##### Documentation
- [`b73ab12`](https://github.com/eslint/eslint/commit/b73ab12acd3e87f8d8173cda03499f6cd1f26db6) docs: update examples to use `defineConfig` ([#​20131](https://github.com/eslint/eslint/issues/20131)) (sethamus)
- [`31d9392`](https://github.com/eslint/eslint/commit/31d93926990fba536846ec727d7a2625fc844649) docs: fix typos ([#​20118](https://github.com/eslint/eslint/issues/20118)) (Pixel998)
- [`c7f861b`](https://github.com/eslint/eslint/commit/c7f861b3f8c1ac961b4cd4f22483798f3324c62b) docs: Update README (GitHub Actions Bot)
- [`6b0c08b`](https://github.com/eslint/eslint/commit/6b0c08b106aa66f2e9fa484282f0eb63c64a1215) docs: Update README (GitHub Actions Bot)
- [`91f97c5`](https://github.com/eslint/eslint/commit/91f97c50468fbdc089c91e99c2ea0fe821911df2) docs: Update README (GitHub Actions Bot)
##### Chores
- [`12411e8`](https://github.com/eslint/eslint/commit/12411e8d450ed26a5f7cca6a78ec05323c9323e8) chore: upgrade [@​eslint/js](https://github.com/eslint/js)[@​9](https://github.com/9).36.0 ([#​20139](https://github.com/eslint/eslint/issues/20139)) (Milos Djermanovic)
- [`488cba6`](https://github.com/eslint/eslint/commit/488cba6b391b97b2cfc74bbb46fdeacb1361949e) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`bac82a2`](https://github.com/eslint/eslint/commit/bac82a2a9c80a3f69087852758d7737aea371f09) ci: simplify renovate configuration ([#​19907](https://github.com/eslint/eslint/issues/19907)) (唯然)
- [`c00bb37`](https://github.com/eslint/eslint/commit/c00bb37d62c1bcc0a37f094371be9c40064009f1) ci: bump actions/labeler from 5 to 6 ([#​20090](https://github.com/eslint/eslint/issues/20090)) (dependabot\[bot])
- [`fee751d`](https://github.com/eslint/eslint/commit/fee751dc8aeab54547af4538332ea5c069ef28b6) refactor: use `defaultOptions` in rules ([#​20121](https://github.com/eslint/eslint/issues/20121)) (Pixel998)
- [`1ace67d`](https://github.com/eslint/eslint/commit/1ace67d9f7903adc3d3f09868aa05b673e7d3f3b) chore: update example to use `defineConfig` ([#​20111](https://github.com/eslint/eslint/issues/20111)) (루밀LuMir)
- [`4821963`](https://github.com/eslint/eslint/commit/4821963bf765532069c49e9da9ecbe9485b073fc) test: add missing loc information to error objects in rule tests ([#​20112](https://github.com/eslint/eslint/issues/20112)) (루밀LuMir)
- [`b42c42e`](https://github.com/eslint/eslint/commit/b42c42e7cd3ac9ee1b5a15f16ff25b325d0482e4) chore: disallow use of deprecated `type` property in core rule tests ([#​20094](https://github.com/eslint/eslint/issues/20094)) (Milos Djermanovic)
- [`7bb498d`](https://github.com/eslint/eslint/commit/7bb498d720dcd054cc042ca4b60b138d8485f07c) test: remove deprecated `type` property from core rule tests ([#​20093](https://github.com/eslint/eslint/issues/20093)) (Pixel998)
- [`e10cf2a`](https://github.com/eslint/eslint/commit/e10cf2ab42fe5b481d980dc652f7504414747733) ci: bump actions/setup-node from 4 to 5 ([#​20089](https://github.com/eslint/eslint/issues/20089)) (dependabot\[bot])
- [`5cb0ce4`](https://github.com/eslint/eslint/commit/5cb0ce48ef6cfbbe6d09131c33a53f9d66fe9bd4) refactor: use `meta.defaultOptions` in `preserve-caught-error` ([#​20080](https://github.com/eslint/eslint/issues/20080)) (Pixel998)
- [`f9f7cb5`](https://github.com/eslint/eslint/commit/f9f7cb578dced3c14f635e17c75aa6744d291f4d) chore: package.json update for eslint-config-eslint release (Jenkins)
- [`81764b2`](https://github.com/eslint/eslint/commit/81764b298065a328038cd067bc8fedef97e57500) chore: update `eslint` peer dependency in `eslint-config-eslint` ([#​20079](https://github.com/eslint/eslint/issues/20079)) (Milos Djermanovic)
### [`v9.35.0`](https://github.com/eslint/eslint/releases/tag/v9.35.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.34.0...v9.35.0)
##### Features
- [`42761fa`](https://github.com/eslint/eslint/commit/42761fa7c872fb9e14c144b692af6967b3662082) feat: implement suggestions for no-empty-function ([#​20057](https://github.com/eslint/eslint/issues/20057)) (jaymarvelz)
- [`102f444`](https://github.com/eslint/eslint/commit/102f44442ac9bf1fcd4ba6ab9fae43ce09199df6) feat: implement suggestions for no-empty-static-block ([#​20056](https://github.com/eslint/eslint/issues/20056)) (jaymarvelz)
- [`e51ffff`](https://github.com/eslint/eslint/commit/e51ffff737ca245b3a1d115cb11e1c99737249a3) feat: add `preserve-caught-error` rule ([#​19913](https://github.com/eslint/eslint/issues/19913)) (Amnish Singh Arora)
##### Bug Fixes
- [`10e7ae2`](https://github.com/eslint/eslint/commit/10e7ae23e30ea0834d9fdeb3a2a1db8103c36cd2) fix: update uncloneable options error message ([#​20059](https://github.com/eslint/eslint/issues/20059)) (soda-sorcery)
- [`bfa4601`](https://github.com/eslint/eslint/commit/bfa46013e7ea9a522c02f72250fa07160f96a6b8) fix: ignore empty switch statements with comments in no-empty rule ([#​20045](https://github.com/eslint/eslint/issues/20045)) (jaymarvelz)
- [`dfd11de`](https://github.com/eslint/eslint/commit/dfd11deb24fc733faa5db751a2f615eb04e48b15) fix: add `before` and `after` to test case types ([#​20049](https://github.com/eslint/eslint/issues/20049)) (Francesco Trotta)
- [`dabbe95`](https://github.com/eslint/eslint/commit/dabbe95c39671c5fa272da012ee1432aa088650f) fix: correct types for `no-restricted-imports` rule ([#​20034](https://github.com/eslint/eslint/issues/20034)) (Milos Djermanovic)
- [`ea789c7`](https://github.com/eslint/eslint/commit/ea789c7dd234c1a6be499a4644dd0f5c97615972) fix: no-loss-of-precision false positive with uppercase exponent ([#​20032](https://github.com/eslint/eslint/issues/20032)) (sethamus)
##### Documentation
- [`d265515`](https://github.com/eslint/eslint/commit/d265515642f65246bcd45c17979f67c2afb12f95) docs: improve phrasing - "if" → "even if" from getting-started section ([#​20074](https://github.com/eslint/eslint/issues/20074)) (jjangga0214)
- [`a355a0e`](https://github.com/eslint/eslint/commit/a355a0e5b2e6a47cda099b31dc7d112cfb5c4315) docs: invert comparison logic for example in `no-var` doc page ([#​20064](https://github.com/eslint/eslint/issues/20064)) (OTonGitHub)
- [`5082fc2`](https://github.com/eslint/eslint/commit/5082fc206de6946d9d4c20e57301f78839b3b9f2) docs: Update README (GitHub Actions Bot)
- [`99cfd7e`](https://github.com/eslint/eslint/commit/99cfd7e056e1703941c9eb8ca1ae7fdb1987ba9d) docs: add missing "the" in rule deprecation docs ([#​20050](https://github.com/eslint/eslint/issues/20050)) (Josh Goldberg ✨)
- [`6ad8973`](https://github.com/eslint/eslint/commit/6ad8973e5d3c94b8e100b7266f55f8eb0757eb00) docs: update `--no-ignore` and `--ignore-pattern` documentation ([#​20036](https://github.com/eslint/eslint/issues/20036)) (Francesco Trotta)
- [`8033b19`](https://github.com/eslint/eslint/commit/8033b195299a1eaa4a0ed6553d9e034a457bb577) docs: add documentation for `--no-config-lookup` ([#​20033](https://github.com/eslint/eslint/issues/20033)) (Francesco Trotta)
##### Chores
- [`da87f2f`](https://github.com/eslint/eslint/commit/da87f2fe792cab5b69b62bf5c15e69ab4f433087) chore: upgrade [@​eslint/js](https://github.com/eslint/js)[@​9](https://github.com/9).35.0 ([#​20077](https://github.com/eslint/eslint/issues/20077)) (Milos Djermanovic)
- [`af2a087`](https://github.com/eslint/eslint/commit/af2a0870fdc646091d027516601888923e5bc202) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`7055764`](https://github.com/eslint/eslint/commit/70557649e3111c55d8cddf678b6c4079aa6f0ccc) test: remove `tests/lib/eslint/eslint.config.js` ([#​20065](https://github.com/eslint/eslint/issues/20065)) (Milos Djermanovic)
- [`84ffb96`](https://github.com/eslint/eslint/commit/84ffb9680b15e45bfd8c8a5db4731576ddd16fc4) chore: update `@eslint-community/eslint-utils` ([#​20069](https://github.com/eslint/eslint/issues/20069)) (Francesco Trotta)
- [`d5ef939`](https://github.com/eslint/eslint/commit/d5ef9397150cc178e1f9891c3ff49ac4871ec786) refactor: remove deprecated `context.parserOptions` usage across rules ([#​20060](https://github.com/eslint/eslint/issues/20060)) (sethamus)
- [`1b3881d`](https://github.com/eslint/eslint/commit/1b3881d7e859bec9589e39888656c33c914a8302) chore: remove redundant word ([#​20058](https://github.com/eslint/eslint/issues/20058)) (pxwanglu)
### [`v9.34.0`](https://github.com/eslint/eslint/releases/tag/v9.34.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.33.0...v9.34.0)
##### Features
- [`0bb777a`](https://github.com/eslint/eslint/commit/0bb777a82b533df595cd520d9c89d291efa14a33) feat: multithread linting ([#​19794](https://github.com/eslint/eslint/issues/19794)) (Francesco Trotta)
- [`43a5f9e`](https://github.com/eslint/eslint/commit/43a5f9e36f1aade16f81fc49ef4b333660faadab) feat: add eslint-plugin-regexp to eslint-config-eslint base config ([#​19951](https://github.com/eslint/eslint/issues/19951)) (Pixel998)
##### Bug Fixes
- [`9b89903`](https://github.com/eslint/eslint/commit/9b8990397b2d2ed70771bb0e2070261a0c41782c) fix: default value of accessor-pairs option in rule.d.ts file ([#​20024](https://github.com/eslint/eslint/issues/20024)) (Tanuj Kanti)
- [`6c07420`](https://github.com/eslint/eslint/commit/6c074206ae0eae4816197a57648b415832a20e1d) fix: fix spurious failure in neostandard integration test ([#​20023](https://github.com/eslint/eslint/issues/20023)) (Kirk Waiblinger)
- [`676f4ac`](https://github.com/eslint/eslint/commit/676f4acaaed6e4f6ffe0c2e21272d4702b311a7b) fix: allow scientific notation with trailing zeros matching exponent ([#​20002](https://github.com/eslint/eslint/issues/20002)) (Sweta Tanwar)
##### Documentation
- [`0b4a590`](https://github.com/eslint/eslint/commit/0b4a590333b73a21b9e0ddc98462680e09fe3232) docs: make rulesdir deprecation clearer ([#​20018](https://github.com/eslint/eslint/issues/20018)) (Domenico Gemoli)
- [`327c672`](https://github.com/eslint/eslint/commit/327c67256fbeaf9d5e365802c2a11f5d32a16522) docs: Update README (GitHub Actions Bot)
- [`bf26229`](https://github.com/eslint/eslint/commit/bf2622991f5b892610a8c3343ff16519e5fd7a79) docs: Fix typo in core-concepts/index.md ([#​20009](https://github.com/eslint/eslint/issues/20009)) (Tobias Hernstig)
- [`2309327`](https://github.com/eslint/eslint/commit/2309327554acbf011f0d17e7b36fdd68e43adf3a) docs: fix typo in the "Configuring Rules" section ([#​20001](https://github.com/eslint/eslint/issues/20001)) (ghazi-git)
- [`2b87e21`](https://github.com/eslint/eslint/commit/2b87e21321422c120c2248dae25cac7f9eec0f29) docs: \[no-else-return] clarify sample code. ([#​19991](https://github.com/eslint/eslint/issues/19991)) (Yuki Takada (Yukinosuke Takada))
- [`c36570c`](https://github.com/eslint/eslint/commit/c36570c6657c2a92dbb4f09a8166a4d9909a091a) docs: Update README (GitHub Actions Bot)
##### Chores
- [`f19ad94`](https://github.com/eslint/eslint/commit/f19ad9493e0ca04c2c1455fbb3402eaad993a8be) chore: upgrade to `@eslint/js@9.34.0` ([#​20030](https://github.com/eslint/eslint/issues/20030)) (Francesco Trotta)
- [`b48fa20`](https://github.com/eslint/eslint/commit/b48fa20034e53bc65d1a58f3d834705e3087b00c) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`4bce8a2`](https://github.com/eslint/eslint/commit/4bce8a250262ec47207bc260581f979e40c86bda) chore: package.json update for eslint-config-eslint release (Jenkins)
- [`0c9999c`](https://github.com/eslint/eslint/commit/0c9999c2a682151cf13bb3a4f8916930678c2f9b) refactor: prefer default options in `grouped-accessor-pairs` ([#​20028](https://github.com/eslint/eslint/issues/20028)) (루밀LuMir)
- [`d503f19`](https://github.com/eslint/eslint/commit/d503f1981354c7b86e423879846c61e0405af8fe) ci: fix `stale.yml` ([#​20010](https://github.com/eslint/eslint/issues/20010)) (루밀LuMir)
- [`e2dc67d`](https://github.com/eslint/eslint/commit/e2dc67d8b028147de4da35c64efe1d74c9f6a883) ci: centralize `stale.yml` ([#​19994](https://github.com/eslint/eslint/issues/19994)) (루밀LuMir)
- [`7093cb8`](https://github.com/eslint/eslint/commit/7093cb8f590ec2a1b5364d7b5687e9b5f4e06f8a) ci: bump actions/checkout from 4 to 5 ([#​20005](https://github.com/eslint/eslint/issues/20005)) (dependabot\[bot])
### [`v9.33.0`](https://github.com/eslint/eslint/releases/tag/v9.33.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.32.0...v9.33.0)
##### Features
- [`e07820e`](https://github.com/eslint/eslint/commit/e07820e66fd1fceaf2620dc931154955a706cc0f) feat: add global object access detection to no-restricted-globals ([#​19939](https://github.com/eslint/eslint/issues/19939)) (sethamus)
- [`90b050e`](https://github.com/eslint/eslint/commit/90b050ec11557cab08b6be9f05fabf97dba6a63d) feat: support explicit resource management in `one-var` ([#​19941](https://github.com/eslint/eslint/issues/19941)) (Sweta Tanwar)
##### Bug Fixes
- [`732433c`](https://github.com/eslint/eslint/commit/732433c4fb023f45154b825cdc8cdaf1979d4336) fix: allow any type for `meta.docs.recommended` in custom rules ([#​19995](https://github.com/eslint/eslint/issues/19995)) (Francesco Trotta)
- [`e8a6914`](https://github.com/eslint/eslint/commit/e8a6914a249d036e12494004e586b2a2b6e104d1) fix: Fixed potential bug in check-emfile-handling.js ([#​19975](https://github.com/eslint/eslint/issues/19975)) (諏訪原慶斗)
##### Documentation
- [`34f0723`](https://github.com/eslint/eslint/commit/34f0723e2d0faf8ac8dc95ec56e6d181bd6b67f2) docs: playground button for TypeScript code example ([#​19671](https://github.com/eslint/eslint/issues/19671)) (Tanuj Kanti)
- [`dc942a4`](https://github.com/eslint/eslint/commit/dc942a47daf41228d69072c52f1be20789426862) docs: Update README (GitHub Actions Bot)
- [`5a4b6f7`](https://github.com/eslint/eslint/commit/5a4b6f74320b72f9b6ad8b30f5c463b2b71315af) docs: Update no-multi-assign.md ([#​19979](https://github.com/eslint/eslint/issues/19979)) (Yuki Takada (Yukinosuke Takada))
- [`247e156`](https://github.com/eslint/eslint/commit/247e15698e34919a0cd411842fb3e14ac7a8f1ba) docs: add missing let declarations in `no-plusplus` ([#​19980](https://github.com/eslint/eslint/issues/19980)) (Yuki Takada (Yukinosuke Takada))
- [`0d17242`](https://github.com/eslint/eslint/commit/0d17242b3c25c2ddf8363f4560641acd1ae82ca9) docs: Update README (GitHub Actions Bot)
- [`fa20b9d`](https://github.com/eslint/eslint/commit/fa20b9db8ff90ea9f0527118114dda17c656d095) docs: Clarify when to open an issue for a MR ([#​19974](https://github.com/eslint/eslint/issues/19974)) (Nicholas C. Zakas)
##### Build Related
- [`27fa865`](https://github.com/eslint/eslint/commit/27fa86551bd173387e29a139293de78b0e14f0f3) build: use `ESLint` class to generate formatter examples ([#​19972](https://github.com/eslint/eslint/issues/19972)) (Milos Djermanovic)
##### Chores
- [`4258046`](https://github.com/eslint/eslint/commit/425804602ecb9ee5f54d1c38a473cf20538420c5) chore: update dependency [@​eslint/js](https://github.com/eslint/js) to v9.33.0 ([#​19998](https://github.com/eslint/eslint/issues/19998)) (renovate\[bot])
- [`ad28371`](https://github.com/eslint/eslint/commit/ad283717ed4764a171120ca7c6cba82a78fa024c) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`06a22f1`](https://github.com/eslint/eslint/commit/06a22f154c08ea044b3172b357b226d34dfefc6a) test: resolve flakiness in --mcp flag test ([#​19993](https://github.com/eslint/eslint/issues/19993)) (Pixel998)
- [`54920ed`](https://github.com/eslint/eslint/commit/54920ed229693f23650dace6e567bf44413aaf98) test: switch to `Linter.Config` in `ESLintRules` type tests ([#​19977](https://github.com/eslint/eslint/issues/19977)) (Francesco Trotta)
### [`v9.32.0`](https://github.com/eslint/eslint/releases/tag/v9.32.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.31.0...v9.32.0)
#### Features
- [`1245000`](https://github.com/eslint/eslint/commit/1245000c5a81954d42f0c7eb670efe450c3bbad5) feat: support explicit resource management in core rules ([#​19828](https://github.com/eslint/eslint/issues/19828)) (fnx)
- [`0e957a7`](https://github.com/eslint/eslint/commit/0e957a7b5528f375a51e7c1a2fd1b03cdcd2af2d) feat: support typescript types in accessor rules ([#​19882](https://github.com/eslint/eslint/issues/19882)) (fnx)
#### Bug Fixes
- [`960fd40`](https://github.com/eslint/eslint/commit/960fd40dfd204af30726b49b6bec714fe49a606e) fix: Upgrade [@​eslint/js](https://github.com/eslint/js) ([#​19971](https://github.com/eslint/eslint/issues/19971)) (Nicholas C. Zakas)
- [`bbf23fa`](https://github.com/eslint/eslint/commit/bbf23fa2f1c6058f6cb5c9f2f32460a15e75e596) fix: Refactor reporting into FileReport ([#​19877](https://github.com/eslint/eslint/issues/19877)) (Nicholas C. Zakas)
- [`d498887`](https://github.com/eslint/eslint/commit/d4988872f375890bf677ce1a1d92a505085b51fa) fix: bump [@​eslint/plugin-kit](https://github.com/eslint/plugin-kit) to 0.3.4 to resolve vulnerability ([#​19965](https://github.com/eslint/eslint/issues/19965)) (Milos Djermanovic)
- [`f46fc6c`](https://github.com/eslint/eslint/commit/f46fc6c137c951bc73cf3bd9446053c1b11f769b) fix: report only global references in no-implied-eval ([#​19932](https://github.com/eslint/eslint/issues/19932)) (Nitin Kumar)
- [`7863d26`](https://github.com/eslint/eslint/commit/7863d26b7cfb03a81ec86f93439757ff60bf6afb) fix: remove outdated types in `ParserOptions.ecmaFeatures` ([#​19944](https://github.com/eslint/eslint/issues/19944)) (ntnyq)
- [`3173305`](https://github.com/eslint/eslint/commit/317330552e2d276221c7f2dd9c1516ad8b41cc3c) fix: update execScript message in no-implied-eval rule ([#​19937](https://github.com/eslint/eslint/issues/19937)) (TKDev7)
#### Documentation
- [`86e7426`](https://github.com/eslint/eslint/commit/86e7426e4463ca49ffa5c82e825ecb6aa19ca8a0) docs: Update README (GitHub Actions Bot)
#### Chores
- [`50de1ce`](https://github.com/eslint/eslint/commit/50de1ced9df2b1ee48ee6843c8cfe0f5d8edbc27) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`74f01a3`](https://github.com/eslint/eslint/commit/74f01a3f5905aaa0902837ced2425209c09c048f) ci: unpin `jiti` to version `^2.5.1` ([#​19970](https://github.com/eslint/eslint/issues/19970)) (루밀LuMir)
- [`2ab1381`](https://github.com/eslint/eslint/commit/2ab13813a7e7f3014c35490b351447ec43229951) ci: pin `jiti` to version 2.4.2 ([#​19964](https://github.com/eslint/eslint/issues/19964)) (Francesco Trotta)
- [`b7f7545`](https://github.com/eslint/eslint/commit/b7f75454695079f54b77fcdc9ebe3b9199d5ad30) test: switch to flat config mode in `SourceCode` tests ([#​19953](https://github.com/eslint/eslint/issues/19953)) (Milos Djermanovic)
- [`f5a35e3`](https://github.com/eslint/eslint/commit/f5a35e3b7cee17cd31fc02c24c3e74b42ee202bc) test: switch to flat config mode in eslint-fuzzer ([#​19960](https://github.com/eslint/eslint/issues/19960)) (Milos Djermanovic)
- [`e22af8c`](https://github.com/eslint/eslint/commit/e22af8c42d622d8d912ee7bedf49bf4283247fdc) refactor: use `CustomRuleDefinitionType` in `JSRuleDefinition` ([#​19949](https://github.com/eslint/eslint/issues/19949)) (Francesco Trotta)
- [`e855717`](https://github.com/eslint/eslint/commit/e85571730f1360464b7ee00695c678d551f9c643) chore: switch performance tests to hyperfine ([#​19919](https://github.com/eslint/eslint/issues/19919)) (Francesco Trotta)
- [`2f73a23`](https://github.com/eslint/eslint/commit/2f73a23655092a41780859ffe0a07c44a2f1b5f5) test: switch to flat config mode in `ast-utils` tests ([#​19948](https://github.com/eslint/eslint/issues/19948)) (Milos Djermanovic)
- [`c565a53`](https://github.com/eslint/eslint/commit/c565a530f50c96dacd44e096f7d531b073aa4dc7) chore: exclude `further_reading_links.json` from Prettier formatting ([#​19943](https://github.com/eslint/eslint/issues/19943)) (Milos Djermanovic)
### [`v9.31.0`](https://github.com/eslint/eslint/releases/tag/v9.31.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.30.1...v9.31.0)
#### Features
- [`35cf44c`](https://github.com/eslint/eslint/commit/35cf44c22e36b1554486e7a75c870e86c10b83f8) feat: output full actual location in rule tester if different ([#​19904](https://github.com/eslint/eslint/issues/19904)) (ST-DDT)
- [`a6a6325`](https://github.com/eslint/eslint/commit/a6a63259de6cb5642f69c7be429554bbcedca4c0) feat: support explicit resource management in `no-loop-func` ([#​19895](https://github.com/eslint/eslint/issues/19895)) (Milos Djermanovic)
- [`4682cdc`](https://github.com/eslint/eslint/commit/4682cdc6960279ee17f23899fbab6f58d881eadf) feat: support explicit resource management in `no-undef-init` ([#​19894](https://github.com/eslint/eslint/issues/19894)) (Milos Djermanovic)
- [`5848216`](https://github.com/eslint/eslint/commit/58482165eaf597cc5c58216a956c301ae87520b3) feat: support explicit resource management in `init-declarations` ([#​19893](https://github.com/eslint/eslint/issues/19893)) (Milos Djermanovic)
- [`bb370b8`](https://github.com/eslint/eslint/commit/bb370b8e79f65ee32d9d89ecf249fb74a141ad22) feat: support explicit resource management in `no-const-assign` ([#​19892](https://github.com/eslint/eslint/issues/19892)) (Milos Djermanovic)
#### Bug Fixes
- [`07fac6c`](https://github.com/eslint/eslint/commit/07fac6cafa0426b4d1ea12d9001f3955f19b286d) fix: retry on EMFILE when writing autofix results ([#​19926](https://github.com/eslint/eslint/issues/19926)) (TKDev7)
- [`28cc7ab`](https://github.com/eslint/eslint/commit/28cc7abbb72b29b1cac6fc4253646a7839586064) fix: Remove incorrect RuleContext types ([#​19910](https://github.com/eslint/eslint/issues/19910)) (Nicholas C. Zakas)
#### Documentation
- [`664cb44`](https://github.com/eslint/eslint/commit/664cb44ab03785bd200a792607a7e20faa2d4b28) docs: Update README (GitHub Actions Bot)
- [`40dbe2a`](https://github.com/eslint/eslint/commit/40dbe2a43f83d366e9026faec70293512fb61ca2) docs: fix mismatch between `globalIgnores()` code and text ([#​19914](https://github.com/eslint/eslint/issues/19914)) (MaoShizhong)
- [`5a0069d`](https://github.com/eslint/eslint/commit/5a0069d60815246cf24e1c96125540792c2507ef) docs: Update README (GitHub Actions Bot)
- [`fef04b5`](https://github.com/eslint/eslint/commit/fef04b5c7fea99362d67b31b8e98cd4914020ed3) docs: Update working on issues info ([#​19902](https://github.com/eslint/eslint/issues/19902)) (Nicholas C. Zakas)
#### Chores
- [`3ddd454`](https://github.com/eslint/eslint/commit/3ddd454c1c73294e5af7905d60d03fac162f1b3e) chore: upgrade to `@eslint/js@9.31.0` ([#​19935](https://github.com/eslint/eslint/issues/19935)) (Francesco Trotta)
- [`d5054e5`](https://github.com/eslint/eslint/commit/d5054e5454a537e9ade238c768c262c6c592cbc1) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`0f4a378`](https://github.com/eslint/eslint/commit/0f4a3781fe7c11fad7b206c3c694655486ddd187) chore: update eslint ([#​19933](https://github.com/eslint/eslint/issues/19933)) (renovate\[bot])
- [`76c2340`](https://github.com/eslint/eslint/commit/76c2340c368f96db77439b5cd1df0196cc39bf3e) chore: bump mocha to v11 ([#​19917](https://github.com/eslint/eslint/issues/19917)) (루밀LuMir)
### [`v9.30.1`](https://github.com/eslint/eslint/releases/tag/v9.30.1)
[Compare Source](https://github.com/eslint/eslint/compare/v9.30.0...v9.30.1)
#### Bug Fixes
- [`e91bb87`](https://github.com/eslint/eslint/commit/e91bb870f8c6e38baa508f18048cd2a2d04b8b9c) fix: allow separate default and named type imports ([#​19899](https://github.com/eslint/eslint/issues/19899)) (xbinaryx)
#### Documentation
- [`ab7c625`](https://github.com/eslint/eslint/commit/ab7c62598a9fca498e495d45029ae92fd5fb9bf3) docs: Update README (GitHub Actions Bot)
- [`dae1e5b`](https://github.com/eslint/eslint/commit/dae1e5bb27db0e846efbe3026210013b42817838) docs: update jsdoc's link ([#​19896](https://github.com/eslint/eslint/issues/19896)) (JamesVanWaza)
#### Chores
- [`b035f74`](https://github.com/eslint/eslint/commit/b035f747c6e6d1c7a299c90b0ed0b8109cf24a53) chore: upgrade to `@eslint/js@9.30.1` ([#​19906](https://github.com/eslint/eslint/issues/19906)) (Francesco Trotta)
- [`b3dbc16`](https://github.com/eslint/eslint/commit/b3dbc16563cb7036d75edff9814e17053a645321) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
### [`v9.30.0`](https://github.com/eslint/eslint/releases/tag/v9.30.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.29.0...v9.30.0)
#### Features
- [`52a5fca`](https://github.com/eslint/eslint/commit/52a5fcaa4e0bb4e55c014c20ed47d6c93b107635) feat: Support `basePath` property in config objects ([#​19879](https://github.com/eslint/eslint/issues/19879)) (Milos Djermanovic)
- [`4ab4482`](https://github.com/eslint/eslint/commit/4ab44823df4d4b47d3650da949077a0551e7579e) feat: add `allowSeparateTypeImports` option to `no-duplicate-imports` ([#​19872](https://github.com/eslint/eslint/issues/19872)) (sethamus)
- [`b8a7e7a`](https://github.com/eslint/eslint/commit/b8a7e7aeb5f0ed2e1670771ab4dda6fd723d96eb) feat: throw error when column is negative in `getIndexFromLoc` ([#​19831](https://github.com/eslint/eslint/issues/19831)) (루밀LuMir)
#### Bug Fixes
- [`6a0f164`](https://github.com/eslint/eslint/commit/6a0f164543bf8461d6a27a740c9e08aa77cbe42d) fix: handle `null` type `loc` in `getIndexFromLoc` method ([#​19862](https://github.com/eslint/eslint/issues/19862)) (루밀LuMir)
- [`3fbcd70`](https://github.com/eslint/eslint/commit/3fbcd704a0b2aef2a6c1fc34d2bc4b35f6425067) fix: update error message for `no-restricted-properties` ([#​19855](https://github.com/eslint/eslint/issues/19855)) (Tanuj Kanti)
- [`7ef4cf7`](https://github.com/eslint/eslint/commit/7ef4cf76610d42727a404e495ac6d47868cf5040) fix: remove unnecessary semicolon from fixes ([#​19857](https://github.com/eslint/eslint/issues/19857)) (Francesco Trotta)
- [`7dabc38`](https://github.com/eslint/eslint/commit/7dabc38a8406d470fb2389eec2f0ad1ad214173e) fix: use `process.version` in `--env-info` ([#​19865](https://github.com/eslint/eslint/issues/19865)) (TKDev7)
#### Documentation
- [`8662ed1`](https://github.com/eslint/eslint/commit/8662ed1f6debc358e22812b145e117aa4a907d78) docs: adopt eslint-stylistic sub packages related changes ([#​19887](https://github.com/eslint/eslint/issues/19887)) (ntnyq)
- [`20158b0`](https://github.com/eslint/eslint/commit/20158b09db3430cf00b202ba8c25ce874bbaf00a) docs: typo in comment for unused variables handling ([#​19870](https://github.com/eslint/eslint/issues/19870)) (leopardracer)
- [`ebfb5b4`](https://github.com/eslint/eslint/commit/ebfb5b46136c4d737c9783333e3057421d1a0bef) docs: Fixed Typo in configuration-files.md ([#​19873](https://github.com/eslint/eslint/issues/19873)) (0-20)
- [`4112fd0`](https://github.com/eslint/eslint/commit/4112fd09531092e9651e9981205bcd603dc56acf) docs: clarify that boolean is still allowed for rule `meta.deprecated` ([#​19866](https://github.com/eslint/eslint/issues/19866)) (Bryan Mishkin)
#### Chores
- [`2b6491c`](https://github.com/eslint/eslint/commit/2b6491cd4b8eec44d4a3f8dea1b71151e8dd0230) chore: upgrade to `@eslint/js@9.30.0` ([#​19889](https://github.com/eslint/eslint/issues/19889)) (Francesco Trotta)
- [`5a5d526`](https://github.com/eslint/eslint/commit/5a5d5261037fdf84a91f2f22d3726d58572453f4) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`eaf8a41`](https://github.com/eslint/eslint/commit/eaf8a418af32b3190494e4a2284533353c28ccfa) chore: Correct typos in linter tests ([#​19878](https://github.com/eslint/eslint/issues/19878)) (kilavvy)
</details>
<details>
<summary>mui/material-ui (@​mui/icons-material)</summary>
### [`v7.3.6`](https://github.com/mui/material-ui/blob/HEAD/CHANGELOG.md#736)
[Compare Source](https://github.com/mui/material-ui/compare/v7.3.5...v7.3.6)
<!-- generated comparing v7.3.5..master -->
*Dec 3, 2025*
A big thanks to the 22 contributors who made this release possible.
##### [@​mui/material](https://github.com/mui/material)@​7.3.6
- \[Accordion] Move properties to the AccordionOwnProps interface ([#​47348](https://github.com/mui/material-ui/issues/47348)) [@​Aleksan4e3](https://github.com/Aleksan4e3)
- \[Autocomplete] Remove unnecessary `filterSelectedOptions` dependency from `syncHighlightedIndex` useCallback ([#​47378](https://github.com/mui/material-ui/issues/47378)) [@​ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[Autocomplete] Fix input caret not showing when focusing after chip navigation ([#​47249](https://github.com/mui/material-ui/issues/47249)) [@​vrachuri28](https://github.com/vrachuri28)
- \[Autocomplete] Fix ArrowLeft crash when value is not set with single-value rendering ([#​47214](https://github.com/mui/material-ui/issues/47214)) [@​rithik56](https://github.com/rithik56)
- \[Button] Fix running formAction when passed ([#​47185](https://github.com/mui/material-ui/issues/47185)) [@​sai6855](https://github.com/sai6855)
- \[Chip] Remove leftover closing parenthesis in CSS class key ([#​47345](https://github.com/mui/material-ui/issues/47345)) [@​ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[ListItem] Add `secondaryAction` slot to `ListItem` ([#​47399](https://github.com/mui/material-ui/issues/47399)) [@​sai6855](https://github.com/sai6855)
- \[NumberField] Fix scroll behavior ([#​47397](https://github.com/mui/material-ui/issues/47397)) [@​oliviertassinari](https://github.com/oliviertassinari)
- \[Select] Fix keyboard navigation while rendering in shadow DOM ([#​47380](https://github.com/mui/material-ui/issues/47380)) [@​xBlizZer](https://github.com/xBlizZer)
- \[Select] Fix cannot pass certain event handlers ([#​47366](https://github.com/mui/material-ui/issues/47366)) [@​ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[Slider] Accept readonly array for `marks` prop ([#​47370](https://github.com/mui/material-ui/issues/47370)) [@​pcorpet](https://github.com/pcorpet)
- \[Snackbar] Avoid unnecessary `ownerState` spread into `useSnackbar` ([#​47373](https://github.com/mui/material-ui/issues/47373)) [@​ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[TextField] Allow custom props in slot props via TS module augmentation ([#​47367](https://github.com/mui/material-ui/issues/47367)) [@​kumarvishwajeettrivedi](https://github.com/kumarvishwajeettrivedi)
- \[Tabs] Fix Arrow key navigation failing when component is rendered in shadow DOM ([#​47178](https://github.com/mui/material-ui/issues/47178)) [@​sai6855](https://github.com/sai6855)
- Fix typings for theme `applyStyles` with custom color schemes ([#​47242](https://github.com/mui/material-ui/issues/47242)) [@​akankshahu](https://github.com/akankshahu)
##### [@​mui/system](https://github.com/mui/system)@​7.3.6
- Fix unwanted attribute on DOM from InitColorSchemeScript `class` attribute ([#​47200](https://github.com/mui/material-ui/issues/47200)) [@​siriwatknp](https://github.com/siriwatknp)
##### [@​mui/lab](https://github.com/mui/lab)@​7.3.6
- \[Masonry] Fix layout flicker and single column issue ([#​43903](https://github.com/mui/material-ui/issues/43903)) [@​Fanzzzd](https://github.com/Fanzzzd)
##### Docs
- Fix default theme viewer styling ([#​47400](https://github.com/mui/material-ui/issues/47400)) [@​sai6855](https://github.com/sai6855)
- Remove repetitive words ([#​47384](https://github.com/mui/material-ui/issues/47384)) [@​rifeplight](https://github.com/rifeplight)
- Fix link to Portal API docs ([#​47383](https://github.com/mui/material-ui/issues/47383)) [@​ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- Remove mentions of MUI Base from Material UI docs ([#​47324](https://github.com/mui/material-ui/issues/47324)) [@​mapache-salvaje](https://github.com/mapache-salvaje)
- Update CSP guidance ([#​47342](https://github.com/mui/material-ui/issues/47342)) [@​rossdakin](https://github.com/rossdakin)
- Fix pathname collision in LLMs docs generator…
chore(deps): update frontend dependencies (minor) (minor)
This MR contains the following updates:
| Package | Type | Update | Change | OpenSSF |
|---|---|---|---|---|
| [@eslint/compat](https://github.com/eslint/rewrite/tree/main/packages/compat#readme) ([source](https://github.com/eslint/rewrite/tree/HEAD/packages/compat)) | devDependencies | minor | [`1.3.2` → `1.4.1`](https://renovatebot.com/diffs/npm/@eslint%2fcompat/1.3.2/1.4.1) | [](https://securityscorecards.dev/viewer/?uri=github.com/eslint/rewrite) |
| [@eslint/js](https://eslint.org) ([source](https://github.com/eslint/eslint/tree/HEAD/packages/js)) | devDependencies | minor | [`9.29.0` → `9.39.2`](https://renovatebot.com/diffs/npm/@eslint%2fjs/9.29.0/9.39.2) | [](https://securityscorecards.dev/viewer/?uri=github.com/eslint/eslint) |
| [@mui/icons-material](https://mui.com/material-ui/material-icons/) ([source](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material)) | dependencies | minor | [`7.1.2` → `7.3.6`](https://renovatebot.com/diffs/npm/@mui%2ficons-material/7.1.2/7.3.6) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/material-ui) |
| [@mui/material](https://mui.com/material-ui/) ([source](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material)) | dependencies | minor | [`7.1.2` → `7.3.6`](https://renovatebot.com/diffs/npm/@mui%2fmaterial/7.1.2/7.3.6) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/material-ui) |
| [@mui/x-charts](https://mui.com/x/react-charts/) ([source](https://github.com/mui/mui-x/tree/HEAD/packages/x-charts)) | dependencies | minor | [`8.5.3` → `8.23.0`](https://renovatebot.com/diffs/npm/@mui%2fx-charts/8.5.3/8.23.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) |
| [@mui/x-tree-view](https://mui.com/x/react-tree-view/) ([source](https://github.com/mui/mui-x/tree/HEAD/packages/x-tree-view)) | dependencies | minor | [`8.5.3` → `8.23.0`](https://renovatebot.com/diffs/npm/@mui%2fx-tree-view/8.5.3/8.23.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) |
| [@openapitools/openapi-generator-cli](https://github.com/OpenAPITools/openapi-generator-cli) | devDependencies | minor | [`2.23.4` → `2.26.0`](https://renovatebot.com/diffs/npm/@openapitools%2fopenapi-generator-cli/2.23.4/2.26.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/OpenAPITools/openapi-generator-cli) |
| [@reduxjs/toolkit](https://redux-toolkit.js.org) ([source](https://github.com/reduxjs/redux-toolkit)) | dependencies | minor | [`2.8.2` → `2.11.2`](https://renovatebot.com/diffs/npm/@reduxjs%2ftoolkit/2.8.2/2.11.2) | [](https://securityscorecards.dev/viewer/?uri=github.com/reduxjs/redux-toolkit) |
| [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) | devDependencies | minor | [`6.6.4` → `6.9.1`](https://renovatebot.com/diffs/npm/@testing-library%2fjest-dom/6.6.4/6.9.1) | [](https://securityscorecards.dev/viewer/?uri=github.com/testing-library/jest-dom) |
| [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | devDependencies | minor | [`19.1.17` → `19.2.7`](https://renovatebot.com/diffs/npm/@types%2freact/19.1.17/19.2.7) | [](https://securityscorecards.dev/viewer/?uri=github.com/DefinitelyTyped/DefinitelyTyped) |
| [@types/react-dom](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react-dom) ([source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react-dom)) | devDependencies | minor | [`19.1.11` → `19.2.3`](https://renovatebot.com/diffs/npm/@types%2freact-dom/19.1.11/19.2.3) | [](https://securityscorecards.dev/viewer/?uri=github.com/DefinitelyTyped/DefinitelyTyped) |
| [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | devDependencies | minor | [`8.39.1` → `8.51.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/8.39.1/8.51.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | devDependencies | minor | [`8.39.1` → `8.51.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.39.1/8.51.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) |
| [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/main/packages/plugin-react#readme) ([source](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react)) | devDependencies | minor | [`4.5.2` → `4.7.0`](https://renovatebot.com/diffs/npm/@vitejs%2fplugin-react/4.5.2/4.7.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/vitejs/vite-plugin-react) |
| [ace-builds](https://github.com/ajaxorg/ace-builds) | dependencies | minor | [`1.42.0` → `1.43.5`](https://renovatebot.com/diffs/npm/ace-builds/1.42.0/1.43.5) | [](https://securityscorecards.dev/viewer/?uri=github.com/ajaxorg/ace-builds) |
| [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | devDependencies | minor | [`9.32.0` → `9.39.2`](https://renovatebot.com/diffs/npm/eslint/9.32.0/9.39.2) | [](https://securityscorecards.dev/viewer/?uri=github.com/eslint/eslint) |
| [eslint-plugin-unused-imports](https://github.com/sweepline/eslint-plugin-unused-imports) | devDependencies | minor | [`4.1.4` → `4.3.0`](https://renovatebot.com/diffs/npm/eslint-plugin-unused-imports/4.1.4/4.3.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/sweepline/eslint-plugin-unused-imports) |
| [globals](https://github.com/sindresorhus/globals) | devDependencies | minor | [`16.2.0` → `16.5.0`](https://renovatebot.com/diffs/npm/globals/16.2.0/16.5.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/sindresorhus/globals) |
| [i18next](https://www.i18next.com) ([source](https://github.com/i18next/i18next)) | dependencies | minor | [`25.2.1` → `25.7.3`](https://renovatebot.com/diffs/npm/i18next/25.2.1/25.7.3) | [](https://securityscorecards.dev/viewer/?uri=github.com/i18next/i18next) |
| [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | devDependencies | minor | [`3.5.3` → `3.7.4`](https://renovatebot.com/diffs/npm/prettier/3.5.3/3.7.4) | [](https://securityscorecards.dev/viewer/?uri=github.com/prettier/prettier) |
| [react](https://react.dev/) ([source](https://github.com/facebook/react/tree/HEAD/packages/react)) | dependencies | minor | [`19.1.1` → `19.2.3`](https://renovatebot.com/diffs/npm/react/19.1.1/19.2.3) | [](https://securityscorecards.dev/viewer/?uri=github.com/facebook/react) |
| [react-dom](https://react.dev/) ([source](https://github.com/facebook/react/tree/HEAD/packages/react-dom)) | dependencies | minor | [`19.1.1` → `19.2.3`](https://renovatebot.com/diffs/npm/react-dom/19.1.1/19.2.3) | [](https://securityscorecards.dev/viewer/?uri=github.com/facebook/react) |
| [react-i18next](https://github.com/i18next/react-i18next) | dependencies | minor | [`15.5.3` → `15.7.4`](https://renovatebot.com/diffs/npm/react-i18next/15.5.3/15.7.4) | [](https://securityscorecards.dev/viewer/?uri=github.com/i18next/react-i18next) |
| [react-router-dom](https://github.com/remix-run/react-router) ([source](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | dependencies | minor | [`7.6.3` → `7.11.0`](https://renovatebot.com/diffs/npm/react-router-dom/7.6.3/7.11.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/remix-run/react-router) |
| [typescript](https://www.typescriptlang.org/) ([source](https://github.com/microsoft/TypeScript)) | devDependencies | minor | [`5.8.3` → `5.9.3`](https://renovatebot.com/diffs/npm/typescript/5.8.3/5.9.3) | [](https://securityscorecards.dev/viewer/?uri=github.com/microsoft/TypeScript) |
| [vite](https://vite.dev) ([source](https://github.com/vitejs/vite/tree/HEAD/packages/vite)) | devDependencies | minor | [`6.3.7` → `6.4.1`](https://renovatebot.com/diffs/npm/vite/6.3.7/6.4.1) | [](https://securityscorecards.dev/viewer/?uri=github.com/vitejs/vite) |
| [vite-plugin-svgr](https://github.com/pd4d10/vite-plugin-svgr) | devDependencies | minor | [`4.3.0` → `4.5.0`](https://renovatebot.com/diffs/npm/vite-plugin-svgr/4.3.0/4.5.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/pd4d10/vite-plugin-svgr) |
---
### Release Notes
<details>
<summary>eslint/rewrite (@​eslint/compat)</summary>
### [`v1.4.1`](https://github.com/eslint/rewrite/blob/HEAD/packages/compat/CHANGELOG.md#141-2025-10-27)
[Compare Source](https://github.com/eslint/rewrite/compare/7f592e3b60dd0a3b38d891a80aeeb92cf78d8e86...f5ecc7e945634a173af677d2d597d583bd2704e6)
##### Dependencies
- The following workspace dependencies were updated
- dependencies
- [@​eslint/core](https://github.com/eslint/core) bumped from ^0.16.0 to ^0.17.0
### [`v1.4.0`](https://github.com/eslint/rewrite/blob/HEAD/packages/compat/CHANGELOG.md#140-2025-09-16)
[Compare Source](https://github.com/eslint/rewrite/compare/9e68ab61df9c4ebc082b603fb5e3dfe2dcf98666...7f592e3b60dd0a3b38d891a80aeeb92cf78d8e86)
##### Features
- Add config types in [@​eslint/core](https://github.com/eslint/core) ([#​237](https://github.com/eslint/rewrite/issues/237)) ([7b6dd37](https://github.com/eslint/rewrite/commit/7b6dd370a598ea7fc94fba427a2579342b50b90f))
##### Dependencies
- The following workspace dependencies were updated
- dependencies
- [@​eslint/core](https://github.com/eslint/core) bumped from ^0.15.2 to ^0.16.0
</details>
<details>
<summary>eslint/eslint (@​eslint/js)</summary>
### [`v9.39.2`](https://github.com/eslint/eslint/releases/tag/v9.39.2)
[Compare Source](https://github.com/eslint/eslint/compare/v9.39.1...v9.39.2)
##### Bug Fixes
- [`5705833`](https://github.com/eslint/eslint/commit/57058331946568164449c5caabe2cf206e4fb5d9) fix: warn when `eslint-env` configuration comments are found ([#​20381](https://github.com/eslint/eslint/issues/20381)) (sethamus)
##### Build Related
- [`506f154`](https://github.com/eslint/eslint/commit/506f1549a64aa65bdddc75c71cb62f0ab94b5a23) build: add .scss files entry to knip ([#​20391](https://github.com/eslint/eslint/issues/20391)) (Milos Djermanovic)
##### Chores
- [`7ca0af7`](https://github.com/eslint/eslint/commit/7ca0af7f9f89dd4a01736dae01931c45d528171b) chore: upgrade to `@eslint/js@9.39.2` ([#​20394](https://github.com/eslint/eslint/issues/20394)) (Francesco Trotta)
- [`c43ce24`](https://github.com/eslint/eslint/commit/c43ce24ff0ce073ec4ad691cd5a50171dfe6cf1e) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`4c9858e`](https://github.com/eslint/eslint/commit/4c9858e47bb9146cf20f546a562bc58a9ee3dae1) ci: add `v9.x-dev` branch ([#​20382](https://github.com/eslint/eslint/issues/20382)) (Milos Djermanovic)
### [`v9.39.1`](https://github.com/eslint/eslint/releases/tag/v9.39.1)
[Compare Source](https://github.com/eslint/eslint/compare/v9.39.0...v9.39.1)
##### Bug Fixes
- [`650753e`](https://github.com/eslint/eslint/commit/650753ee3976784343ceb40170619dab1aa9fe0d) fix: Only pass node to JS lang visitor methods ([#​20283](https://github.com/eslint/eslint/issues/20283)) (Nicholas C. Zakas)
##### Documentation
- [`51b51f4`](https://github.com/eslint/eslint/commit/51b51f4f1ce82ef63264c4e45d9ef579bcd73f8e) docs: add a section on when to use extends vs cascading ([#​20268](https://github.com/eslint/eslint/issues/20268)) (Tanuj Kanti)
- [`b44d426`](https://github.com/eslint/eslint/commit/b44d42699dcd1729b7ecb50ca70e4c1c17f551f1) docs: Update README (GitHub Actions Bot)
##### Chores
- [`92db329`](https://github.com/eslint/eslint/commit/92db329211c8da5ce8340a4d4c05ce9c12845381) chore: update `@eslint/js` version to 9.39.1 ([#​20284](https://github.com/eslint/eslint/issues/20284)) (Francesco Trotta)
- [`c7ebefc`](https://github.com/eslint/eslint/commit/c7ebefc9eaf99b76b30b0d3cf9960807a47367c4) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`61778f6`](https://github.com/eslint/eslint/commit/61778f6ca33c0f63962a91d6a75a4fa5db9f47d2) chore: update eslint-config-eslint dependency [@​eslint/js](https://github.com/eslint/js) to ^9.39.0 ([#​20275](https://github.com/eslint/eslint/issues/20275)) (renovate\[bot])
- [`d9ca2fc`](https://github.com/eslint/eslint/commit/d9ca2fcd9ad63331bfd329a69534e1ff04f231e8) ci: Add rangeStrategy to eslint group in renovate config ([#​20266](https://github.com/eslint/eslint/issues/20266)) (唯然)
- [`009e507`](https://github.com/eslint/eslint/commit/009e5076ff5a4bd845f55e17676e3bb88f47c280) test: fix version tests for ESLint v10 ([#​20274](https://github.com/eslint/eslint/issues/20274)) (Milos Djermanovic)
### [`v9.39.0`](https://github.com/eslint/eslint/releases/tag/v9.39.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.38.0...v9.39.0)
##### Features
- [`cc57d87`](https://github.com/eslint/eslint/commit/cc57d87a3f119e9d39c55e044e526ae067fa31ce) feat: update error loc to key in `no-dupe-class-members` ([#​20259](https://github.com/eslint/eslint/issues/20259)) (Tanuj Kanti)
- [`126552f`](https://github.com/eslint/eslint/commit/126552fcf35da3ddcefa527db06dabc54c04041c) feat: update error location in `for-direction` and `no-dupe-args` ([#​20258](https://github.com/eslint/eslint/issues/20258)) (Tanuj Kanti)
- [`167d097`](https://github.com/eslint/eslint/commit/167d0970d3802a66910e9820f31dcd717fab0b2a) feat: update `complexity` rule to highlight only static block header ([#​20245](https://github.com/eslint/eslint/issues/20245)) (jaymarvelz)
##### Bug Fixes
- [`15f5c7c`](https://github.com/eslint/eslint/commit/15f5c7c168d0698683943f51dd617f14a5e6815c) fix: forward traversal `step.args` to visitors ([#​20253](https://github.com/eslint/eslint/issues/20253)) (jaymarvelz)
- [`5a1a534`](https://github.com/eslint/eslint/commit/5a1a534e877f7c4c992885867f923df307c3929d) fix: allow JSDoc comments in object-shorthand rule ([#​20167](https://github.com/eslint/eslint/issues/20167)) (Nitin Kumar)
- [`e86b813`](https://github.com/eslint/eslint/commit/e86b813eb660f1a5adc8e143a70d9b683cd12362) fix: Use more types from [@​eslint/core](https://github.com/eslint/core) ([#​20257](https://github.com/eslint/eslint/issues/20257)) (Nicholas C. Zakas)
- [`927272d`](https://github.com/eslint/eslint/commit/927272d1f0d5683b029b729d368a96527f283323) fix: correct `Scope` typings ([#​20198](https://github.com/eslint/eslint/issues/20198)) (jaymarvelz)
- [`37f76d9`](https://github.com/eslint/eslint/commit/37f76d9c539bb6fc816fedb7be4486b71a58620a) fix: use `AST.Program` type for Program node ([#​20244](https://github.com/eslint/eslint/issues/20244)) (Francesco Trotta)
- [`ae07f0b`](https://github.com/eslint/eslint/commit/ae07f0b3334ebd22ae2e7b09bca5973b96aa9768) fix: unify timing report for concurrent linting ([#​20188](https://github.com/eslint/eslint/issues/20188)) (jaymarvelz)
- [`b165d47`](https://github.com/eslint/eslint/commit/b165d471be6062f4475b972155b02654a974a0e9) fix: correct `Rule` typings ([#​20199](https://github.com/eslint/eslint/issues/20199)) (jaymarvelz)
- [`fb97cda`](https://github.com/eslint/eslint/commit/fb97cda70d87286a7dbd2457f578ef578d6905e8) fix: improve error message for missing fix function in suggestions ([#​20218](https://github.com/eslint/eslint/issues/20218)) (jaymarvelz)
##### Documentation
- [`d3e81e3`](https://github.com/eslint/eslint/commit/d3e81e30ee6be5a21151b7a17ef10a714b6059c0) docs: Always recommend to include a files property ([#​20158](https://github.com/eslint/eslint/issues/20158)) (Percy Ma)
- [`0f0385f`](https://github.com/eslint/eslint/commit/0f0385f1404dcadaba4812120b1ad02334dbd66a) docs: use consistent naming recommendation ([#​20250](https://github.com/eslint/eslint/issues/20250)) (Alex M. Spieslechner)
- [`a3b1456`](https://github.com/eslint/eslint/commit/a3b145609ac649fac837c8c0515cbb2a9321ca40) docs: Update README (GitHub Actions Bot)
- [`cf5f2dd`](https://github.com/eslint/eslint/commit/cf5f2dd58dd98084a21da04fe7b9054b9478d552) docs: fix correct tag of `no-useless-constructor` ([#​20255](https://github.com/eslint/eslint/issues/20255)) (Tanuj Kanti)
- [`10b995c`](https://github.com/eslint/eslint/commit/10b995c8e5473de8d66d3cd99d816e046f35e3ec) docs: add TS options and examples for `nofunc` in `no-use-before-define` ([#​20249](https://github.com/eslint/eslint/issues/20249)) (Tanuj Kanti)
- [`2584187`](https://github.com/eslint/eslint/commit/2584187e4a305ea7a98e1a5bd4dca2a60ad132f8) docs: remove repetitive word in comment ([#​20242](https://github.com/eslint/eslint/issues/20242)) (reddaisyy)
- [`637216b`](https://github.com/eslint/eslint/commit/637216bd4f2aae7c928ad04a4e40eecffb50c9e5) docs: update CLI flags migration instructions ([#​20238](https://github.com/eslint/eslint/issues/20238)) (jaymarvelz)
- [`e7cda3b`](https://github.com/eslint/eslint/commit/e7cda3bdf1bdd664e6033503a3315ad81736b200) docs: Update README (GitHub Actions Bot)
- [`7b9446f`](https://github.com/eslint/eslint/commit/7b9446f7cc2054aa2cdf8e6225f4ac15a03671a8) docs: handle empty flags sections on the feature flags page ([#​20222](https://github.com/eslint/eslint/issues/20222)) (sethamus)
##### Chores
- [`dfe3c1b`](https://github.com/eslint/eslint/commit/dfe3c1b2034228765c48c8a445554223767dd16d) chore: update `@eslint/js` version to 9.39.0 ([#​20270](https://github.com/eslint/eslint/issues/20270)) (Francesco Trotta)
- [`2375a6d`](https://github.com/eslint/eslint/commit/2375a6de8263393c129d41cac1b407b40111a73c) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`a1f4e52`](https://github.com/eslint/eslint/commit/a1f4e52d67c94bef61edd1607dcd130047c1baf0) chore: update `@eslint` dependencies ([#​20265](https://github.com/eslint/eslint/issues/20265)) (Francesco Trotta)
- [`c7d3229`](https://github.com/eslint/eslint/commit/c7d32298482752eeac9fb46378d4f1ea095f3836) chore: update dependency [@​eslint/core](https://github.com/eslint/core) to ^0.17.0 ([#​20256](https://github.com/eslint/eslint/issues/20256)) (renovate\[bot])
- [`27549bc`](https://github.com/eslint/eslint/commit/27549bc774c7c2dc5c569070a3e87c62f602bf7d) chore: update fuzz testing to not error if code sample minimizer fails ([#​20252](https://github.com/eslint/eslint/issues/20252)) (Milos Djermanovic)
- [`a1370ee`](https://github.com/eslint/eslint/commit/a1370ee40e9d8e0e41843f3278cd745fc1ad543f) ci: bump actions/setup-node from 5 to 6 ([#​20230](https://github.com/eslint/eslint/issues/20230)) (dependabot\[bot])
- [`9e7fad4`](https://github.com/eslint/eslint/commit/9e7fad4a1867709060686d03e0ec1d0d69671cfb) chore: add script to auto-generate eslint:recommended configuration ([#​20208](https://github.com/eslint/eslint/issues/20208)) (唯然)
### [`v9.38.0`](https://github.com/eslint/eslint/releases/tag/v9.38.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.37.0...v9.38.0)
##### Features
- [`ce40f74`](https://github.com/eslint/eslint/commit/ce40f74efd45f66d9fbfc6f78ce622ee72008485) feat: update `complexity` rule to only highlight function header ([#​20048](https://github.com/eslint/eslint/issues/20048)) (Atul Nair)
- [`e37e590`](https://github.com/eslint/eslint/commit/e37e590aae2a7fcca4d3a9adc1379ad466e5c5d1) feat: correct `no-loss-of-precision` false positives with `e` notation ([#​20187](https://github.com/eslint/eslint/issues/20187)) (Francesco Trotta)
##### Bug Fixes
- [`50c3dfd`](https://github.com/eslint/eslint/commit/50c3dfd98065622765a51a8ddb1e70c44fc5a4cb) fix: improve type support for isolated dependencies in pnpm ([#​20201](https://github.com/eslint/eslint/issues/20201)) (Francesco Trotta)
- [`a1f06a3`](https://github.com/eslint/eslint/commit/a1f06a350c4155c4dbf39bf932a38d71d70f1b65) fix: correct SourceCode typings ([#​20114](https://github.com/eslint/eslint/issues/20114)) (Pixel998)
##### Documentation
- [`462675a`](https://github.com/eslint/eslint/commit/462675af8a811f9ca984efaedbdc5b46b13ced7a) docs: improve web accessibility by hiding non-semantic character ([#​20205](https://github.com/eslint/eslint/issues/20205)) (루밀LuMir)
- [`c070e65`](https://github.com/eslint/eslint/commit/c070e65f6bb9e38d06a89ba2b3261781bec3d397) docs: correct formatting in `no-irregular-whitespace` rule documentation ([#​20203](https://github.com/eslint/eslint/issues/20203)) (루밀LuMir)
- [`b39e71a`](https://github.com/eslint/eslint/commit/b39e71a2130ae1ea3fbc19b19f5b951eb625722a) docs: Update README (GitHub Actions Bot)
- [`cd39983`](https://github.com/eslint/eslint/commit/cd3998314876a4fad6463d9011bc73778ccc1fd9) docs: move `custom-formatters` type descriptions to `nodejs-api` ([#​20190](https://github.com/eslint/eslint/issues/20190)) (Percy Ma)
##### Chores
- [`d17c795`](https://github.com/eslint/eslint/commit/d17c795bf1624e0604998482b98e6bb6bff39045) chore: upgrade [@​eslint/js](https://github.com/eslint/js)[@​9](https://github.com/9).38.0 ([#​20221](https://github.com/eslint/eslint/issues/20221)) (Milos Djermanovic)
- [`25d0e33`](https://github.com/eslint/eslint/commit/25d0e33270e08baed09dbee2cdd56a8e5cd9da0f) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`c82b5ef`](https://github.com/eslint/eslint/commit/c82b5efa1fc91900e029efa23e688fad67fc17fa) refactor: Use types from [@​eslint/core](https://github.com/eslint/core) ([#​20168](https://github.com/eslint/eslint/issues/20168)) (Nicholas C. Zakas)
- [`ff31609`](https://github.com/eslint/eslint/commit/ff31609f195654d448954210ba4d31e921d463e8) ci: add Node.js 25 to `ci.yml` ([#​20220](https://github.com/eslint/eslint/issues/20220)) (루밀LuMir)
- [`004577e`](https://github.com/eslint/eslint/commit/004577eda2f2f4b2829e0364f8b41893cebfc859) ci: bump github/codeql-action from 3 to 4 ([#​20211](https://github.com/eslint/eslint/issues/20211)) (dependabot\[bot])
- [`eac71fb`](https://github.com/eslint/eslint/commit/eac71fb77113de7bf199ff20c6ee44cefcb59848) test: remove use of `nodejsScope` option of eslint-scope from tests ([#​20206](https://github.com/eslint/eslint/issues/20206)) (Milos Djermanovic)
- [`4168a18`](https://github.com/eslint/eslint/commit/4168a18b7efd8facbbd71cd44a62942a9f656a30) chore: fix typo in legacy-eslint.js ([#​20202](https://github.com/eslint/eslint/issues/20202)) (Sweta Tanwar)
- [`205dbd2`](https://github.com/eslint/eslint/commit/205dbd2d9272e761574c478e3b0181f7b89ed0f6) chore: fix typos ([#​20200](https://github.com/eslint/eslint/issues/20200)) (ntnyq)
- [`dbb200e`](https://github.com/eslint/eslint/commit/dbb200e3604e63bba23a18d40089ca44604835ed) chore: use team member's username when name is not available in data ([#​20194](https://github.com/eslint/eslint/issues/20194)) (Milos Djermanovic)
- [`8962089`](https://github.com/eslint/eslint/commit/8962089edbd978b43513576387a134036b8e2d36) chore: mark deprecated rules as available until v11.0.0 ([#​20184](https://github.com/eslint/eslint/issues/20184)) (Pixel998)
### [`v9.37.0`](https://github.com/eslint/eslint/releases/tag/v9.37.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.36.0...v9.37.0)
##### Features
- [`39f7fb4`](https://github.com/eslint/eslint/commit/39f7fb493a6924ff7dc638fd4d6e7b3d8eb95383) feat: `preserve-caught-error` should recognize all static "cause" keys ([#​20163](https://github.com/eslint/eslint/issues/20163)) (Pixel998)
- [`f81eabc`](https://github.com/eslint/eslint/commit/f81eabc5849ece98b8ca054f96b29f038a69bcf8) feat: support TS syntax in `no-restricted-imports` ([#​19562](https://github.com/eslint/eslint/issues/19562)) (Nitin Kumar)
##### Bug Fixes
- [`a129cce`](https://github.com/eslint/eslint/commit/a129cced7a86ea2518eb9be6990fa18af39694ca) fix: correct `no-loss-of-precision` false positives for leading zeros ([#​20164](https://github.com/eslint/eslint/issues/20164)) (Francesco Trotta)
- [`09e04fc`](https://github.com/eslint/eslint/commit/09e04fcc3f4cc963eea7c9c579391de5e231595b) fix: add missing AST token types ([#​20172](https://github.com/eslint/eslint/issues/20172)) (Pixel998)
- [`861c6da`](https://github.com/eslint/eslint/commit/861c6da2bd2796414e6eed782155ec34e2ed6344) fix: correct `ESLint` typings ([#​20122](https://github.com/eslint/eslint/issues/20122)) (Pixel998)
##### Documentation
- [`b950359`](https://github.com/eslint/eslint/commit/b950359c5f39085483c3137a6a160e582ef32007) docs: fix typos across the docs ([#​20182](https://github.com/eslint/eslint/issues/20182)) (루밀LuMir)
- [`42498a2`](https://github.com/eslint/eslint/commit/42498a27981d50750dd15ae8660dbe85c4f4587c) docs: improve ToC accessibility by hiding non-semantic character ([#​20181](https://github.com/eslint/eslint/issues/20181)) (Percy Ma)
- [`29ea092`](https://github.com/eslint/eslint/commit/29ea092b93608756350b1e9c5a4f29c8a49264ab) docs: Update README (GitHub Actions Bot)
- [`5c97a04`](https://github.com/eslint/eslint/commit/5c97a04578e6280c2395f642c2d8d6bdf30eec18) docs: show `availableUntil` in deprecated rule banner ([#​20170](https://github.com/eslint/eslint/issues/20170)) (Pixel998)
- [`90a71bf`](https://github.com/eslint/eslint/commit/90a71bf5024a86fc232cd2e05f96811e2a18fd0f) docs: update `README` files to add badge and instructions ([#​20115](https://github.com/eslint/eslint/issues/20115)) (루밀LuMir)
- [`1603ae1`](https://github.com/eslint/eslint/commit/1603ae1526d9b6f557c7d5534a4f40f46842edd6) docs: update references from `master` to `main` ([#​20153](https://github.com/eslint/eslint/issues/20153)) (루밀LuMir)
##### Chores
- [`afe8a13`](https://github.com/eslint/eslint/commit/afe8a1346958242031fea66fdfbb239e8bf408b7) chore: update `@eslint/js` dependency to version 9.37.0 ([#​20183](https://github.com/eslint/eslint/issues/20183)) (Francesco Trotta)
- [`abee4ca`](https://github.com/eslint/eslint/commit/abee4ca1fa10da733b1cc4a7d5e765b912a9de82) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`fc9381f`](https://github.com/eslint/eslint/commit/fc9381f6ca57b824e82d118c14631c17bea79d7e) chore: fix typos in comments ([#​20175](https://github.com/eslint/eslint/issues/20175)) (overlookmotel)
- [`e1574a2`](https://github.com/eslint/eslint/commit/e1574a22d38fd7e1891f86f8db0b09053f8963cb) chore: unpin jiti ([#​20173](https://github.com/eslint/eslint/issues/20173)) (renovate\[bot])
- [`e1ac05e`](https://github.com/eslint/eslint/commit/e1ac05e2fae779e738f85bd47dda1cc2b7099346) refactor: mark `ESLint.findConfigFile()` as `async`, add missing docs ([#​20157](https://github.com/eslint/eslint/issues/20157)) (Pixel998)
- [`347906d`](https://github.com/eslint/eslint/commit/347906d627c53bf45d63ba831d2fd2b83fb0a749) chore: update eslint ([#​20149](https://github.com/eslint/eslint/issues/20149)) (renovate\[bot])
- [`0cb5897`](https://github.com/eslint/eslint/commit/0cb5897e24059bacadb8d2e6458184904759fda1) test: remove tmp dir created for circular fixes in multithread mode test ([#​20146](https://github.com/eslint/eslint/issues/20146)) (Milos Djermanovic)
- [`bb99566`](https://github.com/eslint/eslint/commit/bb995665e32b3a958e78006c9fd75744c5604f1b) ci: pin `jiti` to version 2.5.1 ([#​20151](https://github.com/eslint/eslint/issues/20151)) (Pixel998)
- [`177f669`](https://github.com/eslint/eslint/commit/177f669adc0f96d14ae1a71cde7786f327515863) perf: improve worker count calculation for `"auto"` concurrency ([#​20067](https://github.com/eslint/eslint/issues/20067)) (Francesco Trotta)
- [`448b57b`](https://github.com/eslint/eslint/commit/448b57bca3406ee12c4e44e9298fc0c99d3ee10c) chore: Mark deprecated formatting rules as available until v11.0.0 ([#​20144](https://github.com/eslint/eslint/issues/20144)) (Milos Djermanovic)
### [`v9.36.0`](https://github.com/eslint/eslint/releases/tag/v9.36.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.35.0...v9.36.0)
##### Features
- [`47afcf6`](https://github.com/eslint/eslint/commit/47afcf668df65eac68d7b04145d037037010a076) feat: correct `preserve-caught-error` edge cases ([#​20109](https://github.com/eslint/eslint/issues/20109)) (Francesco Trotta)
##### Bug Fixes
- [`75b74d8`](https://github.com/eslint/eslint/commit/75b74d865d3b8e7fa3bcf5ad29f4bf6d18d1310e) fix: add missing rule option types ([#​20127](https://github.com/eslint/eslint/issues/20127)) (ntnyq)
- [`1c0d850`](https://github.com/eslint/eslint/commit/1c0d85049e3f30a8809340c1abc881c63b7812ff) fix: update `eslint-all.js` to use `Object.freeze` for `rules` object ([#​20116](https://github.com/eslint/eslint/issues/20116)) (루밀LuMir)
- [`7d61b7f`](https://github.com/eslint/eslint/commit/7d61b7fadc9c5c6f2b131e37e8a3cffa5aae8ee6) fix: add missing scope types to `Scope.type` ([#​20110](https://github.com/eslint/eslint/issues/20110)) (Pixel998)
- [`7a670c3`](https://github.com/eslint/eslint/commit/7a670c301b58609017ce8cfda99ee81f95de3898) fix: correct rule option typings in `rules.d.ts` ([#​20084](https://github.com/eslint/eslint/issues/20084)) (Pixel998)
##### Documentation
- [`b73ab12`](https://github.com/eslint/eslint/commit/b73ab12acd3e87f8d8173cda03499f6cd1f26db6) docs: update examples to use `defineConfig` ([#​20131](https://github.com/eslint/eslint/issues/20131)) (sethamus)
- [`31d9392`](https://github.com/eslint/eslint/commit/31d93926990fba536846ec727d7a2625fc844649) docs: fix typos ([#​20118](https://github.com/eslint/eslint/issues/20118)) (Pixel998)
- [`c7f861b`](https://github.com/eslint/eslint/commit/c7f861b3f8c1ac961b4cd4f22483798f3324c62b) docs: Update README (GitHub Actions Bot)
- [`6b0c08b`](https://github.com/eslint/eslint/commit/6b0c08b106aa66f2e9fa484282f0eb63c64a1215) docs: Update README (GitHub Actions Bot)
- [`91f97c5`](https://github.com/eslint/eslint/commit/91f97c50468fbdc089c91e99c2ea0fe821911df2) docs: Update README (GitHub Actions Bot)
##### Chores
- [`12411e8`](https://github.com/eslint/eslint/commit/12411e8d450ed26a5f7cca6a78ec05323c9323e8) chore: upgrade [@​eslint/js](https://github.com/eslint/js)[@​9](https://github.com/9).36.0 ([#​20139](https://github.com/eslint/eslint/issues/20139)) (Milos Djermanovic)
- [`488cba6`](https://github.com/eslint/eslint/commit/488cba6b391b97b2cfc74bbb46fdeacb1361949e) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`bac82a2`](https://github.com/eslint/eslint/commit/bac82a2a9c80a3f69087852758d7737aea371f09) ci: simplify renovate configuration ([#​19907](https://github.com/eslint/eslint/issues/19907)) (唯然)
- [`c00bb37`](https://github.com/eslint/eslint/commit/c00bb37d62c1bcc0a37f094371be9c40064009f1) ci: bump actions/labeler from 5 to 6 ([#​20090](https://github.com/eslint/eslint/issues/20090)) (dependabot\[bot])
- [`fee751d`](https://github.com/eslint/eslint/commit/fee751dc8aeab54547af4538332ea5c069ef28b6) refactor: use `defaultOptions` in rules ([#​20121](https://github.com/eslint/eslint/issues/20121)) (Pixel998)
- [`1ace67d`](https://github.com/eslint/eslint/commit/1ace67d9f7903adc3d3f09868aa05b673e7d3f3b) chore: update example to use `defineConfig` ([#​20111](https://github.com/eslint/eslint/issues/20111)) (루밀LuMir)
- [`4821963`](https://github.com/eslint/eslint/commit/4821963bf765532069c49e9da9ecbe9485b073fc) test: add missing loc information to error objects in rule tests ([#​20112](https://github.com/eslint/eslint/issues/20112)) (루밀LuMir)
- [`b42c42e`](https://github.com/eslint/eslint/commit/b42c42e7cd3ac9ee1b5a15f16ff25b325d0482e4) chore: disallow use of deprecated `type` property in core rule tests ([#​20094](https://github.com/eslint/eslint/issues/20094)) (Milos Djermanovic)
- [`7bb498d`](https://github.com/eslint/eslint/commit/7bb498d720dcd054cc042ca4b60b138d8485f07c) test: remove deprecated `type` property from core rule tests ([#​20093](https://github.com/eslint/eslint/issues/20093)) (Pixel998)
- [`e10cf2a`](https://github.com/eslint/eslint/commit/e10cf2ab42fe5b481d980dc652f7504414747733) ci: bump actions/setup-node from 4 to 5 ([#​20089](https://github.com/eslint/eslint/issues/20089)) (dependabot\[bot])
- [`5cb0ce4`](https://github.com/eslint/eslint/commit/5cb0ce48ef6cfbbe6d09131c33a53f9d66fe9bd4) refactor: use `meta.defaultOptions` in `preserve-caught-error` ([#​20080](https://github.com/eslint/eslint/issues/20080)) (Pixel998)
- [`f9f7cb5`](https://github.com/eslint/eslint/commit/f9f7cb578dced3c14f635e17c75aa6744d291f4d) chore: package.json update for eslint-config-eslint release (Jenkins)
- [`81764b2`](https://github.com/eslint/eslint/commit/81764b298065a328038cd067bc8fedef97e57500) chore: update `eslint` peer dependency in `eslint-config-eslint` ([#​20079](https://github.com/eslint/eslint/issues/20079)) (Milos Djermanovic)
### [`v9.35.0`](https://github.com/eslint/eslint/releases/tag/v9.35.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.34.0...v9.35.0)
##### Features
- [`42761fa`](https://github.com/eslint/eslint/commit/42761fa7c872fb9e14c144b692af6967b3662082) feat: implement suggestions for no-empty-function ([#​20057](https://github.com/eslint/eslint/issues/20057)) (jaymarvelz)
- [`102f444`](https://github.com/eslint/eslint/commit/102f44442ac9bf1fcd4ba6ab9fae43ce09199df6) feat: implement suggestions for no-empty-static-block ([#​20056](https://github.com/eslint/eslint/issues/20056)) (jaymarvelz)
- [`e51ffff`](https://github.com/eslint/eslint/commit/e51ffff737ca245b3a1d115cb11e1c99737249a3) feat: add `preserve-caught-error` rule ([#​19913](https://github.com/eslint/eslint/issues/19913)) (Amnish Singh Arora)
##### Bug Fixes
- [`10e7ae2`](https://github.com/eslint/eslint/commit/10e7ae23e30ea0834d9fdeb3a2a1db8103c36cd2) fix: update uncloneable options error message ([#​20059](https://github.com/eslint/eslint/issues/20059)) (soda-sorcery)
- [`bfa4601`](https://github.com/eslint/eslint/commit/bfa46013e7ea9a522c02f72250fa07160f96a6b8) fix: ignore empty switch statements with comments in no-empty rule ([#​20045](https://github.com/eslint/eslint/issues/20045)) (jaymarvelz)
- [`dfd11de`](https://github.com/eslint/eslint/commit/dfd11deb24fc733faa5db751a2f615eb04e48b15) fix: add `before` and `after` to test case types ([#​20049](https://github.com/eslint/eslint/issues/20049)) (Francesco Trotta)
- [`dabbe95`](https://github.com/eslint/eslint/commit/dabbe95c39671c5fa272da012ee1432aa088650f) fix: correct types for `no-restricted-imports` rule ([#​20034](https://github.com/eslint/eslint/issues/20034)) (Milos Djermanovic)
- [`ea789c7`](https://github.com/eslint/eslint/commit/ea789c7dd234c1a6be499a4644dd0f5c97615972) fix: no-loss-of-precision false positive with uppercase exponent ([#​20032](https://github.com/eslint/eslint/issues/20032)) (sethamus)
##### Documentation
- [`d265515`](https://github.com/eslint/eslint/commit/d265515642f65246bcd45c17979f67c2afb12f95) docs: improve phrasing - "if" → "even if" from getting-started section ([#​20074](https://github.com/eslint/eslint/issues/20074)) (jjangga0214)
- [`a355a0e`](https://github.com/eslint/eslint/commit/a355a0e5b2e6a47cda099b31dc7d112cfb5c4315) docs: invert comparison logic for example in `no-var` doc page ([#​20064](https://github.com/eslint/eslint/issues/20064)) (OTonGitHub)
- [`5082fc2`](https://github.com/eslint/eslint/commit/5082fc206de6946d9d4c20e57301f78839b3b9f2) docs: Update README (GitHub Actions Bot)
- [`99cfd7e`](https://github.com/eslint/eslint/commit/99cfd7e056e1703941c9eb8ca1ae7fdb1987ba9d) docs: add missing "the" in rule deprecation docs ([#​20050](https://github.com/eslint/eslint/issues/20050)) (Josh Goldberg ✨)
- [`6ad8973`](https://github.com/eslint/eslint/commit/6ad8973e5d3c94b8e100b7266f55f8eb0757eb00) docs: update `--no-ignore` and `--ignore-pattern` documentation ([#​20036](https://github.com/eslint/eslint/issues/20036)) (Francesco Trotta)
- [`8033b19`](https://github.com/eslint/eslint/commit/8033b195299a1eaa4a0ed6553d9e034a457bb577) docs: add documentation for `--no-config-lookup` ([#​20033](https://github.com/eslint/eslint/issues/20033)) (Francesco Trotta)
##### Chores
- [`da87f2f`](https://github.com/eslint/eslint/commit/da87f2fe792cab5b69b62bf5c15e69ab4f433087) chore: upgrade [@​eslint/js](https://github.com/eslint/js)[@​9](https://github.com/9).35.0 ([#​20077](https://github.com/eslint/eslint/issues/20077)) (Milos Djermanovic)
- [`af2a087`](https://github.com/eslint/eslint/commit/af2a0870fdc646091d027516601888923e5bc202) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`7055764`](https://github.com/eslint/eslint/commit/70557649e3111c55d8cddf678b6c4079aa6f0ccc) test: remove `tests/lib/eslint/eslint.config.js` ([#​20065](https://github.com/eslint/eslint/issues/20065)) (Milos Djermanovic)
- [`84ffb96`](https://github.com/eslint/eslint/commit/84ffb9680b15e45bfd8c8a5db4731576ddd16fc4) chore: update `@eslint-community/eslint-utils` ([#​20069](https://github.com/eslint/eslint/issues/20069)) (Francesco Trotta)
- [`d5ef939`](https://github.com/eslint/eslint/commit/d5ef9397150cc178e1f9891c3ff49ac4871ec786) refactor: remove deprecated `context.parserOptions` usage across rules ([#​20060](https://github.com/eslint/eslint/issues/20060)) (sethamus)
- [`1b3881d`](https://github.com/eslint/eslint/commit/1b3881d7e859bec9589e39888656c33c914a8302) chore: remove redundant word ([#​20058](https://github.com/eslint/eslint/issues/20058)) (pxwanglu)
### [`v9.34.0`](https://github.com/eslint/eslint/releases/tag/v9.34.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.33.0...v9.34.0)
##### Features
- [`0bb777a`](https://github.com/eslint/eslint/commit/0bb777a82b533df595cd520d9c89d291efa14a33) feat: multithread linting ([#​19794](https://github.com/eslint/eslint/issues/19794)) (Francesco Trotta)
- [`43a5f9e`](https://github.com/eslint/eslint/commit/43a5f9e36f1aade16f81fc49ef4b333660faadab) feat: add eslint-plugin-regexp to eslint-config-eslint base config ([#​19951](https://github.com/eslint/eslint/issues/19951)) (Pixel998)
##### Bug Fixes
- [`9b89903`](https://github.com/eslint/eslint/commit/9b8990397b2d2ed70771bb0e2070261a0c41782c) fix: default value of accessor-pairs option in rule.d.ts file ([#​20024](https://github.com/eslint/eslint/issues/20024)) (Tanuj Kanti)
- [`6c07420`](https://github.com/eslint/eslint/commit/6c074206ae0eae4816197a57648b415832a20e1d) fix: fix spurious failure in neostandard integration test ([#​20023](https://github.com/eslint/eslint/issues/20023)) (Kirk Waiblinger)
- [`676f4ac`](https://github.com/eslint/eslint/commit/676f4acaaed6e4f6ffe0c2e21272d4702b311a7b) fix: allow scientific notation with trailing zeros matching exponent ([#​20002](https://github.com/eslint/eslint/issues/20002)) (Sweta Tanwar)
##### Documentation
- [`0b4a590`](https://github.com/eslint/eslint/commit/0b4a590333b73a21b9e0ddc98462680e09fe3232) docs: make rulesdir deprecation clearer ([#​20018](https://github.com/eslint/eslint/issues/20018)) (Domenico Gemoli)
- [`327c672`](https://github.com/eslint/eslint/commit/327c67256fbeaf9d5e365802c2a11f5d32a16522) docs: Update README (GitHub Actions Bot)
- [`bf26229`](https://github.com/eslint/eslint/commit/bf2622991f5b892610a8c3343ff16519e5fd7a79) docs: Fix typo in core-concepts/index.md ([#​20009](https://github.com/eslint/eslint/issues/20009)) (Tobias Hernstig)
- [`2309327`](https://github.com/eslint/eslint/commit/2309327554acbf011f0d17e7b36fdd68e43adf3a) docs: fix typo in the "Configuring Rules" section ([#​20001](https://github.com/eslint/eslint/issues/20001)) (ghazi-git)
- [`2b87e21`](https://github.com/eslint/eslint/commit/2b87e21321422c120c2248dae25cac7f9eec0f29) docs: \[no-else-return] clarify sample code. ([#​19991](https://github.com/eslint/eslint/issues/19991)) (Yuki Takada (Yukinosuke Takada))
- [`c36570c`](https://github.com/eslint/eslint/commit/c36570c6657c2a92dbb4f09a8166a4d9909a091a) docs: Update README (GitHub Actions Bot)
##### Chores
- [`f19ad94`](https://github.com/eslint/eslint/commit/f19ad9493e0ca04c2c1455fbb3402eaad993a8be) chore: upgrade to `@eslint/js@9.34.0` ([#​20030](https://github.com/eslint/eslint/issues/20030)) (Francesco Trotta)
- [`b48fa20`](https://github.com/eslint/eslint/commit/b48fa20034e53bc65d1a58f3d834705e3087b00c) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`4bce8a2`](https://github.com/eslint/eslint/commit/4bce8a250262ec47207bc260581f979e40c86bda) chore: package.json update for eslint-config-eslint release (Jenkins)
- [`0c9999c`](https://github.com/eslint/eslint/commit/0c9999c2a682151cf13bb3a4f8916930678c2f9b) refactor: prefer default options in `grouped-accessor-pairs` ([#​20028](https://github.com/eslint/eslint/issues/20028)) (루밀LuMir)
- [`d503f19`](https://github.com/eslint/eslint/commit/d503f1981354c7b86e423879846c61e0405af8fe) ci: fix `stale.yml` ([#​20010](https://github.com/eslint/eslint/issues/20010)) (루밀LuMir)
- [`e2dc67d`](https://github.com/eslint/eslint/commit/e2dc67d8b028147de4da35c64efe1d74c9f6a883) ci: centralize `stale.yml` ([#​19994](https://github.com/eslint/eslint/issues/19994)) (루밀LuMir)
- [`7093cb8`](https://github.com/eslint/eslint/commit/7093cb8f590ec2a1b5364d7b5687e9b5f4e06f8a) ci: bump actions/checkout from 4 to 5 ([#​20005](https://github.com/eslint/eslint/issues/20005)) (dependabot\[bot])
### [`v9.33.0`](https://github.com/eslint/eslint/releases/tag/v9.33.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.32.0...v9.33.0)
##### Features
- [`e07820e`](https://github.com/eslint/eslint/commit/e07820e66fd1fceaf2620dc931154955a706cc0f) feat: add global object access detection to no-restricted-globals ([#​19939](https://github.com/eslint/eslint/issues/19939)) (sethamus)
- [`90b050e`](https://github.com/eslint/eslint/commit/90b050ec11557cab08b6be9f05fabf97dba6a63d) feat: support explicit resource management in `one-var` ([#​19941](https://github.com/eslint/eslint/issues/19941)) (Sweta Tanwar)
##### Bug Fixes
- [`732433c`](https://github.com/eslint/eslint/commit/732433c4fb023f45154b825cdc8cdaf1979d4336) fix: allow any type for `meta.docs.recommended` in custom rules ([#​19995](https://github.com/eslint/eslint/issues/19995)) (Francesco Trotta)
- [`e8a6914`](https://github.com/eslint/eslint/commit/e8a6914a249d036e12494004e586b2a2b6e104d1) fix: Fixed potential bug in check-emfile-handling.js ([#​19975](https://github.com/eslint/eslint/issues/19975)) (諏訪原慶斗)
##### Documentation
- [`34f0723`](https://github.com/eslint/eslint/commit/34f0723e2d0faf8ac8dc95ec56e6d181bd6b67f2) docs: playground button for TypeScript code example ([#​19671](https://github.com/eslint/eslint/issues/19671)) (Tanuj Kanti)
- [`dc942a4`](https://github.com/eslint/eslint/commit/dc942a47daf41228d69072c52f1be20789426862) docs: Update README (GitHub Actions Bot)
- [`5a4b6f7`](https://github.com/eslint/eslint/commit/5a4b6f74320b72f9b6ad8b30f5c463b2b71315af) docs: Update no-multi-assign.md ([#​19979](https://github.com/eslint/eslint/issues/19979)) (Yuki Takada (Yukinosuke Takada))
- [`247e156`](https://github.com/eslint/eslint/commit/247e15698e34919a0cd411842fb3e14ac7a8f1ba) docs: add missing let declarations in `no-plusplus` ([#​19980](https://github.com/eslint/eslint/issues/19980)) (Yuki Takada (Yukinosuke Takada))
- [`0d17242`](https://github.com/eslint/eslint/commit/0d17242b3c25c2ddf8363f4560641acd1ae82ca9) docs: Update README (GitHub Actions Bot)
- [`fa20b9d`](https://github.com/eslint/eslint/commit/fa20b9db8ff90ea9f0527118114dda17c656d095) docs: Clarify when to open an issue for a MR ([#​19974](https://github.com/eslint/eslint/issues/19974)) (Nicholas C. Zakas)
##### Build Related
- [`27fa865`](https://github.com/eslint/eslint/commit/27fa86551bd173387e29a139293de78b0e14f0f3) build: use `ESLint` class to generate formatter examples ([#​19972](https://github.com/eslint/eslint/issues/19972)) (Milos Djermanovic)
##### Chores
- [`4258046`](https://github.com/eslint/eslint/commit/425804602ecb9ee5f54d1c38a473cf20538420c5) chore: update dependency [@​eslint/js](https://github.com/eslint/js) to v9.33.0 ([#​19998](https://github.com/eslint/eslint/issues/19998)) (renovate\[bot])
- [`ad28371`](https://github.com/eslint/eslint/commit/ad283717ed4764a171120ca7c6cba82a78fa024c) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`06a22f1`](https://github.com/eslint/eslint/commit/06a22f154c08ea044b3172b357b226d34dfefc6a) test: resolve flakiness in --mcp flag test ([#​19993](https://github.com/eslint/eslint/issues/19993)) (Pixel998)
- [`54920ed`](https://github.com/eslint/eslint/commit/54920ed229693f23650dace6e567bf44413aaf98) test: switch to `Linter.Config` in `ESLintRules` type tests ([#​19977](https://github.com/eslint/eslint/issues/19977)) (Francesco Trotta)
### [`v9.32.0`](https://github.com/eslint/eslint/releases/tag/v9.32.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.31.0...v9.32.0)
#### Features
- [`1245000`](https://github.com/eslint/eslint/commit/1245000c5a81954d42f0c7eb670efe450c3bbad5) feat: support explicit resource management in core rules ([#​19828](https://github.com/eslint/eslint/issues/19828)) (fnx)
- [`0e957a7`](https://github.com/eslint/eslint/commit/0e957a7b5528f375a51e7c1a2fd1b03cdcd2af2d) feat: support typescript types in accessor rules ([#​19882](https://github.com/eslint/eslint/issues/19882)) (fnx)
#### Bug Fixes
- [`960fd40`](https://github.com/eslint/eslint/commit/960fd40dfd204af30726b49b6bec714fe49a606e) fix: Upgrade [@​eslint/js](https://github.com/eslint/js) ([#​19971](https://github.com/eslint/eslint/issues/19971)) (Nicholas C. Zakas)
- [`bbf23fa`](https://github.com/eslint/eslint/commit/bbf23fa2f1c6058f6cb5c9f2f32460a15e75e596) fix: Refactor reporting into FileReport ([#​19877](https://github.com/eslint/eslint/issues/19877)) (Nicholas C. Zakas)
- [`d498887`](https://github.com/eslint/eslint/commit/d4988872f375890bf677ce1a1d92a505085b51fa) fix: bump [@​eslint/plugin-kit](https://github.com/eslint/plugin-kit) to 0.3.4 to resolve vulnerability ([#​19965](https://github.com/eslint/eslint/issues/19965)) (Milos Djermanovic)
- [`f46fc6c`](https://github.com/eslint/eslint/commit/f46fc6c137c951bc73cf3bd9446053c1b11f769b) fix: report only global references in no-implied-eval ([#​19932](https://github.com/eslint/eslint/issues/19932)) (Nitin Kumar)
- [`7863d26`](https://github.com/eslint/eslint/commit/7863d26b7cfb03a81ec86f93439757ff60bf6afb) fix: remove outdated types in `ParserOptions.ecmaFeatures` ([#​19944](https://github.com/eslint/eslint/issues/19944)) (ntnyq)
- [`3173305`](https://github.com/eslint/eslint/commit/317330552e2d276221c7f2dd9c1516ad8b41cc3c) fix: update execScript message in no-implied-eval rule ([#​19937](https://github.com/eslint/eslint/issues/19937)) (TKDev7)
#### Documentation
- [`86e7426`](https://github.com/eslint/eslint/commit/86e7426e4463ca49ffa5c82e825ecb6aa19ca8a0) docs: Update README (GitHub Actions Bot)
#### Chores
- [`50de1ce`](https://github.com/eslint/eslint/commit/50de1ced9df2b1ee48ee6843c8cfe0f5d8edbc27) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`74f01a3`](https://github.com/eslint/eslint/commit/74f01a3f5905aaa0902837ced2425209c09c048f) ci: unpin `jiti` to version `^2.5.1` ([#​19970](https://github.com/eslint/eslint/issues/19970)) (루밀LuMir)
- [`2ab1381`](https://github.com/eslint/eslint/commit/2ab13813a7e7f3014c35490b351447ec43229951) ci: pin `jiti` to version 2.4.2 ([#​19964](https://github.com/eslint/eslint/issues/19964)) (Francesco Trotta)
- [`b7f7545`](https://github.com/eslint/eslint/commit/b7f75454695079f54b77fcdc9ebe3b9199d5ad30) test: switch to flat config mode in `SourceCode` tests ([#​19953](https://github.com/eslint/eslint/issues/19953)) (Milos Djermanovic)
- [`f5a35e3`](https://github.com/eslint/eslint/commit/f5a35e3b7cee17cd31fc02c24c3e74b42ee202bc) test: switch to flat config mode in eslint-fuzzer ([#​19960](https://github.com/eslint/eslint/issues/19960)) (Milos Djermanovic)
- [`e22af8c`](https://github.com/eslint/eslint/commit/e22af8c42d622d8d912ee7bedf49bf4283247fdc) refactor: use `CustomRuleDefinitionType` in `JSRuleDefinition` ([#​19949](https://github.com/eslint/eslint/issues/19949)) (Francesco Trotta)
- [`e855717`](https://github.com/eslint/eslint/commit/e85571730f1360464b7ee00695c678d551f9c643) chore: switch performance tests to hyperfine ([#​19919](https://github.com/eslint/eslint/issues/19919)) (Francesco Trotta)
- [`2f73a23`](https://github.com/eslint/eslint/commit/2f73a23655092a41780859ffe0a07c44a2f1b5f5) test: switch to flat config mode in `ast-utils` tests ([#​19948](https://github.com/eslint/eslint/issues/19948)) (Milos Djermanovic)
- [`c565a53`](https://github.com/eslint/eslint/commit/c565a530f50c96dacd44e096f7d531b073aa4dc7) chore: exclude `further_reading_links.json` from Prettier formatting ([#​19943](https://github.com/eslint/eslint/issues/19943)) (Milos Djermanovic)
### [`v9.31.0`](https://github.com/eslint/eslint/releases/tag/v9.31.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.30.1...v9.31.0)
#### Features
- [`35cf44c`](https://github.com/eslint/eslint/commit/35cf44c22e36b1554486e7a75c870e86c10b83f8) feat: output full actual location in rule tester if different ([#​19904](https://github.com/eslint/eslint/issues/19904)) (ST-DDT)
- [`a6a6325`](https://github.com/eslint/eslint/commit/a6a63259de6cb5642f69c7be429554bbcedca4c0) feat: support explicit resource management in `no-loop-func` ([#​19895](https://github.com/eslint/eslint/issues/19895)) (Milos Djermanovic)
- [`4682cdc`](https://github.com/eslint/eslint/commit/4682cdc6960279ee17f23899fbab6f58d881eadf) feat: support explicit resource management in `no-undef-init` ([#​19894](https://github.com/eslint/eslint/issues/19894)) (Milos Djermanovic)
- [`5848216`](https://github.com/eslint/eslint/commit/58482165eaf597cc5c58216a956c301ae87520b3) feat: support explicit resource management in `init-declarations` ([#​19893](https://github.com/eslint/eslint/issues/19893)) (Milos Djermanovic)
- [`bb370b8`](https://github.com/eslint/eslint/commit/bb370b8e79f65ee32d9d89ecf249fb74a141ad22) feat: support explicit resource management in `no-const-assign` ([#​19892](https://github.com/eslint/eslint/issues/19892)) (Milos Djermanovic)
#### Bug Fixes
- [`07fac6c`](https://github.com/eslint/eslint/commit/07fac6cafa0426b4d1ea12d9001f3955f19b286d) fix: retry on EMFILE when writing autofix results ([#​19926](https://github.com/eslint/eslint/issues/19926)) (TKDev7)
- [`28cc7ab`](https://github.com/eslint/eslint/commit/28cc7abbb72b29b1cac6fc4253646a7839586064) fix: Remove incorrect RuleContext types ([#​19910](https://github.com/eslint/eslint/issues/19910)) (Nicholas C. Zakas)
#### Documentation
- [`664cb44`](https://github.com/eslint/eslint/commit/664cb44ab03785bd200a792607a7e20faa2d4b28) docs: Update README (GitHub Actions Bot)
- [`40dbe2a`](https://github.com/eslint/eslint/commit/40dbe2a43f83d366e9026faec70293512fb61ca2) docs: fix mismatch between `globalIgnores()` code and text ([#​19914](https://github.com/eslint/eslint/issues/19914)) (MaoShizhong)
- [`5a0069d`](https://github.com/eslint/eslint/commit/5a0069d60815246cf24e1c96125540792c2507ef) docs: Update README (GitHub Actions Bot)
- [`fef04b5`](https://github.com/eslint/eslint/commit/fef04b5c7fea99362d67b31b8e98cd4914020ed3) docs: Update working on issues info ([#​19902](https://github.com/eslint/eslint/issues/19902)) (Nicholas C. Zakas)
#### Chores
- [`3ddd454`](https://github.com/eslint/eslint/commit/3ddd454c1c73294e5af7905d60d03fac162f1b3e) chore: upgrade to `@eslint/js@9.31.0` ([#​19935](https://github.com/eslint/eslint/issues/19935)) (Francesco Trotta)
- [`d5054e5`](https://github.com/eslint/eslint/commit/d5054e5454a537e9ade238c768c262c6c592cbc1) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`0f4a378`](https://github.com/eslint/eslint/commit/0f4a3781fe7c11fad7b206c3c694655486ddd187) chore: update eslint ([#​19933](https://github.com/eslint/eslint/issues/19933)) (renovate\[bot])
- [`76c2340`](https://github.com/eslint/eslint/commit/76c2340c368f96db77439b5cd1df0196cc39bf3e) chore: bump mocha to v11 ([#​19917](https://github.com/eslint/eslint/issues/19917)) (루밀LuMir)
### [`v9.30.1`](https://github.com/eslint/eslint/releases/tag/v9.30.1)
[Compare Source](https://github.com/eslint/eslint/compare/v9.30.0...v9.30.1)
#### Bug Fixes
- [`e91bb87`](https://github.com/eslint/eslint/commit/e91bb870f8c6e38baa508f18048cd2a2d04b8b9c) fix: allow separate default and named type imports ([#​19899](https://github.com/eslint/eslint/issues/19899)) (xbinaryx)
#### Documentation
- [`ab7c625`](https://github.com/eslint/eslint/commit/ab7c62598a9fca498e495d45029ae92fd5fb9bf3) docs: Update README (GitHub Actions Bot)
- [`dae1e5b`](https://github.com/eslint/eslint/commit/dae1e5bb27db0e846efbe3026210013b42817838) docs: update jsdoc's link ([#​19896](https://github.com/eslint/eslint/issues/19896)) (JamesVanWaza)
#### Chores
- [`b035f74`](https://github.com/eslint/eslint/commit/b035f747c6e6d1c7a299c90b0ed0b8109cf24a53) chore: upgrade to `@eslint/js@9.30.1` ([#​19906](https://github.com/eslint/eslint/issues/19906)) (Francesco Trotta)
- [`b3dbc16`](https://github.com/eslint/eslint/commit/b3dbc16563cb7036d75edff9814e17053a645321) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
### [`v9.30.0`](https://github.com/eslint/eslint/releases/tag/v9.30.0)
[Compare Source](https://github.com/eslint/eslint/compare/v9.29.0...v9.30.0)
#### Features
- [`52a5fca`](https://github.com/eslint/eslint/commit/52a5fcaa4e0bb4e55c014c20ed47d6c93b107635) feat: Support `basePath` property in config objects ([#​19879](https://github.com/eslint/eslint/issues/19879)) (Milos Djermanovic)
- [`4ab4482`](https://github.com/eslint/eslint/commit/4ab44823df4d4b47d3650da949077a0551e7579e) feat: add `allowSeparateTypeImports` option to `no-duplicate-imports` ([#​19872](https://github.com/eslint/eslint/issues/19872)) (sethamus)
- [`b8a7e7a`](https://github.com/eslint/eslint/commit/b8a7e7aeb5f0ed2e1670771ab4dda6fd723d96eb) feat: throw error when column is negative in `getIndexFromLoc` ([#​19831](https://github.com/eslint/eslint/issues/19831)) (루밀LuMir)
#### Bug Fixes
- [`6a0f164`](https://github.com/eslint/eslint/commit/6a0f164543bf8461d6a27a740c9e08aa77cbe42d) fix: handle `null` type `loc` in `getIndexFromLoc` method ([#​19862](https://github.com/eslint/eslint/issues/19862)) (루밀LuMir)
- [`3fbcd70`](https://github.com/eslint/eslint/commit/3fbcd704a0b2aef2a6c1fc34d2bc4b35f6425067) fix: update error message for `no-restricted-properties` ([#​19855](https://github.com/eslint/eslint/issues/19855)) (Tanuj Kanti)
- [`7ef4cf7`](https://github.com/eslint/eslint/commit/7ef4cf76610d42727a404e495ac6d47868cf5040) fix: remove unnecessary semicolon from fixes ([#​19857](https://github.com/eslint/eslint/issues/19857)) (Francesco Trotta)
- [`7dabc38`](https://github.com/eslint/eslint/commit/7dabc38a8406d470fb2389eec2f0ad1ad214173e) fix: use `process.version` in `--env-info` ([#​19865](https://github.com/eslint/eslint/issues/19865)) (TKDev7)
#### Documentation
- [`8662ed1`](https://github.com/eslint/eslint/commit/8662ed1f6debc358e22812b145e117aa4a907d78) docs: adopt eslint-stylistic sub packages related changes ([#​19887](https://github.com/eslint/eslint/issues/19887)) (ntnyq)
- [`20158b0`](https://github.com/eslint/eslint/commit/20158b09db3430cf00b202ba8c25ce874bbaf00a) docs: typo in comment for unused variables handling ([#​19870](https://github.com/eslint/eslint/issues/19870)) (leopardracer)
- [`ebfb5b4`](https://github.com/eslint/eslint/commit/ebfb5b46136c4d737c9783333e3057421d1a0bef) docs: Fixed Typo in configuration-files.md ([#​19873](https://github.com/eslint/eslint/issues/19873)) (0-20)
- [`4112fd0`](https://github.com/eslint/eslint/commit/4112fd09531092e9651e9981205bcd603dc56acf) docs: clarify that boolean is still allowed for rule `meta.deprecated` ([#​19866](https://github.com/eslint/eslint/issues/19866)) (Bryan Mishkin)
#### Chores
- [`2b6491c`](https://github.com/eslint/eslint/commit/2b6491cd4b8eec44d4a3f8dea1b71151e8dd0230) chore: upgrade to `@eslint/js@9.30.0` ([#​19889](https://github.com/eslint/eslint/issues/19889)) (Francesco Trotta)
- [`5a5d526`](https://github.com/eslint/eslint/commit/5a5d5261037fdf84a91f2f22d3726d58572453f4) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`eaf8a41`](https://github.com/eslint/eslint/commit/eaf8a418af32b3190494e4a2284533353c28ccfa) chore: Correct typos in linter tests ([#​19878](https://github.com/eslint/eslint/issues/19878)) (kilavvy)
</details>
<details>
<summary>mui/material-ui (@​mui/icons-material)</summary>
### [`v7.3.6`](https://github.com/mui/material-ui/blob/HEAD/CHANGELOG.md#736)
[Compare Source](https://github.com/mui/material-ui/compare/v7.3.5...v7.3.6)
<!-- generated comparing v7.3.5..master -->
*Dec 3, 2025*
A big thanks to the 22 contributors who made this release possible.
##### [@​mui/material](https://github.com/mui/material)@​7.3.6
- \[Accordion] Move properties to the AccordionOwnProps interface ([#​47348](https://github.com/mui/material-ui/issues/47348)) [@​Aleksan4e3](https://github.com/Aleksan4e3)
- \[Autocomplete] Remove unnecessary `filterSelectedOptions` dependency from `syncHighlightedIndex` useCallback ([#​47378](https://github.com/mui/material-ui/issues/47378)) [@​ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[Autocomplete] Fix input caret not showing when focusing after chip navigation ([#​47249](https://github.com/mui/material-ui/issues/47249)) [@​vrachuri28](https://github.com/vrachuri28)
- \[Autocomplete] Fix ArrowLeft crash when value is not set with single-value rendering ([#​47214](https://github.com/mui/material-ui/issues/47214)) [@​rithik56](https://github.com/rithik56)
- \[Button] Fix running formAction when passed ([#​47185](https://github.com/mui/material-ui/issues/47185)) [@​sai6855](https://github.com/sai6855)
- \[Chip] Remove leftover closing parenthesis in CSS class key ([#​47345](https://github.com/mui/material-ui/issues/47345)) [@​ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[ListItem] Add `secondaryAction` slot to `ListItem` ([#​47399](https://github.com/mui/material-ui/issues/47399)) [@​sai6855](https://github.com/sai6855)
- \[NumberField] Fix scroll behavior ([#​47397](https://github.com/mui/material-ui/issues/47397)) [@​oliviertassinari](https://github.com/oliviertassinari)
- \[Select] Fix keyboard navigation while rendering in shadow DOM ([#​47380](https://github.com/mui/material-ui/issues/47380)) [@​xBlizZer](https://github.com/xBlizZer)
- \[Select] Fix cannot pass certain event handlers ([#​47366](https://github.com/mui/material-ui/issues/47366)) [@​ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[Slider] Accept readonly array for `marks` prop ([#​47370](https://github.com/mui/material-ui/issues/47370)) [@​pcorpet](https://github.com/pcorpet)
- \[Snackbar] Avoid unnecessary `ownerState` spread into `useSnackbar` ([#​47373](https://github.com/mui/material-ui/issues/47373)) [@​ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- \[TextField] Allow custom props in slot props via TS module augmentation ([#​47367](https://github.com/mui/material-ui/issues/47367)) [@​kumarvishwajeettrivedi](https://github.com/kumarvishwajeettrivedi)
- \[Tabs] Fix Arrow key navigation failing when component is rendered in shadow DOM ([#​47178](https://github.com/mui/material-ui/issues/47178)) [@​sai6855](https://github.com/sai6855)
- Fix typings for theme `applyStyles` with custom color schemes ([#​47242](https://github.com/mui/material-ui/issues/47242)) [@​akankshahu](https://github.com/akankshahu)
##### [@​mui/system](https://github.com/mui/system)@​7.3.6
- Fix unwanted attribute on DOM from InitColorSchemeScript `class` attribute ([#​47200](https://github.com/mui/material-ui/issues/47200)) [@​siriwatknp](https://github.com/siriwatknp)
##### [@​mui/lab](https://github.com/mui/lab)@​7.3.6
- \[Masonry] Fix layout flicker and single column issue ([#​43903](https://github.com/mui/material-ui/issues/43903)) [@​Fanzzzd](https://github.com/Fanzzzd)
##### Docs
- Fix default theme viewer styling ([#​47400](https://github.com/mui/material-ui/issues/47400)) [@​sai6855](https://github.com/sai6855)
- Remove repetitive words ([#​47384](https://github.com/mui/material-ui/issues/47384)) [@​rifeplight](https://github.com/rifeplight)
- Fix link to Portal API docs ([#​47383](https://github.com/mui/material-ui/issues/47383)) [@​ZeeshanTamboli](https://github.com/ZeeshanTamboli)
- Remove mentions of MUI Base from Material UI docs ([#​47324](https://github.com/mui/material-ui/issues/47324)) [@​mapache-salvaje](https://github.com/mapache-salvaje)
- Update CSP guidance ([#​47342](https://github.com/mui/material-ui/issues/47342)) [@​rossdakin](https://github.com…
Prerequisites checklist
What is the purpose of this pull request? (put an "X" next to an item)
[ ] Documentation update
[ ] Bug fix (template)
[ ] New rule (template)
[ ] Changes an existing rule (template)
[ ] Add autofix to a rule
[ ] Add a CLI option
[X] Add something to the core
[ ] Other, please explain:
closes #3565
What changes did you make? (Give an overview)
This pull request implements eslint/rfcs#129, featuring multithread linting and option modules.
Is there anything you'd like reviewers to focus on?
Testing the prototype
To test this in a local package:
Debug Messages
These are some interesting debug messages.
Number of enumerated files, time spent to enumerate files in the main thread, and effective number of worker threads:
Alternatively, if no concurrency is used:
Time to load dependencies in a worker thread:
Additional time to initialize a worker thread after dependencies are loaded:
Time to load a config array in a worker thread. It takes long to load a config array the first time, successive loads use the cache and are much faster:
Time to read a file to be linted:
Time spent by the linter on a file:
Total time spent on a file in a worker thread. This includes loading the config array, reading the file, linting the file, and a little overhead:
Benchmark References
ESLint
Repo: https://github.com/eslint/eslint
Files: <1000
Commands:
git clone --no-tags --single-branch https://github.com/eslint/eslint -b rfc129 cd eslint npm i npm --prefix docs i node bin/eslint.js --concurrency=autoOpenUI5
Repo: https://github.com/mauriciolauffer/openui5/tree/eslint-v9
Files: ~12500
Commands:
git clone --no-tags --single-branch https://github.com/mauriciolauffer/openui5 -b eslint-v9 cd openui5 npm i -D eslint/eslint#rfc129 node node_modules/eslint/bin/eslint.js --concurrency=auto src --quietcore-js
Repo: https://github.com/zloirock/core-js
Files: ~8000
Commands:
Archived Topics
Details
#### `ESLint#getRulesMetaForResults()`This section describes three different solutions, each implemented in its own branch, for the handling of
ESLint#getRulesMetaForResults()as discussed in the RFC (seeESLint#getRulesMetaForResults()).To recap, the
findFilesfunction currently loads config files for files it finds by resolving glob patterns, and it will continue to do so in multithread mode. But if a file path is passed explicitly (i.e. not matched by a glob pattern), thenfindFilesdoes not try to load a config file for it. The problem with thegetRulesMetaForResultsmethod in its present implementation, is that this method requires config files for all linted files to have been loaded in the current thread. This means that in order forgetRulesMetaForResultsto continue working in multithread mode, either config files for all explicitly passed files must be loaded in the controlling thread — additionally to worker threads — during thelintFilesinvocation, orgetRulesMetaForResultsmust be changed to have the information it requires calculated by worker threads.rfc129 (this pull request)
This is based on Solution 1 shown in the RFC. This implementation ensures that the config files for all enumerated files are loaded in the controlling thread while worker threads are running. If
getRulesMetaForResultsis not called afterlintFiles, it's possible that some config files will be loaded unnecessarily.rfc129-b
Based on eslint/rfcs#129 (comment). All config files are loaded by
findFilesbefore the worker threads are created, without using limited concurrency. This is similar to the previous implementation in terms of performance, but it simplifies the code and ensures that later access to config files can be done synchronously.rfc129-c
Based on Solution 2 shown in the RFC.
Rules
metaobjects andusedDeprecatedRulesfor all results are precalculated in the worker threads. This solution requires some important refactiongs and it adds complexity to the existing logic, for example an additional field on theESLintinstance to store rulesmetaobjects or aBroadcastChannelto send warnings to the main thread. The advantage is that config files for explicitly passed filenames don't need to be loaded in the controlling thread. This yields a measurable performance improvement especially when filenames are passed explicitly tolintFiles.Design Questions
Handling--concurrency=1Running ESLint from the CLI with
--concurrency=1performs worse than linting in the main thread (i.e. without the--concurrencyflag or with--concurrency=off) because spinning up a worker thread adds extra overhead.That said, a concurrency value of 1 can be useful for testing or debugging, and it could make sense when using the using the Node.js API, because if other asynchronous tasks are running in the main thread, linting in a separate thread can improve performance. However, the CLI already launches ESLint in its own dedicated process with no competing async work, so specifying
--concurrency=1there will always degrade performance.To avoid confusion, we could forbid--concurrency=1when ESLint is invoked via the CLI. Another option could be emitting a warning wheneverconcurrencyis set to 1, regardless of how ESLint is started. What do you think is the best way to handle this case?ShouldESLint.fromOptionModule()accept Unix pathnames?Per the RFC,
ESLint.fromOptionModule()accepts only a URL. I have realized that the original design could be adapted to also accept a Unix pathname like other APIs do. For example, dynamic imports can use absolute paths (import("/path/to/file.js")) or relative paths (import("./file.js")) besides file URLs. This would be just a minor enhancement to the developer experience, as file paths would continue to be converted to file URLs behind the scenes. ShouldESLint.fromOptionModule()accept Unix pathnames besides URLs? If so, should relative filenames be allowed and resolved from the current working directory?Should TypeScript option modules be loaded like TypeScript config files?Thanks to built-in type stripping, Node.js 24 permits loading TypeScript files as option modules out of the box, with a URL like
file:///path/to/eslint-options.ts. Bun and Deno recognize TypeScript syntax natively. Nonetheless, if we wish to align the way option modules are loaded with how config files are loaded, we could consider allowing native loading of TypeScript files behind a new feature flag, similar tounstable_native_nodejs_ts_config, and using jiti otherwise. I'm not sure how useful this approach would be in practice, and I doubt it's worth the added complexity, but it's good to discuss it in advance. Once option modules are released, changing the way files are loaded will be probably a breaking change.Should theconcurrencyoption be forbidden in theESLintconstructor?Another point raised in the RFC was the strategy to guarantee that all options are serializable when
concurrencyis enabled. One solution that we did not consider is to completely disallow theconcurrencyoption in theESLintconstructor for users. This would imply that the only way to specifyconcurrencywould be through an option module. While this would eliminate the need to check the options whenconcurrencyis specified, it would also sacrifice usability, so I'm not sure if we want to do this.