From cb6c13f4ffb1fedb057ff87baa3724fa37dab7ed Mon Sep 17 00:00:00 2001 From: Harald Husum Date: Thu, 26 Sep 2024 12:08:47 +0200 Subject: [PATCH 1/8] Add xfailing test for [func-returns-value] --- test-data/unit/check-errorcodes.test | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/test-data/unit/check-errorcodes.test b/test-data/unit/check-errorcodes.test index 10cc145d0c70..9af0d9075b5a 100644 --- a/test-data/unit/check-errorcodes.test +++ b/test-data/unit/check-errorcodes.test @@ -563,6 +563,14 @@ y = A().g() # E: "g" of "A" does not return a value (it only ever returns None) c: Callable[[], None] z = c() # E: Function does not return a value (it only ever returns None) [func-returns-value] +[case testErrorCodeStaticmethodDoesNotReturnValue-xfail] +class A: + @staticmethod + def g() -> None: pass + +y1 = A.g() # E: "g" of "A" does not return a value (it only ever returns None) [func-returns-value] +y2 = A().g() # E: "g" of "A" does not return a value (it only ever returns None) [func-returns-value] + [case testErrorCodeInstantiateAbstract] from abc import abstractmethod From fd84561984a55d38cc26b7b6af0055636ae8100d Mon Sep 17 00:00:00 2001 From: Harald Husum Date: Thu, 26 Sep 2024 20:20:44 +0200 Subject: [PATCH 2/8] Reference issue --- test-data/unit/check-errorcodes.test | 1 + 1 file changed, 1 insertion(+) diff --git a/test-data/unit/check-errorcodes.test b/test-data/unit/check-errorcodes.test index 9af0d9075b5a..0606b8ead0d8 100644 --- a/test-data/unit/check-errorcodes.test +++ b/test-data/unit/check-errorcodes.test @@ -564,6 +564,7 @@ c: Callable[[], None] z = c() # E: Function does not return a value (it only ever returns None) [func-returns-value] [case testErrorCodeStaticmethodDoesNotReturnValue-xfail] +# See: https://github.com/python/mypy/issues/14179 class A: @staticmethod def g() -> None: pass From fa160e762dcfb5d53a207fba4193b79b7c9d5c8e Mon Sep 17 00:00:00 2001 From: Harald Husum Date: Thu, 26 Sep 2024 22:32:52 +0200 Subject: [PATCH 3/8] Update test-data/unit/check-errorcodes.test Co-authored-by: Brian Schubert --- test-data/unit/check-errorcodes.test | 1 + 1 file changed, 1 insertion(+) diff --git a/test-data/unit/check-errorcodes.test b/test-data/unit/check-errorcodes.test index 0606b8ead0d8..4fe4111441ca 100644 --- a/test-data/unit/check-errorcodes.test +++ b/test-data/unit/check-errorcodes.test @@ -571,6 +571,7 @@ class A: y1 = A.g() # E: "g" of "A" does not return a value (it only ever returns None) [func-returns-value] y2 = A().g() # E: "g" of "A" does not return a value (it only ever returns None) [func-returns-value] +[builtins fixtures/staticmethod.pyi] [case testErrorCodeInstantiateAbstract] from abc import abstractmethod From ca5d23598db809e70180bd2a8487bdf2526cf16b Mon Sep 17 00:00:00 2001 From: Harald Husum Date: Fri, 27 Sep 2024 10:04:06 +0200 Subject: [PATCH 4/8] Move test and expand it with another decorator example --- test-data/unit/check-errorcodes.test | 10 ---------- test-data/unit/check-expressions.test | 24 ++++++++++++++++++++++++ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/test-data/unit/check-errorcodes.test b/test-data/unit/check-errorcodes.test index 4fe4111441ca..10cc145d0c70 100644 --- a/test-data/unit/check-errorcodes.test +++ b/test-data/unit/check-errorcodes.test @@ -563,16 +563,6 @@ y = A().g() # E: "g" of "A" does not return a value (it only ever returns None) c: Callable[[], None] z = c() # E: Function does not return a value (it only ever returns None) [func-returns-value] -[case testErrorCodeStaticmethodDoesNotReturnValue-xfail] -# See: https://github.com/python/mypy/issues/14179 -class A: - @staticmethod - def g() -> None: pass - -y1 = A.g() # E: "g" of "A" does not return a value (it only ever returns None) [func-returns-value] -y2 = A().g() # E: "g" of "A" does not return a value (it only ever returns None) [func-returns-value] -[builtins fixtures/staticmethod.pyi] - [case testErrorCodeInstantiateAbstract] from abc import abstractmethod diff --git a/test-data/unit/check-expressions.test b/test-data/unit/check-expressions.test index d5ddc910bcd6..4f97aa7c10fc 100644 --- a/test-data/unit/check-expressions.test +++ b/test-data/unit/check-expressions.test @@ -1144,6 +1144,30 @@ f() and b # E: "f" does not return a value (it only ever returns None) b or f() # E: "f" does not return a value (it only ever returns None) [builtins fixtures/bool.pyi] +[case testNoneReturnWithDecorators-xfail] +# See: https://github.com/python/mypy/issues/14179 +from typing import Callable, TypeVar + +F = TypeVar('F', bound=Callable) + +def deco(f: F) -> F: + pass + +@deco +@deco +def f() -> None: + pass + +y1 = f() # E: "f" does not return a value (it only ever returns None) [func-returns-value] + +class A: + @staticmethod + def g() -> None: pass + +y2 = A.g() # E: "g" of "A" does not return a value (it only ever returns None) [func-returns-value] +y3 = A().g() # E: "g" of "A" does not return a value (it only ever returns None) [func-returns-value] +[builtins fixtures/staticmethod.pyi] + -- Slicing -- ------- From 041a9fed8afc84650995ff05b567d5d2fae0ee74 Mon Sep 17 00:00:00 2001 From: Harald Husum Date: Fri, 27 Sep 2024 11:08:36 +0200 Subject: [PATCH 5/8] Add xfailing test for callable --- test-data/unit/check-expressions.test | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test-data/unit/check-expressions.test b/test-data/unit/check-expressions.test index 4f97aa7c10fc..025e1489785b 100644 --- a/test-data/unit/check-expressions.test +++ b/test-data/unit/check-expressions.test @@ -1168,6 +1168,12 @@ y2 = A.g() # E: "g" of "A" does not return a value (it only ever returns None) y3 = A().g() # E: "g" of "A" does not return a value (it only ever returns None) [func-returns-value] [builtins fixtures/staticmethod.pyi] +[case testNoneReturnWithCallable-xfail] +class A: + def __call__(self) -> None: pass + +y = A()() # E: "__call__" of "A" does not return a value (it only ever returns None) [func-returns-value] + -- Slicing -- ------- From 7e2a820b89194be6cd0dfc04a8b9124f6645864a Mon Sep 17 00:00:00 2001 From: Harald Husum Date: Fri, 27 Sep 2024 18:38:04 +0200 Subject: [PATCH 6/8] Update check-expressions.test Co-authored-by: Brian Schubert --- test-data/unit/check-expressions.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-data/unit/check-expressions.test b/test-data/unit/check-expressions.test index 025e1489785b..bb08daf3155c 100644 --- a/test-data/unit/check-expressions.test +++ b/test-data/unit/check-expressions.test @@ -1158,7 +1158,7 @@ def deco(f: F) -> F: def f() -> None: pass -y1 = f() # E: "f" does not return a value (it only ever returns None) [func-returns-value] +y1 = f() # E: "f" does not return a value (it only ever returns None) class A: @staticmethod From 22b825971307c8af00b74655fa16423cd0c17893 Mon Sep 17 00:00:00 2001 From: Harald Husum Date: Fri, 27 Sep 2024 18:38:13 +0200 Subject: [PATCH 7/8] Update check-expressions.test Co-authored-by: Brian Schubert --- test-data/unit/check-expressions.test | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test-data/unit/check-expressions.test b/test-data/unit/check-expressions.test index bb08daf3155c..67010b399c73 100644 --- a/test-data/unit/check-expressions.test +++ b/test-data/unit/check-expressions.test @@ -1164,8 +1164,8 @@ class A: @staticmethod def g() -> None: pass -y2 = A.g() # E: "g" of "A" does not return a value (it only ever returns None) [func-returns-value] -y3 = A().g() # E: "g" of "A" does not return a value (it only ever returns None) [func-returns-value] +y2 = A.g() # E: "g" of "A" does not return a value (it only ever returns None) +y3 = A().g() # E: "g" of "A" does not return a value (it only ever returns None) [builtins fixtures/staticmethod.pyi] [case testNoneReturnWithCallable-xfail] From 48914fd13bdce729fdbcfdbcefc7c7159d077a45 Mon Sep 17 00:00:00 2001 From: Harald Husum Date: Fri, 27 Sep 2024 18:38:52 +0200 Subject: [PATCH 8/8] Update check-expressions.test Co-authored-by: Brian Schubert --- test-data/unit/check-expressions.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test-data/unit/check-expressions.test b/test-data/unit/check-expressions.test index 67010b399c73..0791762759b9 100644 --- a/test-data/unit/check-expressions.test +++ b/test-data/unit/check-expressions.test @@ -1172,7 +1172,7 @@ y3 = A().g() # E: "g" of "A" does not return a value (it only ever returns None class A: def __call__(self) -> None: pass -y = A()() # E: "__call__" of "A" does not return a value (it only ever returns None) [func-returns-value] +y = A()() # E: Function does not return a value (it only ever returns None) -- Slicing