Skip to content

False positive unbound-name when using walrus operator #3272

@MarcoGorelli

Description

@MarcoGorelli

Describe the Bug

from typing import Callable, Any

class Cat:
    def equals(self, other: Any) -> bool:
        return False

def main(f: Callable[[], Cat]) -> None:
    while (a := f()).equals(1):
        break

    print(a)

main(lambda: Cat())
(scratch) mgorelli@marcoslaptop:~/scratch$ pyright t.py
0 errors, 0 warnings, 0 informations
(scratch) mgorelli@marcoslaptop:~/scratch$ ty check t.py
All checks passed!
(scratch) mgorelli@marcoslaptop:~/scratch$ pyrefly check t.py
ERROR `a` may be uninitialized [unbound-name]
  --> t.py:11:11
   |
11 |     print(a)
   |           ^
   |
 INFO 1 error

Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeS4ATrgLYAEALqcROgOZ0Q3G6UN0BhVFCipssADR0AgulIAddIoDGouHEGoGiRXT11MMMHRgBHAK7C4ACjgwoYKbgYALGJUQy5ASjoBaAD46PFwoHXR9SLpKGAZzSgiAMSsYRUVDYxpUVmswTyERMVgAbWKAXSkhBjLfQLoAOVx0GHDIgHcXaBg6a1Q6RABeOjBrb29CM0soGwBGb1aovWwY1ABrNIj9YkpWBl7vDayc0RpsTFR8rVGD9BAJEDIYsChSQgZaKAoAYjoABVIni86GgsHh8HRlE1IGx4loIE1CIofgBlGDdFwMBjEOCIAD0uMeRhehF4bFxMHQuMwuGUcFxkPQ0NhDHhlOGvDoqAAbtlROJugymZQ4U06LhiCymnBEegyK4mn4ue44Ky6EN5CAAMyEGYAJg1imK7molDgZUU5nQXB4fBgmD8mAgMWULKVaroAHIIGx0LwYB7FL6GH4YhYnXa-KsYKQ-KhlMp4Bohh62qgEgHbgBfe5x10wRJdCggnAEEjkTNAA

(Only applicable for extension issues) IDE Information

No response

Metadata

Metadata

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions