Skip to content

fix(linter/double-comparisons): make fixer a suggestion#22968

Merged
graphite-app[bot] merged 1 commit into
mainfrom
codex/double-comparisons-suggestion
Jun 4, 2026
Merged

fix(linter/double-comparisons): make fixer a suggestion#22968
graphite-app[bot] merged 1 commit into
mainfrom
codex/double-comparisons-suggestion

Conversation

@camc314

@camc314 camc314 commented Jun 4, 2026

Copy link
Copy Markdown
Contributor

The oxc/double-comparisons rule currently exposes its simplification as a safe autofix, so --fix can rewrite expressions like x > 0 || x < 0 to x != 0. That rewrite is not always behavior-preserving in JavaScript because relational comparisons and loose equality coerce values differently.

For example, these are not equivalent for values such as undefined, null, objects, or arrays:

x > 0 || x < 0
x != 0

This PR changes the rule from an autofix to a suggestion. The simplification is still available to users who explicitly apply suggestions, but it will no longer be applied by --fix.

fixes #22967

Copilot AI review requested due to automatic review settings June 4, 2026 20:14
@camc314 camc314 self-assigned this Jun 4, 2026
@github-actions github-actions Bot added the A-linter Area - Linter label Jun 4, 2026

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.

Pull request overview

This PR adjusts the oxc/double-comparisons lint so its rewrite is emitted as a suggestion (rather than a safe auto-fix), aligning the rule metadata with the diagnostic emission API.

Changes:

  • Mark DoubleComparisons as suggestion in declare_oxc_lint!.
  • Switch from ctx.diagnostic_with_fix to ctx.diagnostic_with_suggestion.
  • Extend fixer test coverage with an additional case (x > 0 || x < 0x != 0).

Comment thread crates/oxc_linter/src/rules/oxc/double_comparisons.rs
@camc314 camc314 changed the title fix(linter): make double-comparisons a suggestion fix(linter/double-comparisons): make fixer a suggestion Jun 4, 2026
@camc314 camc314 added the 0-merge Merge with Graphite Merge Queue label Jun 4, 2026

camc314 commented Jun 4, 2026

Copy link
Copy Markdown
Contributor Author

Merge activity

The `oxc/double-comparisons` rule currently exposes its simplification as a safe autofix, so `--fix` can rewrite expressions like `x > 0 || x < 0` to `x != 0`. That rewrite is not always behavior-preserving in JavaScript because relational comparisons and loose equality coerce values differently.

For example, these are not equivalent for values such as `undefined`, `null`, objects, or arrays:

```js
x > 0 || x < 0
x != 0
```

This PR changes the rule from an autofix to a suggestion. The simplification is still available to users who explicitly apply suggestions, but it will no longer be applied by `--fix`.

fixes #22967
@graphite-app graphite-app Bot force-pushed the codex/double-comparisons-suggestion branch from fb5ce2e to 742fd0b Compare June 4, 2026 20:21
@graphite-app graphite-app Bot merged commit 742fd0b into main Jun 4, 2026
29 checks passed
@graphite-app graphite-app Bot removed the 0-merge Merge with Graphite Merge Queue label Jun 4, 2026
@graphite-app graphite-app Bot deleted the codex/double-comparisons-suggestion branch June 4, 2026 20:25
Boshen added a commit that referenced this pull request Jun 8, 2026
# Oxlint
### 🚀 Features

- e805174 linter: Add schema for `jest/vitest/max-expects` (#23105)
(Sysix)
- 7850577 linter: Add schema for `jest/vitest/expect-expect` (#23104)
(Sysix)
- 75f641a linter: Add schema for `jest/vitest/consistent-test-it`
(#23103) (Sysix)
- 5125f89 linter/unicorn: Support no-null `checkArguments` option
(#23098) (camc314)
- b8b9797 linter: Add schema for `import-max-dependencies` (#23096)
(Sysix)
- 65cb47a linter/eslint: Support no-unused-expressions
`ignoreDirectives` option (#23097) (camc314)
- f6c36d5 linter: Add schema for `import/prefer-default-export` (#23091)
(Sysix)
- 0d4a5d1 linter: Add schema for `eslint/sort-vars` (#23090) (Sysix)
- fdb5bf5 linter: Add schema for `eslint/radix` (#23082) (Sysix)
- 05b4dcf linter: Add schema for `eslint/prefer-const` (#23081) (Sysix)
- 5a06c4d linter/vue: Implement next-tick-style rule (#23041) (Alex
Peshkov)
- e38a36a linter: Add schema for `eslint/operator-assignment` (#23080)
(Sysix)
- 907cee7 linter: Add schema for `eslint/no-warning-comments` (#23075)
(Sysix)
- 9470bb2 linter: Add schema for `eslint/no-unused-vars` (#23073)
(Sysix)
- 234b5cf linter: Add schema for `eslint/no-shadow` (#23072) (Sysix)
- de0dd8b linter: Add schema for `eslint/no-restricted-exports` (#23020)
(Sysix)
- faa3e0d linter: Add schema for `eslint/no-param-reassign` (#23018)
(Sysix)
- dbc9c27 linter: Add schema for `eslint/no-magic-numbers` (#23017)
(Sysix)
- 38d3569 linter: Add schema for `eslint/no-inner-declarations` (#23016)
(Sysix)
- 008fa41 linter: Add schema for `eslint/no-constant-condition` (#22991)
(Sysix)
- ca44623 linter: Add schema for `eslint/no-empty-function` (#22988)
(Sysix)
- 43eb04d linter: Add schema for `eslint/id-match` (#22987) (Sysix)
- a800f27 linter: Add schema for `eslint/capitalized-comments` (#22984)
(Sysix)
- 96e2d32 linter: Add schema for `eslint/id-length` (#22963) (Sysix)
- 545493f linter: Add schema for `eslint/complexity` (#22960) (Sysix)
- 5f0b558 linter: Add schema for `eslint/class-methods-use-this`
(#22959) (Sysix)
- 719b720 linter: Add schema for simple rule configurations (#22948)
(Sysix)
- fd00966 linter: Add right schema for `eslint/max-*` rules (#22923)
(Sysix)
- 1226d78 linter: Fill schema with rule configurations (#22907) (Sysix)
- 8f423c1 linter/vue: Implement `require-direct-export` rule (#17623)
(yefan)
- 78e915b linter/vue: Implement no-reserved-props rule (#22914) (bab)
- 0f200a9 linter/vue: Implement require-prop-types rule (#22083) (Alex
Peshkov)
- 5da9da9 linter/vue: Implement no-reserved-keys rule (#21780) (bab)
- 75e14a8 linter/vue: Implement prop-name-casing rule (#22892) (bab)
- 85efabf semantic: Make building the class table optional, off by
default (#22862) (Boshen)

### 🐛 Bug Fixes

- a49b0cf linter/no-map-spread: Remove ineffective autofix (#22956)
(camc314)
- cf53285 parser: Report reserved type-declaration names in the parser
(#23035) (Boshen)
- 0383e61 linter: Fix schema for rules without a config (#22946) (Sysix)
- 4d722e0 parser: Report duplicate switch `default` clause in the parser
(#23012) (Boshen)
- 6cb34b8 linter/plugins: Make spreading `Token` instances keep `loc`
property (#22947) (Nicolas Le Cam)
- 27de044 linter/plugins: Make spreading `Comment` instances keep `loc`
property (#22238) (Nicolas Le Cam)
- 742fd0b linter/double-comparisons: Make fixer a suggestion (#22968)
(camc314)
- 93f4494 linter: Respect default child config plugin when extending
parent config (#22903) (Sysix)
- 594ed86 linter: Deny unknown options for some rules (#22924) (Sysix)
- 3253038 linter/expect-expect: Align default rule options (#22890)
(camc314)
- bbe44ea linter: Respect default plugins from extended config (#22896)
(Sysix)

### ⚡ Performance

- 0b7ce7e linter/plugins: Create global prop vars at top level of
modules (#22928) (overlookmotel)
- 0f7c319 linter/plugins: Define class `#loc` setter functions as
`const`s (#22919) (overlookmotel)

### 📚 Documentation

- 7b0380d linter: Remove preserve-caught-error note (#22994) (camc314)
- dadafe3 oxlint, oxfmt: Mention migrate skills in npm READMEs (#22965)
(Boshen)
# Oxfmt
### 🚀 Features

- 3da77e0 oxfmt: Format `parser:json5` files by `oxc_formatter_json`
(#22990) (leaysgur)
- c786f0d oxfmt: Format `parser:jsonc` files by `oxc_formatter_json`
(#22913) (leaysgur)
- 27a6db8 formatter_json: Implement jsonc variant (#22912) (leaysgur)

### 🐛 Bug Fixes

- 2aedd52 oxfmt: Avoid JS promise rejects for all TSFN call sites
(#23107) (leaysgur)
- 01e0871 formatter,formatter_json: Handle PS/LS as line terminator
(#22978) (leaysgur)
- 23902d9 formatter_json: Handle CR only line breaks (#22977) (leaysgur)
- 136b72b formatter_json: Use line_suffix for line comment outside array
(#22931) (leaysgur)
- 44e40fa formatter_json: Expand line comment inside array (#22911)
(leaysgur)
- 2c86896 formatter_json: Avoid example binary name collision (#22904)
(camc314)

### 📚 Documentation

- cc69d8d formatter_json: Update AGENTS.md (#22981) (leaysgur)
- 0490721 formatter_json: Update AGENTS.md (#22976) (leaysgur)
- dadafe3 oxlint, oxfmt: Mention migrate skills in npm READMEs (#22965)
(Boshen)
- f88961a oxfmt: Annotate each config option with supported languages
(#22953) (leaysgur)
- 7e514bf formatter_json: Update AGENTS.md (#22930) (leaysgur)

Co-authored-by: Boshen <1430279+Boshen@users.noreply.github.com>
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.

linter: double-comparisons applies an unsafe fix - changes logic

2 participants