Skip to content

fix(linter): add more expression support for iframe-has-title#22460

Merged
camchenry merged 2 commits into
oxc-project:mainfrom
mehm8128:fix/add-more-expression-support-for-iframe-has-title
May 17, 2026
Merged

fix(linter): add more expression support for iframe-has-title#22460
camchenry merged 2 commits into
oxc-project:mainfrom
mehm8128:fix/add-more-expression-support-for-iframe-has-title

Conversation

@mehm8128

Copy link
Copy Markdown
Contributor

close #22422

@mehm8128 mehm8128 requested a review from camc314 as a code owner May 15, 2026 11:44
@mehm8128 mehm8128 changed the title fix: add more expression support for iframe-has-title fix(linter): add more expression support for iframe-has-title May 15, 2026
@mehm8128 mehm8128 force-pushed the fix/add-more-expression-support-for-iframe-has-title branch from d27c700 to 6ea6420 Compare May 15, 2026 11:46
@codspeed-hq

codspeed-hq Bot commented May 15, 2026

Copy link
Copy Markdown

Merging this PR will not alter performance

✅ 4 untouched benchmarks
⏩ 47 skipped benchmarks1


Comparing mehm8128:fix/add-more-expression-support-for-iframe-has-title (6e962fa) with main (5ac7e79)

Open in CodSpeed

Footnotes

  1. 47 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.

@Leonabcd123 Leonabcd123 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.

I don't think we can just skip LogicalExpression (and maybe others as well). Take for example the following:

<iframe title={'' ?? ''} />

eslint-plugin-jsx-a11y raises an error on this, but in this pr oxlint doesn't (while oxlint 1.64.0 does). Tbh I don't see any real world case where someone would write something like this, so I'm not sure if this even matters, just something to consider for compatibility with eslint-plugin-jsx-a11y.

@mehm8128

Copy link
Copy Markdown
Contributor Author

Thank you for the information, I hadn't considered that.
In my opinion, we should prioritize reducing false positives over considering false negatives in edge cases. Too many false positive reports could lead users to disable the rule.

If there is some consistent policy for this project, please let me know.

@camchenry camchenry left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

thanks!

@camchenry

Copy link
Copy Markdown
Member

I don't think we can just skip LogicalExpression (and maybe others as well). Take for example the following:

<iframe title={'' ?? ''} />

eslint-plugin-jsx-a11y raises an error on this, but in this pr oxlint doesn't (while oxlint 1.64.0 does). Tbh I don't see any real world case where someone would write something like this, so I'm not sure if this even matters, just something to consider for compatibility with eslint-plugin-jsx-a11y.

I think this PR is okay to merge as-is, but yeah we probably don't want to accept something like title={'' ?? ''} although I'm certain any AI tool that people use these days would immediately flag that. The spirit of the rule is that you're at least specifying a title of some kind: but we can't really verify its content in every case practically.

If you'd be interested in creating a follow-up PR, I think we'd gladly accept a change to deny cases for logical expressions where the first argument is an empty string such as title={'' ?? foo}.

@camchenry camchenry merged commit c6f2d3f into oxc-project:main May 17, 2026
28 checks passed
camc314 pushed a commit that referenced this pull request May 18, 2026
# Oxlint
### 🚀 Features

- 1ae291e linter/no-underscore-dangle: Add `allowInUsingDeclarations`
option (#22483) (吴杨帆)
- 0440b0f linter/eslint: Implement `id-match` rule (#22379) (Vladislav
Sayapin)
- 65bf119 linter: Implement react no-object-type-as-default-prop
(#22481) (uhyo)
- 2a6ddce linter/eslint: Implement `no-implied-eval` rule (#22391)
(Vladislav Sayapin)
- d3a3c1d linter: Auto detect agents from CLI and transition to the
agent output format (#22068) (Jovi De Croock)
- 625758a linter/vitest: Implement padding-around-after-all-blocks rule
(#21788) (kapobajza)
- 37680b0 linter: Implement react no-unstable-nested-components (#22248)
(Jovi De Croock)
- d8d9c74 linter: Implement import/newline-after-import rule (#19142)
(Ryuya Yanagi)

### 🐛 Bug Fixes

- 3f59e03 linter: Only call rayon/miette/tracing inits once (#21899)
(Matiss Janis Aboltins)
- 602dfd6 linter/promise/no-return-wrap: Detect Promise calls in all
branches (#22474) (zennnnnnn11)
- e182aee linter: Allow dialogs and popovers for no_autofocus (#22289)
(mehm8128)
- 7ffb710 linter/jest/vitest: Jest/no-standalone-expect ignores
additionalTestBlockFunctions option for jest/vitest hooks (#22477)
(kapobajza)
- c6f2d3f linter: Add more expression support for iframe-has-title
(#22460) (mehm8128)
- 5747ff1 linter: Avoid enabling jest with vitest plugin (#22499)
(camc314)
- 863984f linter/no-find-dom-node: Run on all files (#22479) (bab)

### ⚡ Performance

- 2afef79 linter: Optimize `no-loop-func` (#22491) (camchenry)
- 4c9ca72 oxlint: Align walker thread count with rayon pool (#22494)
(Boshen)

### 📚 Documentation

- f7967c7 linter/id-match: Clarify `onlyDeclarations` config docs
(#22523) (camc314)
- 1e0c97f linter: Fix closing code block in documentation for
`padding-around-after-all-blocks` rule. (#22513) (connorshea)
- a9049fd linter: Exclude directly provide autoFocus to dialog pattern
(#22510) (mehm8128)
# Oxfmt
### 🐛 Bug Fixes

- 8ee946f formatter/sort_imports: Use label to classify lines (#22512)
(leaysgur)
- 8c1da44 formatter: Normalize destructuring keys in DCR (#22478)
(camc314)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

linter: jsx-a11y/iframe-has-title has false positive on title={a ?? b}

3 participants