Closed
Description
warn_no_return
is on by default, but does not take into account that None
is returned explicitly.
I think it should maybe only warn if the return type does not include None
(i.e. uses typing.Optional
).
Given t_mypy.py:
import typing
def no_return_optional(arg) -> typing.Optional[str]:
if arg:
return "false"
def no_return(arg) -> str:
if arg:
return "false"
a1 = no_return_optional(True)
a2 = no_return_optional(False)
reveal_type(a1)
reveal_type(a2)
b1 = no_return(True)
b2 = no_return(False)
reveal_type(b1)
reveal_type(b2)
mypy --warn-no-return
shows:
t_mypy.py:4: error: Missing return statement
t_mypy.py:9: error: Missing return statement
t_mypy.py:16: note: Revealed type is 'Union[builtins.str, None]'
t_mypy.py:17: note: Revealed type is 'Union[builtins.str, None]'
t_mypy.py:21: note: Revealed type is 'builtins.str'
t_mypy.py:22: note: Revealed type is 'builtins.str'
Found 2 errors in 1 file (checked 1 source file)
mypy --no-warn-no-return
does not show any error, but should warn/error about the missing return statement / wrong return value for no_return
(which is annotated to return str
, but might return None
).
mypy 0.730+dev.28423cd78062b81365ec9aaa591b4e823af1606d