fix(linter/unicorn/prefer-at): handle checking all indexes correctly#23504
Conversation
Merge activity
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 71bb2f49c2
ℹ️ 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".
Merging this PR will not alter performance
Comparing Footnotes
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f0435ee8d4
ℹ️ 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".
…23504) Completes the remaining `unicorn/prefer-at` `checkAllIndexAccess` coverage for computed `+` indexes and broader single-argument `charAt` calls, matching upstream Unicorn behavior for the previously skipped test cases. Also addresses the follow-up from #23503 by ensuring `array.slice(-1)[0]` keeps the slice-specific diagnostic and fix instead of falling through to the generic index-access path. Refs #23498
f0435ee to
924b931
Compare
# Oxlint ### 💥 BREAKING CHANGES - 36009dd allocator: [**BREAKING**] `GetAllocator::allocator` take `&self` (#23676) (overlookmotel) ### 🚀 Features - ff65285 linter: `no-restricted-globals` add missing upstream options (#23663) (Sysix) - 7b8bd89 linter/typescript: Implement suggestion for `no-unnecessary-type-constraint` rule (#23646) (Mikhail Baev) - 0dc2405 linter: Add schema for `eslint/no-restricted-properties` (#23619) (Sysix) - b638d0e linter: Add schema for `node/callback-return` (#23615) (Sysix) - eb8bedc linter: Add schema for `import/extensions` (#23557) (WaterWhisperer) - 46f3625 linter: Implement node/no-sync rule (#23589) (fujitani sora) - b01739a linter: Add schema for `unicorn/numeric-separators-style` (#23554) (Mikhail Baev) - 68afd2a linter/node: Implement `no-mixed-requires` rule (#23539) (fujitani sora) - 59d8893 linter: `unicorn/numeric-separators-style` support missing options (#23524) (Sysix) - a421215 linter: Add schema for `eslint/prefer-destructuring` (#23410) (WaterWhisperer) - 84438be linter/jsdoc: Added missing options to `require-param-description` (#23416) (kapobajza) - c145b72 linter/jsdoc/require-param-type: Implement fixer (#23513) (camc314) - 51910df linter/jsdoc: Add missing options to `require-param-type` rule (#23418) (kapobajza) - e90925f linter/unicorn: Implement prefer-number-coercion rule (#23497) (Shekhu☺️ ) - dd1c866 linter/vue: Implement no-async-in-computed-properties rule (#23493) (bab) - b02444e linter: Add schema for `react/jsx-no-script-url` (#23475) (WaterWhisperer) - 53509a8 minifier: Treeshake pure typed arrays and Set/Map array literals (#23469) (Dunqing) - a8dce46 linter/unicorn: Implement `max-nested-calls` rule (#23461) (arieleli01212) ### 🐛 Bug Fixes - b1948a1 linter/radix: Avoid panic on `parseInt` with a spread radix argument (#23623) (Jerry Zhao) - f28ccfd linter/prefer-query-selector: Use a compound selector for multiple classes (#23628) (Jerry Zhao) - 13f2970 linter/prefer-numeric-literals: Avoid panic on `parseInt` with a spread radix argument (#23624) (Jerry Zhao) - 57612b3 linter: Report invalid capitalized-comments ignore patterns (#23608) (camc314) - 800ee2a linter/consistent-vitest-vi: Preserve import aliases when rewriting the import (#23568) (Yunfei He) - f78b5e1 linter/consistent-indexed-object-style: Don't leak a stray comma into the value type (#23566) (Yunfei He) - 6b104e8 linter/radix: Detect a trailing comma only after the argument (#23569) (Yunfei He) - 2de20cb linter/unicorn/prefer-at: Correct two-argument `slice().pop()` index (#23565) (Yunfei He) - de778ec linter: `unicorn/numeric-separators-style` preserve dot for floats without decial part (#23553) (Sysix) - 651027c linter/curly: Remove only the block's own braces (#23580) (Yunfei He) - 687e835 linter/array-type: Parenthesize a conditional-type element (#23579) (Yunfei He) - 9c80dff linter/unicorn/no-unnecessary-await: Don't paste operators into invalid syntax (#23556) (Yunfei He) - 46e1463 linter/no-compare-neg-zero: Delete the `-` of a parenthesized `-0` (#23578) (Yunfei He) - d172a97 linter/unicorn/prefer-math-trunk: Skip fixer for LHS with side effects (#23548) (camc314) - 1c3a9bd linter/unicorn/prefer-negative-index: Don't report `Array#with` (#23518) (Yunfei He) - c17db5d linter/unicorn/prefer-spread: Don't report `.slice()` on non-array receivers (#23520) (Yunfei He) - 9cd0c2f linter/unicorn/prefer-date-now: Keep `BigInt` wrapper when fixing `BigInt(new Date())` (#23523) (Yunfei He) - 16bb890 linter/unicorn/prefer-array-flat: Skip non-array `flatMap` receivers (#23527) (Yunfei He) - 3e6f90f linter/unicorn/no-zero-fractions: Insert a space after any preceding keyword (#23529) (Yunfei He) - 79a7d69 linter/eslint/no-useless-assignment: Handle exceptional control-flow paths (#23544) (camc314) - e8e2741 linter/unicorn/prefer-math-min-max: Preserve operand source text in the fix (#23533) (Yunfei He) - f592154 linter/react/display-name: Ignore lowercase jsx helpers (#23510) (camc314) - df7612f linter/jsx-a11y/no-noninteractive-element-to-interactive-role: Allow custom roles config (#23507) (camc314) - 924b931 linter/unicorn/prefer-at: Handle checking all indexes correctly (#23504) (camc314) - ca9686b linter/unicorn/prefer-at: Report zero indexes (#23503) (camc314) - e96a4e3 linter/unicorn/explicit-length-check: Ignore optional chains (#23487) (camc314) - a303c23 linter/jsx-a11y: Align `anchor-is-valid` config with upstream (#23446) (camc314) - f27a6d1 linter: False positives with non `*.setTimeout` call in `no-confusing-set-timeout` (#23444) (camc314) ### ⚡ Performance - 8e0dd65 linter: Emit RuleEnum dispatch match once instead of per timing branch (#23499) (Boshen) - d5c7d99 linter/expect-expect: Avoid recompiling matches on every traversal (#23593) (camc314) - f191520 linter/no-useless-spread: Avoid collecting `Vec` before iterating (#23546) (camc314) - 79340d1 linter: Stream React lifecycle ancestors (#23545) (camc314) - 1923169 linter/eslint/max-classes: Gate rule by rule config threshold (#23509) (camc314) - 3f60de3 linter: Use bucketed dispatch for all files (#23452) (camc314) - 3699971 linter/typescript/no-unnecessary-parameter-property-assignment: Avoid temporary vec allocations (#23492) (camc314) - 4ef0ceb linter/eslint/no-useless-switch-case: Avoid temporary vec allocations (#23489) (camc314) - 2e09dd3 linter: Avoid JSX fragment child collections (#23486) (camc314) - f30a64c linter/oxc/branches-sharing-code: Borrow shared branch suggestion text (#23484) (camc314) - 097a317 linter/eslint/no-control-regex: Retain control regex candidates in place (#23482) (camc314) - b3a093d linter: Reuse rule dispatch buckets (#23450) (camc314) - 9f1a985 oxlint: Start Tokio only for LSP (#23447) (camc314) ### 📚 Documentation - 9e219de linter/plugins: Update usage instruction (#23495) (Tony) - b50bf4d linter: Remove manually written options doc for `eslint/arrow-body-style` (#23490) (Mikhail Baev) # Oxfmt ### 💥 BREAKING CHANGES - 36009dd allocator: [**BREAKING**] `GetAllocator::allocator` take `&self` (#23676) (overlookmotel) ### 🐛 Bug Fixes - f21ed2c formatter_json: Normalize CRLF for suppressed text (#23702) (leaysgur) - 7cd1737 formatter: Normalize CRLF for suppressed text (#23701) (leaysgur) - a36e444 formatter: Member chain panic when tail is merged with comment in dev build (#23698) (leaysgur) - 600d306 formatter: Preserve parens with default export and type cast (#23697) (leaysgur) - 61290f2 formatter: Single-member intersection/union type with comment formatting (#21915) (Leonabcd123) - 5a1b0b4 formatter: Parenthesize a type assertion used as the base of `**` (#23633) (Jerry Zhao) - 91827e2 formatter: Use `Ordering::reverse()` with `order: desc` for idempotency (#23543) (leaysgur) - 8fa7394 formatter_json: Handle wrapped error span (#23472) (leaysgur) - 37a34a1 oxfmt/lsp: Avoid newlines line ending changes (#23463) (Sysix) ### ⚡ Performance - 80f1697 formatter: Avoid arena copy for already-lowercase bigint literals (#23534) (Yunfei He) - 1a40b71 formatter: Avoid arena copy for borrowed numeric-literal text (#23512) (Yunfei He) - 12e4451 formatter: Avoid arena copy for borrowed string-literal text (#23465) (Yunfei He) Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
…23504) Completes the remaining `unicorn/prefer-at` `checkAllIndexAccess` coverage for computed `+` indexes and broader single-argument `charAt` calls, matching upstream Unicorn behavior for the previously skipped test cases. Also addresses the follow-up from #23503 by ensuring `array.slice(-1)[0]` keeps the slice-specific diagnostic and fix instead of falling through to the generic index-access path. Refs #23498
# Oxlint ### 💥 BREAKING CHANGES - 36009dd allocator: [**BREAKING**] `GetAllocator::allocator` take `&self` (#23676) (overlookmotel) ### 🚀 Features - ff65285 linter: `no-restricted-globals` add missing upstream options (#23663) (Sysix) - 7b8bd89 linter/typescript: Implement suggestion for `no-unnecessary-type-constraint` rule (#23646) (Mikhail Baev) - 0dc2405 linter: Add schema for `eslint/no-restricted-properties` (#23619) (Sysix) - b638d0e linter: Add schema for `node/callback-return` (#23615) (Sysix) - eb8bedc linter: Add schema for `import/extensions` (#23557) (WaterWhisperer) - 46f3625 linter: Implement node/no-sync rule (#23589) (fujitani sora) - b01739a linter: Add schema for `unicorn/numeric-separators-style` (#23554) (Mikhail Baev) - 68afd2a linter/node: Implement `no-mixed-requires` rule (#23539) (fujitani sora) - 59d8893 linter: `unicorn/numeric-separators-style` support missing options (#23524) (Sysix) - a421215 linter: Add schema for `eslint/prefer-destructuring` (#23410) (WaterWhisperer) - 84438be linter/jsdoc: Added missing options to `require-param-description` (#23416) (kapobajza) - c145b72 linter/jsdoc/require-param-type: Implement fixer (#23513) (camc314) - 51910df linter/jsdoc: Add missing options to `require-param-type` rule (#23418) (kapobajza) - e90925f linter/unicorn: Implement prefer-number-coercion rule (#23497) (Shekhu☺️ ) - dd1c866 linter/vue: Implement no-async-in-computed-properties rule (#23493) (bab) - b02444e linter: Add schema for `react/jsx-no-script-url` (#23475) (WaterWhisperer) - 53509a8 minifier: Treeshake pure typed arrays and Set/Map array literals (#23469) (Dunqing) - a8dce46 linter/unicorn: Implement `max-nested-calls` rule (#23461) (arieleli01212) ### 🐛 Bug Fixes - b1948a1 linter/radix: Avoid panic on `parseInt` with a spread radix argument (#23623) (Jerry Zhao) - f28ccfd linter/prefer-query-selector: Use a compound selector for multiple classes (#23628) (Jerry Zhao) - 13f2970 linter/prefer-numeric-literals: Avoid panic on `parseInt` with a spread radix argument (#23624) (Jerry Zhao) - 57612b3 linter: Report invalid capitalized-comments ignore patterns (#23608) (camc314) - 800ee2a linter/consistent-vitest-vi: Preserve import aliases when rewriting the import (#23568) (Yunfei He) - f78b5e1 linter/consistent-indexed-object-style: Don't leak a stray comma into the value type (#23566) (Yunfei He) - 6b104e8 linter/radix: Detect a trailing comma only after the argument (#23569) (Yunfei He) - 2de20cb linter/unicorn/prefer-at: Correct two-argument `slice().pop()` index (#23565) (Yunfei He) - de778ec linter: `unicorn/numeric-separators-style` preserve dot for floats without decial part (#23553) (Sysix) - 651027c linter/curly: Remove only the block's own braces (#23580) (Yunfei He) - 687e835 linter/array-type: Parenthesize a conditional-type element (#23579) (Yunfei He) - 9c80dff linter/unicorn/no-unnecessary-await: Don't paste operators into invalid syntax (#23556) (Yunfei He) - 46e1463 linter/no-compare-neg-zero: Delete the `-` of a parenthesized `-0` (#23578) (Yunfei He) - d172a97 linter/unicorn/prefer-math-trunk: Skip fixer for LHS with side effects (#23548) (camc314) - 1c3a9bd linter/unicorn/prefer-negative-index: Don't report `Array#with` (#23518) (Yunfei He) - c17db5d linter/unicorn/prefer-spread: Don't report `.slice()` on non-array receivers (#23520) (Yunfei He) - 9cd0c2f linter/unicorn/prefer-date-now: Keep `BigInt` wrapper when fixing `BigInt(new Date())` (#23523) (Yunfei He) - 16bb890 linter/unicorn/prefer-array-flat: Skip non-array `flatMap` receivers (#23527) (Yunfei He) - 3e6f90f linter/unicorn/no-zero-fractions: Insert a space after any preceding keyword (#23529) (Yunfei He) - 79a7d69 linter/eslint/no-useless-assignment: Handle exceptional control-flow paths (#23544) (camc314) - e8e2741 linter/unicorn/prefer-math-min-max: Preserve operand source text in the fix (#23533) (Yunfei He) - f592154 linter/react/display-name: Ignore lowercase jsx helpers (#23510) (camc314) - df7612f linter/jsx-a11y/no-noninteractive-element-to-interactive-role: Allow custom roles config (#23507) (camc314) - 924b931 linter/unicorn/prefer-at: Handle checking all indexes correctly (#23504) (camc314) - ca9686b linter/unicorn/prefer-at: Report zero indexes (#23503) (camc314) - e96a4e3 linter/unicorn/explicit-length-check: Ignore optional chains (#23487) (camc314) - a303c23 linter/jsx-a11y: Align `anchor-is-valid` config with upstream (#23446) (camc314) - f27a6d1 linter: False positives with non `*.setTimeout` call in `no-confusing-set-timeout` (#23444) (camc314) ### ⚡ Performance - 8e0dd65 linter: Emit RuleEnum dispatch match once instead of per timing branch (#23499) (Boshen) - d5c7d99 linter/expect-expect: Avoid recompiling matches on every traversal (#23593) (camc314) - f191520 linter/no-useless-spread: Avoid collecting `Vec` before iterating (#23546) (camc314) - 79340d1 linter: Stream React lifecycle ancestors (#23545) (camc314) - 1923169 linter/eslint/max-classes: Gate rule by rule config threshold (#23509) (camc314) - 3f60de3 linter: Use bucketed dispatch for all files (#23452) (camc314) - 3699971 linter/typescript/no-unnecessary-parameter-property-assignment: Avoid temporary vec allocations (#23492) (camc314) - 4ef0ceb linter/eslint/no-useless-switch-case: Avoid temporary vec allocations (#23489) (camc314) - 2e09dd3 linter: Avoid JSX fragment child collections (#23486) (camc314) - f30a64c linter/oxc/branches-sharing-code: Borrow shared branch suggestion text (#23484) (camc314) - 097a317 linter/eslint/no-control-regex: Retain control regex candidates in place (#23482) (camc314) - b3a093d linter: Reuse rule dispatch buckets (#23450) (camc314) - 9f1a985 oxlint: Start Tokio only for LSP (#23447) (camc314) ### 📚 Documentation - 9e219de linter/plugins: Update usage instruction (#23495) (Tony) - b50bf4d linter: Remove manually written options doc for `eslint/arrow-body-style` (#23490) (Mikhail Baev) # Oxfmt ### 💥 BREAKING CHANGES - 36009dd allocator: [**BREAKING**] `GetAllocator::allocator` take `&self` (#23676) (overlookmotel) ### 🐛 Bug Fixes - f21ed2c formatter_json: Normalize CRLF for suppressed text (#23702) (leaysgur) - 7cd1737 formatter: Normalize CRLF for suppressed text (#23701) (leaysgur) - a36e444 formatter: Member chain panic when tail is merged with comment in dev build (#23698) (leaysgur) - 600d306 formatter: Preserve parens with default export and type cast (#23697) (leaysgur) - 61290f2 formatter: Single-member intersection/union type with comment formatting (#21915) (Leonabcd123) - 5a1b0b4 formatter: Parenthesize a type assertion used as the base of `**` (#23633) (Jerry Zhao) - 91827e2 formatter: Use `Ordering::reverse()` with `order: desc` for idempotency (#23543) (leaysgur) - 8fa7394 formatter_json: Handle wrapped error span (#23472) (leaysgur) - 37a34a1 oxfmt/lsp: Avoid newlines line ending changes (#23463) (Sysix) ### ⚡ Performance - 80f1697 formatter: Avoid arena copy for already-lowercase bigint literals (#23534) (Yunfei He) - 1a40b71 formatter: Avoid arena copy for borrowed numeric-literal text (#23512) (Yunfei He) - 12e4451 formatter: Avoid arena copy for borrowed string-literal text (#23465) (Yunfei He) Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
Completes the remaining
unicorn/prefer-atcheckAllIndexAccesscoverage for computed+indexes and broader single-argumentcharAtcalls, matching upstream Unicorn behavior for the previously skipped test cases.Also addresses the follow-up from #23503 by ensuring
array.slice(-1)[0]keeps the slice-specific diagnostic and fix instead of falling through to the generic index-access path.Refs #23498