Skip to content

Bug: promise-function-async is reporting on () => A | Promise<B> #10687

Closed
@fregante

Description

@fregante

Before You File a Bug Report Please Confirm You Have Done The Following...

  • I have tried restarting my IDE and the issue persists.
  • I have updated to the latest version of the packages.
  • I have searched for related issues and found none that matched my issue.
  • I have read the FAQ and my problem is not listed.

Playground Link

https://typescript-eslint.io/play/#ts=5.7.2&fileType=.ts&code=FAMwrgdgxgLglgewgAgEYAoCUyDexnIBOApjGISgLICGMAFgHSHUQAmCAtlsgPzIDkSYv2QAuZAAVCnOAGdiTYrIQAbAG7F0ARkwBuYAF8gA&eslintrc=N4KABGBEBOCuA2BTAzpAXGUEKQAIBcBPABxQGNoBLY-AWhXkoDt8B6Y6AewFtLlFaAM1hMy%2BSpya0AhskKj0URNC7RI4MAF8QmoA&tsconfig=N4KABGBEDGD2C2AHAlgGwKYCcDyiAuysAdgM6QBcYoEEkJemy0eAcgK6qoDCAFutAGsylBm3TgwAXxCSgA&tokens=false

Repro Code

function b() {
  return Math.random() ? 'one' : Promise.resolve(1);
}

ESLint Config

_playground default_

tsconfig

_playground default_

Expected Result

No reports

Actual Result

"Functions that return promises must be async."

Attempts to fix to async function, changing the return type from A | Promise<B> to Promise<A | B>

Additional Info

While this behavior is described in the docs/demo, I believe it's wrong because the function does not "return a promise," it only "MAY return a promise."

The change requested is unsafe as it changes the signature/type of the function entirely.

Note that whether () => A | Promise<B> is a good type is not relevant to this issue. The type exists in the wild (web extensions, screenshot) and it can be prohibited by a separate rule (suggested here)

Metadata

Metadata

Assignees

No one assigned

    Labels

    accepting prsGo ahead, send a pull request that resolves this issuebugSomething isn't workinglocked 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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions