From 9fb7d01568a76ca4546d7d236f3fca427f3b5331 Mon Sep 17 00:00:00 2001 From: Tom Manderson Date: Wed, 8 Feb 2017 18:58:00 +1000 Subject: [PATCH 1/5] Allow Void typed values as returns from None functions --- mypy/checker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mypy/checker.py b/mypy/checker.py index 97d215e3d28b..1af36d600c58 100644 --- a/mypy/checker.py +++ b/mypy/checker.py @@ -1741,7 +1741,7 @@ def check_return_stmt(self, s: ReturnStmt) -> None: if self.is_unusable_type(return_type): # Lambdas are allowed to have a unusable returns. # Functions returning a value of type None are allowed to have a Void return. - if isinstance(self.scope.top_function(), FuncExpr) or isinstance(typ, NoneTyp): + if isinstance(self.scope.top_function(), FuncExpr) or isinstance(typ, (NoneTyp, Void)): return self.fail(messages.NO_RETURN_VALUE_EXPECTED, s) else: From 7017ca3f40681f3bcb2f1ea85d48b4a464e87c77 Mon Sep 17 00:00:00 2001 From: Tom Manderson Date: Wed, 8 Feb 2017 19:57:01 +1000 Subject: [PATCH 2/5] Remove test that explicitly disallows feature --- test-data/unit/check-statements.test | 8 -------- 1 file changed, 8 deletions(-) diff --git a/test-data/unit/check-statements.test b/test-data/unit/check-statements.test index 1fa0cdcc6342..b381336bd820 100644 --- a/test-data/unit/check-statements.test +++ b/test-data/unit/check-statements.test @@ -39,14 +39,6 @@ class A: [out] main:3: error: Return value expected -[case testReturnNoneInFunctionReturningNone] -import typing -def f() -> None: - return None -def g() -> None: - return f() # E: No return value expected -[out] - [case testReturnInGenerator] from typing import Generator def f() -> Generator[int, None, str]: From 91ee7ea8d9be55a27c18ad860254e7cd9a5b9378 Mon Sep 17 00:00:00 2001 From: Tom Manderson Date: Wed, 8 Feb 2017 20:01:07 +1000 Subject: [PATCH 3/5] Fix linter error --- mypy/checker.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mypy/checker.py b/mypy/checker.py index 1af36d600c58..a810d8f6b335 100644 --- a/mypy/checker.py +++ b/mypy/checker.py @@ -1741,7 +1741,8 @@ def check_return_stmt(self, s: ReturnStmt) -> None: if self.is_unusable_type(return_type): # Lambdas are allowed to have a unusable returns. # Functions returning a value of type None are allowed to have a Void return. - if isinstance(self.scope.top_function(), FuncExpr) or isinstance(typ, (NoneTyp, Void)): + if isinstance(self.scope.top_function(), FuncExpr) or \ + isinstance(typ, (NoneTyp, Void)): return self.fail(messages.NO_RETURN_VALUE_EXPECTED, s) else: From cb16df2cbbef22f2ac4790be22ec33af3228178d Mon Sep 17 00:00:00 2001 From: Tom Manderson Date: Tue, 7 Mar 2017 10:20:30 +1000 Subject: [PATCH 4/5] Revert "Remove test that explicitly disallows feature" This reverts commit 7017ca3f40681f3bcb2f1ea85d48b4a464e87c77. --- test-data/unit/check-statements.test | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test-data/unit/check-statements.test b/test-data/unit/check-statements.test index b381336bd820..1fa0cdcc6342 100644 --- a/test-data/unit/check-statements.test +++ b/test-data/unit/check-statements.test @@ -39,6 +39,14 @@ class A: [out] main:3: error: Return value expected +[case testReturnNoneInFunctionReturningNone] +import typing +def f() -> None: + return None +def g() -> None: + return f() # E: No return value expected +[out] + [case testReturnInGenerator] from typing import Generator def f() -> Generator[int, None, str]: From 1ea6f174afd9ced1e15c1bbbbf08ee577555df6b Mon Sep 17 00:00:00 2001 From: Tom Manderson Date: Tue, 7 Mar 2017 10:21:24 +1000 Subject: [PATCH 5/5] Remove error message from test case that no longer errors --- test-data/unit/check-statements.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-data/unit/check-statements.test b/test-data/unit/check-statements.test index 1fa0cdcc6342..3660606fcd7d 100644 --- a/test-data/unit/check-statements.test +++ b/test-data/unit/check-statements.test @@ -44,7 +44,7 @@ import typing def f() -> None: return None def g() -> None: - return f() # E: No return value expected + return f() [out] [case testReturnInGenerator]