Adds docs about exhaustive literal and enum checks - #10860
Conversation
ilevkivskyi
left a comment
There was a problem hiding this comment.
Thanks! Looks good, but I have couple suggestions.
|
|
||
| PossibleValues = Literal['one', 'two'] | ||
|
|
||
| def assert_exhaustive(value: NoReturn) -> NoReturn: |
There was a problem hiding this comment.
People actually often call this function assert_never() it can be used is some other cases where people want to check statically some will not be executed.
| return False | ||
| assert_exhaustive(x) # E: Argument 1 to "assert_exhaustive" has incompatible type "Literal['three']"; expected "NoReturn" | ||
|
|
||
| This technique works with ``Enum`` values as well. |
There was a problem hiding this comment.
I would move the Enum reference to the start, and maybe even make this a default example (while mentioning it also works for literal types with a short example). IMO literal types are more for legacy code, while enums are the future.
|
@ilevkivskyi thanks a lot for the review! Fixed 👍 |
| return True | ||
| elif x == 'two': | ||
| return False | ||
| assert_never(x) # E: Argument 1 to "assert_exhaustive" has incompatible type "Literal['three']"; expected "NoReturn" |
There was a problem hiding this comment.
The comment still refers to the old name assert_exhaustive
This feature is not-really known from my experience. I had to explain it several times to other devs.
But, I think that this technique should be widely recognised! It is awesome!
Refs #6366