Skip to content

📎 Implement type narrowing #8333

@mafrasi2

Description

@mafrasi2

Description

When "type narrowing" is performed through a condition, we should recognise the narrowed type within the branch that is covered by the condition.

Note we should also consider guard functions and variables that are assigned a boolean result based on type guards. These can be implemented as a separate improvement, so this is just an FYI.

Example

https://biomejs.dev/playground/?lintRules=noFloatingPromises&code=LwAqACoAIAB3AGkAdABoACAAYwBsAGEAcwBzAGUAcwAgACoALwAKAGMAbABhAHMAcwAgAEEAIAB7AH0ACgBjAGwAYQBzAHMAIABCACAAZQB4AHQAZQBuAGQAcwAgAEEAIAB7AAoAIAAgAGEAcwB5AG4AYwAgAGEAcwB5AG4AYwBGAHUAbgBjAHQAaQBvAG4AKAApADoAIABQAHIAbwBtAGkAcwBlADwAdgBvAGkAZAA%2BACAAewAKACAAIAAgACAAYwBvAG4AcwBvAGwAZQAuAGwAbwBnACgAJwBoAGkAIABmAHIAbwBtACAAYQBzAHkAbgBjACAAbQBlAHQAaABvAGQAJwApAAoAIAAgAH0ACgB9AAoACgBjAG8AbgBzAHQAIABpAG4AcwB0AGEAbgBjAGUAOgAgAEEAIAA9ACAAbgBlAHcAIABCACgAKQAKAGkAZgAgACgAaQBuAHMAdABhAG4AYwBlACAAaQBuAHMAdABhAG4AYwBlAG8AZgAgAEIAKQAgAHsACgAgACAALwAvACAAZgBhAGwAcwBlACAAbgBlAGcAYQB0AGkAdgBlAAoAIAAgAGkAbgBzAHQAYQBuAGMAZQAuAGEAcwB5AG4AYwBGAHUAbgBjAHQAaQBvAG4AKAApAAoAfQAKAAoALwAqACoAIAB3AGkAdABoACAAdAB5AHAAZQBzACAAKgAvAAoAdAB5AHAAZQAgAEEAdAAgAD0AIAB7AAoAIAAgAGMAYQBzAGUAOgAgACcAYQAnAAoAfQAgAHwAIAB7AAoAIAAgAGMAYQBzAGUAOgAgACcAYgAnAAoAIAAgAGEAcwB5AG4AYwBGAG4AOgAgACgAKQAgAD0APgAgAFAAcgBvAG0AaQBzAGUAPAB2AG8AaQBkAD4ALAAKAH0ACgBjAG8AbgBzAHQAIABhADoAIABBAHQAIAA9ACAAewAKACAAIABjAGEAcwBlADoAIAAnAGIAJwAsAAoAIAAgAGEAcwB5AG4AYwBGAG4AOgAgAGEAcwB5AG4AYwAgACgAKQAgAD0APgAgAHsACgAgACAAIAAgAGMAbwBuAHMAbwBsAGUALgBsAG8AZwAoACcAaABpACAAZgByAG8AbQAgAGEAcwB5AG4AYwAgAGYAdQBuAGMAdABpAG8AbgAnACkACgAgACAAfQAsAAoAfQAKAGkAZgAgACgAYQAuAGMAYQBzAGUAIAA9AD0APQAgACcAYgAnACkAIAB7AAoAIAAgAC8ALwAgAGYAYQBsAHMAZQAgAG4AZQBnAGEAdABpAHYAZQAKACAAIABhAC4AYQBzAHkAbgBjAEYAbgAoACkACgB9AA%3D%3D

Expected result

Using noFloatingPromises, errors should be reported on line 12 and 30:

A "floating" Promise was found, meaning it is not properly handled and could lead to ignored errors or unexpected behavior.`

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No fields configured for Task.

    Projects

    Status
    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions