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.
A "floating" Promise was found, meaning it is not properly handled and could lead to ignored errors or unexpected behavior.`
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: