fix(linter/no-unused-vars): reportUsedIgnorePattern should not report used rest siblings#20108
Conversation
…rt used rest siblings
Merging this PR will not alter performance
Comparing Footnotes
|
There was a problem hiding this comment.
Pull request overview
This PR fixes a bug where { "ignoreRestSiblings": true, "reportUsedIgnorePattern": true } incorrectly reports used properties that were only ignored because they are rest-siblings (e.g., role in ({ role = "nav", ...props }) => ...). The fix refactors is_ignored to return an Option<IgnoreReason> (via the new Ignored struct) instead of bool, allowing the diagnostic logic to distinguish why a symbol was ignored and only trigger reportUsedIgnorePattern for NamePattern-based ignores.
Changes:
- Introduces a new
IgnoreReasonenum andIgnorednewtype wrapper inignored.rs, withFoundStatusupdated to carry a reason. - Updates
is_ignoredand related helper functions to returnIgnoredwith a specificIgnoreReason. - Adds a comprehensive
test_ignoretest function inoxc.rsand re-enables a previously commented-out ESLint conformance test.
Reviewed changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
ignored.rs |
Core refactoring: new IgnoreReason enum, Ignored struct, updated FoundStatus and all is_ignored_* helpers |
mod.rs |
Updated run_on_symbol_internal to use Ignored and match on IgnoreReason |
usage.rs |
Adapted call sites to call .is_some() on Ignored where a bool was previously expected |
binding_pattern.rs |
Adapted is_ignored_array_destructured call to use .is_some() |
tests/oxc.rs |
New test_ignore test covering the fixed behavior and edge cases |
tests/eslint.rs |
Re-enables a previously commented-out foox in IIFE test |
snapshots/eslint_no_unused_vars@oxc-ignore.snap |
New snapshot for test_ignore |
snapshots/eslint_no_unused_vars@eslint.snap |
Updated snapshot for the re-enabled ESLint test |
6475b3a to
834f413
Compare
# Oxlint ### 🚀 Features - 04a5ce0 oxlint: Support `vite.config.ts` `.lint` field (#20214) (leaysgur) - 1735215 linter: Implement `react/no-clone-element` rule. (#20129) (connorshea) - 68e6f6f linter: Implement `react/no-react-children` rule. (#20104) (connorshea) - fe3b32e linter/plugins: Add `oxlint-plugin-eslint` package (#20009) (overlookmotel) ### 🐛 Bug Fixes - 05f6a09 linter/no-inline-comments: Deserialize rule options with serde (#20207) (camc314) - c7eb09d linter/default-case: Deserialize rule options with serde (#20206) (camc314) - f85e16c linter/plugins: Fix types for visitor compilation (#20203) (overlookmotel) - 44e24e0 linter/exhaustive-deps: Ignore type-only typeof deps (#20201) (camc314) - 0b04998 linter/no-fallthrough: Deserialize rule options with serde (#20192) (camc314) - a1031cb linter/new-cap: Deserialize rule options with serde (#20161) (camc314) - ad27fd6 linter: Add help messages to import plugin diagnostics (#20158) (John Costa) - 1340307 linter/plugins: Ensure `after` hooks always run (#20167) (overlookmotel) - c4812ec linter/plugins: Reset visitor compilation state if error during compilation (#20166) (overlookmotel) - 887eecc linter/plugins: Add license notice to `oxlint-plugin-eslint` package (#20164) (overlookmotel) - e1713a4 linter/plugins: Include common chunks in `oxlint-plugin-eslint` package (#20163) (overlookmotel) - a9acb2b linter: Check `globals` entry for `no-undef`, only check es2026 globals for `no-extend-native` and `no-constant-binary-expression` (#20089) (Sysix) - 5559f0d linter/no-unused-vars: `reportUsedIgnorePattern` should not report used rest siblings (#20108) (Don Isaac) - de7c0e2 linter/plugins: Correct error message for `markVariableAsUsed` (#20152) (overlookmotel) ### ⚡ Performance - 3a86427 linter/plugins: Pre-populate cache of `EnterExit` objects at startup (#20194) (overlookmotel) - d243391 linter/plugins: Replace arrays with `Uint8Array`s (#20190) (overlookmotel) - 8742f8b linter/plugins: Pre-populate cache of `VisitProp` objects (#20189) (overlookmotel) - 3061acb linter/plugins: Pre-populate cache of `EnterExit` objects (#20187) (overlookmotel) - c73912b linter/plugins: Free visit functions earlier (#20186) (overlookmotel) - d9f8ff4 linter/plugins: Faster reset of visitor state (#20185) (overlookmotel) - 42aff15 oxlint/lsp: Avoid computing diagnostics for non invoked code actions requests (#20080) (Sysix) ### 📚 Documentation - a080650 linter/plugins: Fix documentation of visitor compilation (#20202) (overlookmotel) - 542a04a linter: Add a link to the cyclomatic complexity Wikipedia article in `eslint/complexity` (#20174) (connorshea) # Oxfmt ### 🚀 Features - 95943aa oxfmt: Support `vite.config.*` `.fmt` field (#20197) (leaysgur) - 172fc07 oxfmt: .js/.ts config file support (#20135) (leaysgur) ### 🐛 Bug Fixes - e483569 oxfmt: Avoid double-escaping in css-in-js (#20211) (leaysgur) Co-authored-by: leaysgur <6259812+leaysgur@users.noreply.github.com>
What This PR Does
Fixes a bug where setting
{ "ignoreRestSiblings": true, "reportUsedIgnorePattern": true }would report used unpacked properties as a lint rule violation.Changes
is_ignoredto returnOption<IgnoreReason>instead of bool.Noneis not ignored,Someis ignored for some cause.reportUsedIgnorePatternis set