Open kirkwaiblinger opened 3 hours ago
Note that the fundamental concern here is that a Promise
-returning [Symbol.dispose]()
method is a clear vector for unhandled rejections, whether invoked by an await using
or an ordinary using
statement.
Before You File a Proposal Please Confirm You Have Done The Following...
My proposal is suitable for this project
Link to the rule's documentation
https://typescript-eslint.io/rules/await-thenable/, https://typescript-eslint.io/rules/no-floating-promises, https://typescript-eslint.io/rules/no-misused-promises
Description
I would like to find a place to lint for providing a sync disposable to an
await using
statement. This relates closely to https://github.com/typescript-eslint/typescript-eslint/issues/8858, so maybe await-thenable is the right place for this check? But it also has concerns very adjacent to no-floating-promises and no-misused-promises, so I'm not sure.Fail
Pass
Additional Info
The promise rejection in
unhandledRejection
cannot be caught, since the[Symbol.dispose]()
method is called, but is not awaited, by anawait using
statement. Only the[Symbol.asyncDispose]()
method is awaited.There's a lot of subtlety here so I've provided a repo to be able to play with variations on this at https://github.com/kirkwaiblinger/typescript-eslint-repro-await-using