Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Enhancement: [await-thenable] should prohibit using a sync disposable with await using #10208

Closed
@kirkwaiblinger

Description

@kirkwaiblinger

Before You File a Proposal Please Confirm You Have Done The Following...

My proposal is suitable for this project

  • I believe my proposal would be useful to the broader TypeScript community (meaning it is not a niche proposal).

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 #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

async function unhandledRejection() {             
    await using _ = {
        async [Symbol.dispose]() {
            throw new Error('dispose error');
        }
    }
}

Pass

async function properlyHandledRejection() {             
    await using _ = {
        async [Symbol.asyncDispose]() {
            throw new Error('dispose error');
        }
    }
}

Additional Info

The promise rejection in unhandledRejection cannot be caught, since the [Symbol.dispose]() method is called, but is not awaited, by an await 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    accepting prsGo ahead, send a pull request that resolves this issueenhancement: plugin rule optionNew rule option for an existing eslint-plugin rulelocked due to agePlease open a new issue if you'd like to say more. See https://typescript-eslint.io/contributing.package: eslint-pluginIssues related to @typescript-eslint/eslint-plugin

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions