Skip to content

Enhancement: [no-floating-promises] add an 'allowForKnownSafeCalls' option #8404

Closed
@JoshuaKGoldberg

Description

@JoshuaKGoldberg

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/no-floating-promises

Description

#7008's allowForKnownSafePromises is a type-oriented approach to allowlisting safe types to be floating. For frameworks that have those Promises show up in many places (e.g. reduxjs/redux-toolkit#4101), marking the type as safe is a reasonable solution.

But (paraphrasing private remarks from @Josh-Cena): that requires framework authors to set things up in a very specific way that feels like jumping through hoops specific to another, tangential technology (us). For example, nodejs/node#51292 tracks how node:test's it & similar return a Promise. Even if the Node types get some fancy branded SafePromise type added (one inconvenience), users really just want a way to mark that it() calls are safe. Asking users to know the Node.js-specific types is more learning curve for them (another inconvenience).

In other words, we think users would really want to mark specific functions as safe to call. A kind of allowForKnownSafePromiseReturns option.

"@typescript-eslint/no-floating-promises": ["error", {
  "allowForKnownSafePromiseReturns": [
    { "from": "package", "name": "it", "package": "node:test" }
  ]
}]

Fail

import { it } from "node:test";

it("...", () => { /* ... */ });

Pass

/* "allowForKnownSafePromiseReturns": [{ "from": "package", "name": "it", "package": "node:test" }] */

import { it } from "node:test";

it("...", () => { /* ... */ });

Additional Info

No response

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