-
-
Notifications
You must be signed in to change notification settings - Fork 725
fix(linter/promise/prefer-await-to-callbacks): false positive for addEventListener
#12537
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(linter/promise/prefer-await-to-callbacks): false positive for addEventListener
#12537
Conversation
How to use the Graphite Merge QueueAdd either label to this PR to merge it via the merge queue:
You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. |
…llbacks rule Co-authored-by: Dunqing <29533304+Dunqing@users.noreply.github.com>
CodSpeed Instrumentation Performance ReportMerging #12537 will not alter performanceComparing Summary
Footnotes |
|
@copilot Please check the original lint rule implementation https://github.com/eslint-community/eslint-plugin-promise/blob/main/rules/prefer-await-to-callbacks.js |
I've checked the original eslint-plugin-promise implementation. The original rule only exempts // Ignore event listener callbacks.
if (
node.callee.property &&
(node.callee.property.name === 'on' ||
node.callee.property.name === 'once')
) {
return
}My implementation adds Should I:
Could you clarify how you'd like me to proceed? |
|
@copilot Go ahead! Note that you should consider that I am not sure whether the original lint rule implementation has a bug. |
I'm proceeding with the current implementation that extends the original rule to include The implementation addresses the false positive issue by:
Tests are passing, confirming the fix works correctly while preserving the rule's intended behavior for non-event-handler callbacks. |
addEventListener
|
This rule isn't a recommended rule in eslint-plugin-promise, so I guess this is the reason why no one has found this bug. |
camc314
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
well done @copilot
## [1.9.0] - 2025-07-29 ### 💥 BREAKING CHANGES - 5a7e72a semantic: [**BREAKING**] `AstNodes::program` return `&Program` not `Option<&Program>` (#12515) (overlookmotel) ### 🚀 Features - 3489ce0 linter: Add `typescript-eslint/explicit-module-boundary-types` (#12402) (Don Isaac) ### 🐛 Bug Fixes - 0fd3e87 linter: Default options for `eslint/yoda` (#12540) (Sysix) - 724776f linter: Default options for `unicorn/switch-case-braces` (#12539) (Sysix) - fda45ea linter/promise/prefer-await-to-callbacks: False positive for `addEventListener` (#12537) (Copilot) - 1a710e3 linter/array-type: Fix more false negatives (#12501) (camc314) - 2b5bf98 linter: Consistent-function-scoping false positive with hoisted var declarations (#12523) (camc314) - cc19c8b vscode: Fix statusbar icon order (#12544) (Christian Fehmer) - 209d006 linter: Parse vue lang attribute without quotes (#12517) (Sysix) - 85a34ce linter/array-type: False negative with arrays in generic args (#12500) (camc314) - 98c1fbb linter/require-await: Improve async keyword detection in get_delete_span function (#12494) (camc314) - 7c75dba linter/require-await: Improve span calculation for object properties (#12490) (camc314) - 2b261cf linter/exhaustive-deps: False positive in exhaustive deps (#12471) (camc314) ### 🚜 Refactor - a696227 linter: Remove AstKind for SimpleAssignmentTarget (#12401) (Tyler Earls) - 7af38e1 napi/oxlint: Simplify `ExternalLinterLintFileCb` type (#12572) (overlookmotel) - 543fd53 napi/oxlint: Rename `run` to `lintFile` (#12567) (overlookmotel) - 0179c86 napi/oxlint: Reverse args of `ExternalLinter::new` (#12566) (overlookmotel) - 491c401 linter: Remove `#[must_use]` from `LintService::with_*` methods (#12560) (overlookmotel) - d44b0ac linter: Remove `Runner` trait (#12559) (overlookmotel) - bea652f linter: Add `vue` and `regex` to `BuiltinLintPlugins` (#12542) (Sysix) - aa9dd21 linter/no-eval: Get source type from `Semantic` (#12514) (overlookmotel) - 5c33fc7 diagnostics: Implement `Eq` and `Ord` for `InfoPosition` (#12505) (overlookmotel) - 8c8c8bc napi/oxlint: Diagnostics communicate which rule via rule index, not rule ID (#12482) (overlookmotel) - e2d9b4d fixer: Add Debug trait to PossibleFixes and Message structs (#12493) (camc314) - f0b1f0d napi/oxlint, napi/parser: Remove source length from `RawTransferMetadata` (#12483) (overlookmotel) - 7e4959a napi/oxlint: Rename `rules` to `ruleNames` (#12477) (overlookmotel) - 7a0da04 diagnostics: Remove Option wrapper from MPSC channel and sender field (#12467) (camc314) ### 🧪 Testing - 56468c7 linter/no-unused-private-class-members: Add more test cases (#12569) (camc314) - 191a164 linter/no-unused-private-class-members: Add more test cases (#12563) (camc314) - d31adcf linter: Improve sorting diagnostics (#12504) (overlookmotel) Co-authored-by: camc314 <18101008+camc314@users.noreply.github.com>
Fixes #12530
The
promise/prefer-await-to-callbacksrule was incorrectly flagging DOM event handlers usingaddEventListeneras callback patterns that should use async/await. This resulted in false positives for legitimate event handling code.Problem
The rule was triggering on code like this:
This is not a callback-style async operation but rather an event handler, which should not be converted to async/await.
Solution
Extended the existing exemption logic to include
addEventListenerandremoveEventListenermethods alongside the already-exemptedonandoncemethods. These are all event handler registration methods that should not be subject to the callback-to-async/await conversion rule.Changes
addEventListenerandremoveEventListenerto the list of exempted method namesTesting
The fix ensures that:
addEventListenercalls no longer trigger false positivesaddEventListener/removeEventListenercalls are exemptedon/onceevent handler exemptions continue to work💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.