Skip to content

fix(linter/eslint/sort-keys): check computed identifier names - #27748

Merged
graphite-app[bot] merged 1 commit into
mainfrom
codex/fix-sort-keys-computed-identifiers
Oct 16, 2026
Merged

graphite-app[bot] merged 1 commit into
mainfrom
codex/fix-sort-keys-computed-identifiers

Conversation

@camc314

@camc314 camc314 commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Oxlint skipped computed identifiers, accepting {a: 1, [S]: 3, b: 2} where ESLint reports an ordering error. Compare their identifier names, including parenthesized keys, while keeping dynamic keys ineligible for automatic fixes.

Addresses report 19 (eslint/sort-keys) in #27746.

Copilot AI balanced review requested due to automatic review settings October 15, 2026 19:42

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

An organization owner can choose the repository organization as the billing source for reviews requested by members with a paid Copilot license. Learn about Copilot code review billing. Review the Copilot code review billing settings.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 15, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-15T19:45:21.133359Z b879c38 PR opened
â„đïļ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@github-actions github-actions Bot added the A-linter Area - Linter label Oct 15, 2026
@codspeed

codspeed Bot commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

Merging this PR will not alter performance

✅ 5 untouched benchmarks
âĐ 91 skipped benchmarks1


Comparing codex/fix-sort-keys-computed-identifiers (b879c38) with main (8f252a2)

Open in CodSpeed

Footnotes

  1. 91 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. â†Đ

@camc314 camc314 self-assigned this Oct 16, 2026
@camc314 camc314 added the 0-merge Merge with Graphite Merge Queue label Oct 16, 2026

camc314 commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor Author

Merge activity

Oxlint skipped computed identifiers, accepting `{a: 1, [S]: 3, b: 2}` where ESLint reports an ordering error. Compare their identifier names, including parenthesized keys, while keeping dynamic keys ineligible for automatic fixes.

Addresses report 19 (`eslint/sort-keys`) in #27746.
@graphite-app
graphite-app Bot force-pushed the codex/fix-sort-keys-computed-identifiers branch from b879c38 to b3cdaaf Compare October 16, 2026 10:45
@graphite-app
graphite-app Bot merged commit b3cdaaf into main Oct 16, 2026
34 checks passed
@graphite-app graphite-app Bot removed the 0-merge Merge with Graphite Merge Queue label Oct 16, 2026
@graphite-app
graphite-app Bot deleted the codex/fix-sort-keys-computed-identifiers branch October 16, 2026 10:48
graphite-app Bot pushed a commit that referenced this pull request Oct 19, 2026
# Oxlint
### ðŸ’Ĩ BREAKING CHANGES

- e3c1b11 ast: [**BREAKING**] Preserve lone surrogates in static property names (#27095) (Dunqing)
- a0a987c ast: [**BREAKING**] Preserve lone surrogates in static member names (#26677) (Dunqing)

### 🚀 Features

- 770ada4 linter: Mark vue 3 rules as recommended (#27717) (Cam McHenry)
- ba38c1d linter: Mark react/react-hooks rules as recommended (#27701) (Cam McHenry)
- d85a3ba linter: Mark promise rules as recommended (#27693) (Cam McHenry)
- e71c88a linter: Mark node rule as recommended (#27692) (Cam McHenry)
- 7213f61 linter: Mark nextjs rules as recommended (#27691) (Cam McHenry)
- d7c6b26 linter: Mark jsx-a11y rules as recommended (#27690) (Cam McHenry)
- 199dfdc linter: Mark jsdoc rules as recommended (#27689) (Cam McHenry)
- 780bff3 linter: Mark jest/vitest rules as recommended (#27672) (Cam McHenry)
- 6ae6859 linter: Mark import rules as recommended (#27671) (Cam McHenry)
- b7a1df3 linter: Mark unicorn rules as recommended (#27670) (Cam McHenry)
- c44a355 linter: Mark typescript rules as recommended from upstream (#27634) (Cam McHenry)
- 6b49dba linter: Mark eslint rules as recommended from upstream (#27632) (Cam McHenry)

### 🐛 Bug Fixes

- 7c47246 linter: Check module specifiers and string values that contain lone surrogates (#26717) (Dunqing)
- 782ab6e linter: Search string values without UTF-8 conversion (#26716) (Dunqing)
- 326904f linter/unicorn/no-useless-undefined: Allow `undefined` in `React.useRef` (#25027) (Chris Dokurno)
- f9cf165 linter/unicorn/prefer-spread: Ignore super method calls (#27868) (camc314)
- 00484e1 linter/eslint/prefer-const: Report destructuring assignments inside blocks (#27856) (camc314)
- 9c35461 linter/eslint/sort-vars: Report every out-of-order declaration (#27767) (camc314)
- 01e1c5e linter/unicorn/prefer-string-replace-all: Resolve regex variables (#27769) (camc314)
- 7f474d5 linter/eslint/no-loop-func: Detect writes after the loop (#27754) (camc314)
- 4b7fea6 linter/eslint/block-scoped-var: Ignore declarations without writes (#27760) (camc314)
- 2947917 linter/eslint/no-lonely-if: Check final else blocks in else-if chains (#27759) (camc314)
- fc039b5 linter/eslint/sort-imports: Check imports after other statements (#27749) (camc314)
- 1acba97 linter/unicorn/prefer-at: Report slice index reads once (#27762) (camc314)
- 6190e26 linter/eslint/prefer-arrow-callback: Ignore functions used as conditional tests (#27533) (Anzal Husain Abidi)
- b3cdaaf linter/eslint/sort-keys: Check computed identifier names (#27748) (camc314)
- 170e608 linter/unicorn/prefer-native-coercion-functions: Check object methods and function properties (#27750) (camc314)
- 9261df7 linter/unicorn/prefer-string-raw: Check object property values (#27758) (camc314)
- ddea86b linter/eslint/prefer-template: Report separate nested concatenations (#27764) (camc314)
- 2c67197 linter/eslint/no-unused-vars: Count conditional calls in sequences as uses (#27755) (camc314)
- 7f22fa0 linter/unicorn/prefer-regexp-test: Check logical operands in boolean contexts (#27761) (camc314)
- 3c44398 linter/eslint/class-methods-use-this: Count this in parameter defaults (#27756) (camc314)
- d85923f linter/eslint/no-param-reassign: Report rest parameter writes (#27765) (camc314)
- 8ea47bb linter/unicorn/prefer-type-error: Handle parenthesized type checks (#27766) (camc314)
- e96856c linter/unicorn/catch-error-name: Check unused underscore-prefixed names (#27751) (camc314)
- d8ca399 linter/unicorn/no-array-callback-reference: Ignore callback factory calls (#27763) (camc314)
- 1267ab8 linter/eslint/max-params: Count rest parameters (#27757) (camc314)
- 9ff25c3 linter/eslint/no-useless-assignment: Report dead stores to function parameters (#27735) (camc314)
- ee5e730 linter/eslint/no-setter-return: Check setters in property descriptors (#27731) (camc314)
- edbb5ed linter/eslint/id-length: Check destructuring assignment targets (#27724) (Yunus Ozen)
- 0e40acb linter/eslint/no-magic-numbers: Restrict unary exemptions to numeric signs (#27723) (Yunus Ozen)
- ae7e44b linter/eslint/no-div-regex: Report quantified leading equals (#27722) (Yunus Ozen)
- eb461f8 linter/unicorn/consistent-function-scoping: Count self-referencing variables as captures (#27726) (camc314)
- 5c8e731 linter/unicorn/catch-error-name: Avoid fix symbol name collisions (#27702) (camc314)
- 9a424c2 oxlint,oxfmt: Correct Node.js TypeScript support range (#27699) (camc314)
- 5dc0152 linter/eslint/no-var: Avoid fixes for redeclared bindings (#27697) (camc314)

### ⚡ Performance

- 4944cba linter/react/jsx-key: Avoid redundant key clones (#27915) (camc314)

### 📚 Documentation

- 0aa41ac linter: Fix invalid code example in rule docs (#27645) (leaysgur)
# Oxfmt
### 🐛 Bug Fixes

- e236de0 formatter_tests: Skip conformance spec calls with non-literal options (#27957) (leaysgur)
- 782ab6e linter: Search string values without UTF-8 conversion (#26716) (Dunqing)
- a5d8184 jsdoc: Parse code spans after quotes in descriptions (#27955) (leaysgur)
- 2645d2c formatter_markdown: Treat link destinations and footnote references as opaque to code span fences (#27948) (leaysgur)
- 4d8195c formatter_yaml: Keep a root plain scalar starting with a document marker verbatim (#27947) (leaysgur)
- 529b057 formatter_core: Keep front matter verbatim when body starts with indented delimiter (#27946) (leaysgur)
- c22a9b2 formatter: Treat static block with only empty statements as empty (#27945) (leaysgur)
- d3ff3f6 formatter/jsdoc: Write descriptions as written to not close the comment (#27823) (leaysgur)
- c4c1727 formatter/sort_imports: Keep comments after the last import (#27822) (leaysgur)
- a64677e formatter: Print JSDoc embedded snippets with LF (#27821) (leaysgur)
- 2c1cc20 formatter: Keep comment only Vue bindings as-is (#27820) (leaysgur)
- 1bf236d formatter/sort_imports: Do not use comments as import source (#27819) (leaysgur)
- 52ee29d formatter_yaml: Never start col-0 line with document marker or BOM (#27818) (leaysgur)
- 81c75e7 formatter/css: Keep glued css-in-js statement placeholders glued (#27814) (leaysgur)
- a1ef7f4 formatter: Keep typecast parens in same-operator binary and arrow chain (#27812) (leaysgur)
- de110ce formatter: Keep more parens around `TSInstantiationExpression` (#27811) (leaysgur)
- 8b02e90 formatter_json: Reject invalid JSON instead of dropping them (#27785) (leaysgur)
- 6fe4c1b formatter: Treat lone CR in JSX text and argument blank lines (#27780) (leaysgur)
- 5605362 oxfmt: Validate editorconfig as like oxfmtrc (#27778) (leaysgur)
- 5b2acb0 formatter_core: Report error position releative to CRLF source (#27777) (leaysgur)
- c78e80e formatter_core: Report parse error positions relative to the BOM-headed source (#27776) (leaysgur)
- 3a980c9 formatter_toml: Handle BOM like other languages (#27775) (leaysgur)
- 97c9fc4 oxfmt: Handle BOM in config JSON (#27774) (leaysgur)
- 28eb4a7 oxfmt: Print trailing newline for `--list-different` (#27773) (leaysgur)
- d2bea21 formatter: Glue comments to an opener in empty for-head slots and array holes (#27737) (leaysgur)
- 6a95ec1 formatter: Keep comment position on holey array (#27730) (leaysgur)
- 54769da formatter: Break after dangling line comment in holey array (#27729) (leaysgur)
- 99077ef formatter_json: Reject unary expressions other than signed numbers (#27728) (leaysgur)
- 22cd4cd formatter_json: Handle holey array and comments (#27727) (leaysgur)
- 644ca1c formatter: Do not indent logical chains whose right sides all inline (#27667) (leaysgur)
- a07a0fb formatter: Wrap comment-only JSX expression container in a group (#27666) (leaysgur)

### ⚡ Performance

- e220293 formatter: Check only the operator suppression mark in `is_quiet` (#27952) (leaysgur)
- e5fdc9c formatter_core: Write into one element stack through a concrete `Formatter` (#27559) (leaysgur)
- a342f7e formatter: Skip comment handling for nodes with no comment near them (#27557) (leaysgur)
- d8ce750 formatter: Write string literals with swapped quotes into the arena (#27558) (Yuji Sugiura)
- 1c393c0 formatter_core: Skip scanning texts with nothing to rewrite (#27561) (leaysgur)
- 1d3ef10 formatter_core: Keep the embedded IR when nothing in it is rewritten (#27673) (leaysgur)

### 📚 Documentation

- 1325225 oxfmt: Update useless comment prefix (#27956) (leaysgur)
- d0dd140 formatter: Note lossy cooked round-trip in template embeds (#27944) (leaysgur)
- 8a3a6c8 oxfmt: Update stale notes on the JSDoc string-out channel and fixture origins (#27824) (leaysgur)
graphite-app Bot pushed a commit that referenced this pull request Oct 19, 2026
# Oxlint
### ðŸ’Ĩ BREAKING CHANGES

- e3c1b11 ast: [**BREAKING**] Preserve lone surrogates in static property names (#27095) (Dunqing)
- a0a987c ast: [**BREAKING**] Preserve lone surrogates in static member names (#26677) (Dunqing)

### 🚀 Features

- 770ada4 linter: Mark vue 3 rules as recommended (#27717) (Cam McHenry)
- ba38c1d linter: Mark react/react-hooks rules as recommended (#27701) (Cam McHenry)
- d85a3ba linter: Mark promise rules as recommended (#27693) (Cam McHenry)
- e71c88a linter: Mark node rule as recommended (#27692) (Cam McHenry)
- 7213f61 linter: Mark nextjs rules as recommended (#27691) (Cam McHenry)
- d7c6b26 linter: Mark jsx-a11y rules as recommended (#27690) (Cam McHenry)
- 199dfdc linter: Mark jsdoc rules as recommended (#27689) (Cam McHenry)
- 780bff3 linter: Mark jest/vitest rules as recommended (#27672) (Cam McHenry)
- 6ae6859 linter: Mark import rules as recommended (#27671) (Cam McHenry)
- b7a1df3 linter: Mark unicorn rules as recommended (#27670) (Cam McHenry)
- c44a355 linter: Mark typescript rules as recommended from upstream (#27634) (Cam McHenry)
- 6b49dba linter: Mark eslint rules as recommended from upstream (#27632) (Cam McHenry)

### 🐛 Bug Fixes

- 7c47246 linter: Check module specifiers and string values that contain lone surrogates (#26717) (Dunqing)
- 782ab6e linter: Search string values without UTF-8 conversion (#26716) (Dunqing)
- 326904f linter/unicorn/no-useless-undefined: Allow `undefined` in `React.useRef` (#25027) (Chris Dokurno)
- f9cf165 linter/unicorn/prefer-spread: Ignore super method calls (#27868) (camc314)
- 00484e1 linter/eslint/prefer-const: Report destructuring assignments inside blocks (#27856) (camc314)
- 9c35461 linter/eslint/sort-vars: Report every out-of-order declaration (#27767) (camc314)
- 01e1c5e linter/unicorn/prefer-string-replace-all: Resolve regex variables (#27769) (camc314)
- 7f474d5 linter/eslint/no-loop-func: Detect writes after the loop (#27754) (camc314)
- 4b7fea6 linter/eslint/block-scoped-var: Ignore declarations without writes (#27760) (camc314)
- 2947917 linter/eslint/no-lonely-if: Check final else blocks in else-if chains (#27759) (camc314)
- fc039b5 linter/eslint/sort-imports: Check imports after other statements (#27749) (camc314)
- 1acba97 linter/unicorn/prefer-at: Report slice index reads once (#27762) (camc314)
- 6190e26 linter/eslint/prefer-arrow-callback: Ignore functions used as conditional tests (#27533) (Anzal Husain Abidi)
- b3cdaaf linter/eslint/sort-keys: Check computed identifier names (#27748) (camc314)
- 170e608 linter/unicorn/prefer-native-coercion-functions: Check object methods and function properties (#27750) (camc314)
- 9261df7 linter/unicorn/prefer-string-raw: Check object property values (#27758) (camc314)
- ddea86b linter/eslint/prefer-template: Report separate nested concatenations (#27764) (camc314)
- 2c67197 linter/eslint/no-unused-vars: Count conditional calls in sequences as uses (#27755) (camc314)
- 7f22fa0 linter/unicorn/prefer-regexp-test: Check logical operands in boolean contexts (#27761) (camc314)
- 3c44398 linter/eslint/class-methods-use-this: Count this in parameter defaults (#27756) (camc314)
- d85923f linter/eslint/no-param-reassign: Report rest parameter writes (#27765) (camc314)
- 8ea47bb linter/unicorn/prefer-type-error: Handle parenthesized type checks (#27766) (camc314)
- e96856c linter/unicorn/catch-error-name: Check unused underscore-prefixed names (#27751) (camc314)
- d8ca399 linter/unicorn/no-array-callback-reference: Ignore callback factory calls (#27763) (camc314)
- 1267ab8 linter/eslint/max-params: Count rest parameters (#27757) (camc314)
- 9ff25c3 linter/eslint/no-useless-assignment: Report dead stores to function parameters (#27735) (camc314)
- ee5e730 linter/eslint/no-setter-return: Check setters in property descriptors (#27731) (camc314)
- edbb5ed linter/eslint/id-length: Check destructuring assignment targets (#27724) (Yunus Ozen)
- 0e40acb linter/eslint/no-magic-numbers: Restrict unary exemptions to numeric signs (#27723) (Yunus Ozen)
- ae7e44b linter/eslint/no-div-regex: Report quantified leading equals (#27722) (Yunus Ozen)
- eb461f8 linter/unicorn/consistent-function-scoping: Count self-referencing variables as captures (#27726) (camc314)
- 5c8e731 linter/unicorn/catch-error-name: Avoid fix symbol name collisions (#27702) (camc314)
- 9a424c2 oxlint,oxfmt: Correct Node.js TypeScript support range (#27699) (camc314)
- 5dc0152 linter/eslint/no-var: Avoid fixes for redeclared bindings (#27697) (camc314)

### ⚡ Performance

- 4944cba linter/react/jsx-key: Avoid redundant key clones (#27915) (camc314)

### 📚 Documentation

- 0aa41ac linter: Fix invalid code example in rule docs (#27645) (leaysgur)
# Oxfmt
### 🐛 Bug Fixes

- e236de0 formatter_tests: Skip conformance spec calls with non-literal options (#27957) (leaysgur)
- 782ab6e linter: Search string values without UTF-8 conversion (#26716) (Dunqing)
- a5d8184 jsdoc: Parse code spans after quotes in descriptions (#27955) (leaysgur)
- 2645d2c formatter_markdown: Treat link destinations and footnote references as opaque to code span fences (#27948) (leaysgur)
- 4d8195c formatter_yaml: Keep a root plain scalar starting with a document marker verbatim (#27947) (leaysgur)
- 529b057 formatter_core: Keep front matter verbatim when body starts with indented delimiter (#27946) (leaysgur)
- c22a9b2 formatter: Treat static block with only empty statements as empty (#27945) (leaysgur)
- d3ff3f6 formatter/jsdoc: Write descriptions as written to not close the comment (#27823) (leaysgur)
- c4c1727 formatter/sort_imports: Keep comments after the last import (#27822) (leaysgur)
- a64677e formatter: Print JSDoc embedded snippets with LF (#27821) (leaysgur)
- 2c1cc20 formatter: Keep comment only Vue bindings as-is (#27820) (leaysgur)
- 1bf236d formatter/sort_imports: Do not use comments as import source (#27819) (leaysgur)
- 52ee29d formatter_yaml: Never start col-0 line with document marker or BOM (#27818) (leaysgur)
- 81c75e7 formatter/css: Keep glued css-in-js statement placeholders glued (#27814) (leaysgur)
- a1ef7f4 formatter: Keep typecast parens in same-operator binary and arrow chain (#27812) (leaysgur)
- de110ce formatter: Keep more parens around `TSInstantiationExpression` (#27811) (leaysgur)
- 8b02e90 formatter_json: Reject invalid JSON instead of dropping them (#27785) (leaysgur)
- 6fe4c1b formatter: Treat lone CR in JSX text and argument blank lines (#27780) (leaysgur)
- 5605362 oxfmt: Validate editorconfig as like oxfmtrc (#27778) (leaysgur)
- 5b2acb0 formatter_core: Report error position releative to CRLF source (#27777) (leaysgur)
- c78e80e formatter_core: Report parse error positions relative to the BOM-headed source (#27776) (leaysgur)
- 3a980c9 formatter_toml: Handle BOM like other languages (#27775) (leaysgur)
- 97c9fc4 oxfmt: Handle BOM in config JSON (#27774) (leaysgur)
- 28eb4a7 oxfmt: Print trailing newline for `--list-different` (#27773) (leaysgur)
- d2bea21 formatter: Glue comments to an opener in empty for-head slots and array holes (#27737) (leaysgur)
- 6a95ec1 formatter: Keep comment position on holey array (#27730) (leaysgur)
- 54769da formatter: Break after dangling line comment in holey array (#27729) (leaysgur)
- 99077ef formatter_json: Reject unary expressions other than signed numbers (#27728) (leaysgur)
- 22cd4cd formatter_json: Handle holey array and comments (#27727) (leaysgur)
- 644ca1c formatter: Do not indent logical chains whose right sides all inline (#27667) (leaysgur)
- a07a0fb formatter: Wrap comment-only JSX expression container in a group (#27666) (leaysgur)

### ⚡ Performance

- e220293 formatter: Check only the operator suppression mark in `is_quiet` (#27952) (leaysgur)
- e5fdc9c formatter_core: Write into one element stack through a concrete `Formatter` (#27559) (leaysgur)
- a342f7e formatter: Skip comment handling for nodes with no comment near them (#27557) (leaysgur)
- d8ce750 formatter: Write string literals with swapped quotes into the arena (#27558) (Yuji Sugiura)
- 1c393c0 formatter_core: Skip scanning texts with nothing to rewrite (#27561) (leaysgur)
- 1d3ef10 formatter_core: Keep the embedded IR when nothing in it is rewritten (#27673) (leaysgur)

### 📚 Documentation

- 1325225 oxfmt: Update useless comment prefix (#27956) (leaysgur)
- d0dd140 formatter: Note lossy cooked round-trip in template embeds (#27944) (leaysgur)
- 8a3a6c8 oxfmt: Update stale notes on the JSDoc string-out channel and fixture origins (#27824) (leaysgur)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-linter Area - Linter

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants