Is your feature request related to a problem? Please describe.
It's common for unit tests (based on unittest) to assert that an object is non-None and then verify some of its attributes.
def test_object(self):
obj = load_object_by_name('name') # type: Optional[Object]
self.assertIsNotNone(obj)
self.assertEqual('name', obj.name)
Pyright will flag that last line for reportOptionalMemberAccess, even though we've performed an (implied) "is not None" check via assertIsNotNone.
There are three workarounds:
Somewhat redundant
def test_object(self):
obj = load_object_by_name('name') # type: Optional[Object]
self.assertIsNotNone(obj)
if obj is not None:
self.assertEqual('name', obj.name)
Very redundant
def test_object(self):
obj = load_object_by_name('name') # type: Optional[Object]
self.assertIsNotNone(obj)
assert is not None
self.assertEqual('name', obj.name)
Tricky but concise
def test_object(self):
obj = load_object_by_name('name') # type: Optional[Object]
self.assertIsNotNone(obj)
self.assertEqual('name', obj and obj.name)
Describe the solution you'd like
Because unittest is part of the standard library, it would be convenient if calling assertIsNotNone (and assertIsNone) would be constitute a None check from the type checker's perspective.
Additional context
It might be too magical to apply special treatment to these methods. Perhaps there should (eventually) be a generalized typing facility that assertIsNone/assertIsNotNone could adopt, a la TypeGuard.
Is your feature request related to a problem? Please describe.
It's common for unit tests (based on
unittest) to assert that an object is non-Noneand then verify some of its attributes.Pyright will flag that last line for
reportOptionalMemberAccess, even though we've performed an (implied) "is not None" check viaassertIsNotNone.There are three workarounds:
Somewhat redundant
Very redundant
Tricky but concise
Describe the solution you'd like
Because
unittestis part of the standard library, it would be convenient if callingassertIsNotNone(andassertIsNone) would be constitute aNonecheck from the type checker's perspective.Additional context
It might be too magical to apply special treatment to these methods. Perhaps there should (eventually) be a generalized typing facility that
assertIsNone/assertIsNotNonecould adopt, a laTypeGuard.