Skip to content

non-exhaustive-match false positive for utility / "self" functions on the enum. #2080

@samskiter

Description

@samskiter

Describe the Bug

When adding a utility/helper function to an enum, pyrefly doesn't seem able to understand the type of self and that a match statement is, in-fact, exhaustive

from __future__ import annotations
from typing import *
from enum import Enum

class MyEnum(Enum):
    CaseA = 0
    CaseB = 1

    def isA(self: MyEnum) -> bool:
        match self:
            case MyEnum.CaseA: return True
            case MyEnum.CaseB: return False
        return False

    def isB(self) -> bool:
        match self: # <- False positive here
            case MyEnum.CaseA: return False
            case MyEnum.CaseB: return True
        return False

def isMyEnumA(val)-> bool:
    match val:
        case MyEnum.CaseA: return True
        case MyEnum.CaseB: return False
    return False

print(MyEnum.CaseA.isA())
print(MyEnum.CaseB.isB())

Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeS4ATrgLYAEA%2Bg2AK4AuLlMTdENxuSmzoZ0uNqjYRc6OAB10YavTaliEdAHNe-QcIBUCpbTox0LenwFC6AUXM0FCgMZRUcOHQCypexYAUfjQAlIgKdBF0AMLuMACCdAC8dAAM4ZExcDAAQkl0AIxO6JF0mDBgvHBx-llQYIjevg7BdAC0AHx0eLhQYcUlkTSSzgAWdLX16QMDzrGNQYSZ8Q1cHJTFACqULDBT05GzWfMOi7HZKzBrxQBiqFBZeyWrnDd3D%2Bh7ZRUQcNk1MHUWh0urgen19nQhmxRuMAZN%2BhCIocYMcLKcsnELlc6Ld7rsEYjkaiaOicliXnQtjtHpFnuscW98QovpUfEFqgA3O7BYHdXp7KEwrn8gklIlsk5LTF0Ombbb4iHippopbnGWXCm495PDX0rVM9DESgaNj%2BCUq2JxQg-arBYIKI0ms3Kkmq62-fx2kAAGhA7GgcBI5EQIAAxHQAKpSKAQVR0VjoZxSGTyD5YcrxwRQhgObAwSj%2BfANE1AzpwNiUcG03XFMByEAAOQsecrdGA%2BAAvvWFD6QGQuGAoKRCGxaFAKOGAAqkAdD8YYHAEOjOGSQTScSTSdCEBThgDKMBRIzYbGIcEQAHoL-3ykPCIJNBezBfMLhnHALyvFBB15RNzIL0zSgRC5aBUGwWBl1XH8N2TYpcGIODAwdUg2BGGRWg5fM4C3PJ6wAZkIfIACZu3QEAO19VAkwgLDrmgGAKDQLA8CIMgKKAA

(Only applicable for extension issues) IDE Information

WARN sandbox.py:16:15-19: Match on Self@MyEnum is not exhaustive [non-exhaustive-match]

Metadata

Metadata

Assignees

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions