fix(linter/eslint/no-unused-vars): respect rest params after-used option - #26579
Conversation
Params before a rest parameter were incorrectly reported as unused under args: 'after-used' because the check only looked at params.items and ignored params.rest (rest params are stored separately in FormalParameters.rest). Closes oxc-project#26562 Signed-off-by: Bartok9 <259807879+Bartok9@users.noreply.github.com>
Merging this PR will not alter performance
Comparing Footnotes
|
|
@codex review |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 60c50c77aa
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
# Oxlint ### 🚀 Features - afe950d linter/react: Update lint rules to accomodate changes in React 19.3 (#26571) (Connor Shea) ### 🐛 Bug Fixes - fb87ed7 linter/unicorn/prefer-array-flat-map: Report `.filter().flatMap()` chains (#26626) (camc314) - 336b654 linter/unicorn/prefer-at: Report single-character substring calls (#26623) (camc314) - a5bba6d linter/eslint/no-unused-vars: Respect rest params after-used option (#26579) (Bartok) - c1470a2 linter/eslint/no-unused-vars: Preserve ambient implicit exports (#26582) (Dex Hunter) - 9a469d2 linter/unicorn/prefer-global-this: Preserve window event method references (#26611) (Dex Hunter) - aaff758 linter/unicorn/prefer-default-parameters: Report violation for `??=` and `||=` (#26607) (Bartok) - 2bed25a linter/unicorn/prefer-array-flat: Skip plain `concat` normalization (#26604) (im10furry) - 72bc7f2 oxlint: Replace backlashes path for "no js runtime" diagnostic (#26599) (Sysix) - 1aa5ec1 linter/typescript/prefer-for-of: Handle computed collections (#26584) (camc314) - 1e90019 linter/typescript: Mark `no-unnecessary-type-parameters` and `prefer-find` suggestions as implemented (#26586) (Mikhail Baev) - 4231536 linter: Compare label text in runtime optimization assertion (#26526) (camc314) - 36d5534 linter: Include file path in diagnostic assertion (#26525) (camc314) - 31508b1 parser: Reject return types on constructor overloads (#26523) (camc314) ### ⚡ Performance - 1d681b0 linter/react/jsx-pascal-case: Avoid temporary name segment vector (#26531) (camc314) - 2ad7d49 linter/promise/catch-or-return: Avoid temporary formatting vectors (#26505) (camc314) - 203235b linter/jsx-a11y/no-static-element-interactions: Avoid role vector (#26504) (camc314) - 2e95167 linter/jsx-a11y/anchor-is-valid: Avoid temporary attribute vector (#26501) (camc314) - deafdba linter/react/exhaustive-deps: Avoid temporary dependency vector (#26502) (camc314) - 4f1627f linter/oxc/branches-sharing-code: Compute deletion spans lazily (#26500) (camc314) - c068fd2 linter/react/jsx-curly-brace-presence: Avoid newline position allocation (#26499) (camc314) - ed4357c linter/eslint/no-restricted-properties: Skip empty configurations (#26497) (camc314) - 92e41b7 linter/oxc/no-barrel-file: Iterate module requests directly (#26498) (camc314) - 5255ee3 linter/unicorn/prefer-single-call: Avoid temporary argument vector (#26494) (camc314) - 96ef365 linter/unicorn/prefer-includes: Reduce suggestion allocations (#26492) (camc314) - a71fd7f linter/unicorn/no-new-buffer: Avoid temporary argument vector (#26491) (camc314) - 11085e7 linter/jsdoc/require-yields: Short-circuit JSDoc checks (#26488) (camc314) - 9b1aff8 linter/unicorn/no-useless-undefined: Skip calls without trailing undefined (#26481) (camc314) - 1e5d5d7 linter/eslint/no-unused-vars: Skip absent global declaration checks (#26457) (camc314) - 403f899 linter/eslint/no-undef: Check globals once per unresolved name (#26456) (camc314) - 118adb0 linter/eslint/no-restricted-imports: Avoid redundant import scans (#26455) (camc314) - ab848f2 linter/eslint/no-useless-assignment: Skip tracking exported symbols (#26449) (camc314) - 1b6e409 linter/unicorn/prefer-object-from-entries: Avoid allocating configured paths (#26448) (camc314) - 2206875 linter/eslint/new-cap: Avoid unnecessary callee name allocations (#26447) (camc314) ### 📚 Documentation - b927e0a linter/typescript/await-thenable: Add missing lang for markdown doc comment (#26438) (Ari Perkkiö) # Oxfmt ### 🚀 Features - 586f27a formatter_core: Add `prefix_align` builder and `Tag::(Start|End)Prefix` (#26520) (leaysgur) - dc45cc3 formatter_test: Test Prettier dynamic snippet tests (#26469) (leaysgur) ### 🐛 Bug Fixes - d7e0c82 formatter: Keep an enum member's trailing suppress comment (#26549) (leaysgur) - d2fe01e formatter: Unify suppress comment behavior (#26547) (leaysgur) - d35d89f oxfmt: Skip shutdown delay on fixed Node 24 releases (#26518) (Pablo García) - aef8b4a formatter_css: Handle less-test-suites failures (#26513) (leaysgur) - 9dbddca formatter: Keep group flat for own-line comment in JSX (#26475) (leaysgur) - d226e6f formatter_yaml: Bump oxc-yaml-parser to 0.0.6 (#26472) (leaysgur) - 8b41fc0 formatter_yaml: Clamp `tab_width: 0` to 1 to keep semantics (#26471) (leaysgur) - dea2ba0 formatter_core: Do not panic with align(0) (#26468) (leaysgur) - bf1d3f6 formatter: Check `this_param` for simple parameters test (#26474) (leaysgur) - 33cdc84 formatter: Keep cast-target assignment and commented parameter patterns (#26429) (leaysgur) - 876fbe3 oxfmt: Expand `Fill` parts in tsx-in-vue (#26427) (leaysgur) ### 📚 Documentation - 66fda4f formatter: Update AGENTS.md comment handling (#26551) (leaysgur) - 41abcba formatter: Note why jsx-test-suite snippets stay off (#26515) (leaysgur)
Fix:
no-unused-varswithargs: after-usedincorrectly flagged normal parameters preceding a used rest parameter as unused. Rest params are stored inFormalParameters.rest(notitems), so the last-param check and the following-params scan both missed them.Closes #26562
AI-assisted; human-reviewed. Agent-Owner:sera