Skip to content

fix(linter/disable-directives): ignore invalid enable suffixes#22179

Merged
graphite-app[bot] merged 1 commit into
mainfrom
codex/fix-enablefoo-disable-directives
May 6, 2026
Merged

fix(linter/disable-directives): ignore invalid enable suffixes#22179
graphite-app[bot] merged 1 commit into
mainfrom
codex/fix-enablefoo-disable-directives

Conversation

@camc314

@camc314 camc314 commented May 6, 2026

Copy link
Copy Markdown
Contributor
  • Ignore malformed enable comments like eslint-enablefoo when deciding whether to parse a rule list.
  • Add regression coverage for the comma-separated typo form that used to be accepted accidentally.

Breakage Scenario

A file can contain a disabled rule followed by a typo in an enable directive:

/* eslint-disable no-debugger */
/* eslint-enablefoo, no-debugger */
debugger;

eslint-enablefoo is not a valid enable directive, so no-debugger should remain disabled for the later debugger statement. Before this fix, the parser matched the eslint-enable prefix and then parsed the trailing , no-debugger as a rule list, incorrectly re-enabling no-debugger.

@github-actions github-actions Bot added the A-linter Area - Linter label May 6, 2026
@camc314 camc314 added the 0-merge Merge with Graphite Merge Queue label May 6, 2026
@camc314 camc314 self-assigned this May 6, 2026
@camc314 camc314 marked this pull request as ready for review May 6, 2026 10:17
Copilot AI review requested due to automatic review settings May 6, 2026 10:17

camc314 commented May 6, 2026

Copy link
Copy Markdown
Contributor Author

Merge activity

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 fixes parsing of eslint-enable/oxlint-enable directive comments so that malformed “enable” prefixes (e.g. eslint-enablefoo) no longer accidentally trigger rule-list parsing and re-enable rules that should remain disabled.

Changes:

  • Restrict enable directive rule-list parsing to cases where the text following the directive name begins with whitespace.
  • Add a regression test covering the comma-separated typo form (e.g. eslint-enablefoo, no-debugger, ...) that previously could be misinterpreted as a valid enable rule list.

- Ignore malformed enable comments like `eslint-enablefoo` when deciding whether to parse a rule list.
- Add regression coverage for the comma-separated typo form that used to be accepted accidentally.

### Breakage Scenario

A file can contain a disabled rule followed by a typo in an enable directive:

```js
/* eslint-disable no-debugger */
/* eslint-enablefoo, no-debugger */
debugger;
```

`eslint-enablefoo` is not a valid enable directive, so `no-debugger` should remain disabled for the later `debugger` statement. Before this fix, the parser matched the `eslint-enable` prefix and then parsed the trailing `, no-debugger` as a rule list, incorrectly re-enabling `no-debugger`.
@graphite-app graphite-app Bot force-pushed the codex/fix-enablefoo-disable-directives branch from 91ffb77 to a59e447 Compare May 6, 2026 10:20
@graphite-app graphite-app Bot merged commit a59e447 into main May 6, 2026
28 checks passed
@graphite-app graphite-app Bot removed the 0-merge Merge with Graphite Merge Queue label May 6, 2026
@graphite-app graphite-app Bot deleted the codex/fix-enablefoo-disable-directives branch May 6, 2026 10:23
camc314 added a commit that referenced this pull request May 11, 2026
# Oxlint
### 💥 BREAKING CHANGES

- 00ce512 oxlint/lsp: [**BREAKING**] Don't fix suggestions on fixAll
code actions & command (#22195) (Sysix)

### 🚀 Features

- 0eeceaf linter/no-unused-vars: Rename parameter with initializer
(#22308) (camc314)
- fa0232b linter/no-unused-vars: Add param rename suggestion (#22285)
(Ryota Misumi)
- ae59305 linter/promise/no-promise-in-callback: Add
`exemptDeclarations` option (#22275) (Mikhail Baev)
- 60bed4a linter: Extends `no-redundant-roles` and
`prefer-tag-over-role` support roles (#22069) (mehm8128)
- 545c80f linter/eslint: Implement `prefer-regex-literals` rule (#22192)
(Mikhail Baev)
- cf86d7a linter: Bulk suppression (#19328) (Said Atrahouch)
- 23abd22 linter/jsx-a11y: Implement
no-noninteractive-element-to-interactive-role (#21264) (Pedro Tainha)
- fbb8f22 linter: Support `ignores` in overrides (#22148) (camc314)
- 5a4414d oxlint/lsp: Support `rulesCustomization` lsp option (#21858)
(Sysix)

### 🐛 Bug Fixes

- 610f4c7 linter/no-unused-vars: Avoid renaming captured vars (#22310)
(camc314)
- 6b50f23 oxlint/cli: Load root config by searching up parent
directories (#22272) (Sysix)
- 31a5de7 linter: Rename override `ignores` to `excludeFiles` (#22283)
(camc314)
- 26d5d7b linter: Add missing vitest/valid-describe-callback
functionality (#22279) (camchenry)
- 784530f linter: `valid-title`: detect `String.raw` strings (#22271)
(Sysix)
- 080d90e linter: Move `no-debugger` fix to suggestion (#22256) (Sysix)
- 25b7017 linter: Undocument override `ignores` option (#22213)
(camc314)
- 7bb00dd linter: Fix role-has-required-aria-props (#22097) (mehm8128)
- d25279e linter/disable-directives: Improve parsing of names,
descriptions (#22184) (camc314)
- a59e447 linter/disable-directives: Ignore invalid enable suffixes
(#22179) (camc314)
- aafef0f ci: Disable bulk supression test on big endian (#22175)
(camc314)
- 281daec linter/vue/define-props-destructuring: Add
`only-when-assigned` config opt (#22142) (camc314)
- 46ab679 linter/plugins: Trim leading newline for partial sources
(#20928) (bab)
- 29ff6d9 linter: Update docs for no_alias_methods rule to be
Vitest-specific and add toThrowError alias (#22129) (camchenry)

### ⚡ Performance

- 9414bee linter/role-has-required-aria-props: Avoid intermediate vec
(#22212) (camc314)
- 3883ea3 linter/no-useless-escape: Drop unnecessary Vec collect
(#22171) (connorshea)
- 42c3029 linter/check-property-names: Replace split-collect-pop-join
with rfind (#22172) (connorshea)
- 9551d53 linter: Remove unnecessary Vec collect in CFG edge traversal
(#22167) (connorshea)
- 26fa2fc linter/aria-role: Remove unnecessary string allocations in run
method (#22168) (connorshea)
- c9ce045 linter/getter-return: Remove unnecessary Vec collect in CFG
edge traversal (#22166) (connorshea)
- 72bd846 linter/no-this-in-sfc: Reorder cheap name check, avoid String
allocation (#22164) (connorshea)

### 📚 Documentation

- 4da212a linter/no-unused-vars: Add docs to
`rename_unused_function_parameter` (#22311) (camc314)
- 27c4628 linter/forbid-dom-props: Escape jsx examples in lint rule docs
(#22254) (4MBL)
- 3f81147 linter: Improve the `react/jsx-key` rule docs. (#22162)
(connorshea)
- 07f03cc linter/consistent-return: Add note about `noImplicitReturns`
coverage (#22156) (camc314)
- 7c1e049 oxlint/lsp: Improve autogenerated lsp docs (#22154) (Sysix)
- 87b3e38 linter: Update docs to be vitest-specific for
consistent-test-it (#22128) (camchenry)
# Oxfmt
### 💥 BREAKING CHANGES

- 5c6c390 oxfmt: [**BREAKING**] Respect more git ignore options, align
with Oxlint (#22210) (leaysgur)

### 🚀 Features

- 6e8e818 oxfmt: Experimental .svelte support (#21700) (leaysgur)

### 🐛 Bug Fixes

- e2a20b6 formatter: Add space after commas in import attributes
(#22274) (Leonabcd123)

### ⚡ Performance

- b756682 oxfmt: Optimize nested config prescan (#22232) (Jovi De
Croock)
- f14e81e formatter/sort_imports: Skip sort for single import runs
(#22204) (leaysgur)
- 32255b1 formatter: Process `ImportDeclaration`s in a run (#22079)
(overlookmotel)

### 📚 Documentation

- 4da6f4c formatter: Correct comment (#22217) (overlookmotel)
- ef3507d formatter/sort_imports: Refresh docs (#22203) (leaysgur)

Co-authored-by: Cameron <cameron.clark@hey.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.

2 participants