Skip to content

Commit 6c2355a

Browse files
committed
Test import from typing_extensions
Also, mark the import from typing as Python 3.12 only. And change the message a bit.
1 parent 12c0968 commit 6c2355a

File tree

3 files changed

+28
-8
lines changed

3 files changed

+28
-8
lines changed

mypy/messages.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1410,7 +1410,7 @@ def cant_assign_to_classvar(self, name: str, context: Context) -> None:
14101410
def no_overridable_method(self, name: str, context: Context) -> None:
14111411
self.fail(
14121412
f'Method "{name}" is marked as an override, '
1413-
"but no base method with this name was found",
1413+
"but no base method was found with this name",
14141414
context,
14151415
)
14161416

test-data/unit/check-functions.test

+25-7
Original file line numberDiff line numberDiff line change
@@ -2727,12 +2727,13 @@ g: Callable[[Union[Sequence[TI], Sequence[TS]]], None]
27272727
f = g
27282728

27292729
[case explicitOverride]
2730+
# flags: --python-version 3.12
27302731
from typing import override
27312732

27322733
class A:
27332734
def f(self, x: int) -> str: pass
27342735
@override
2735-
def g(self, x: int) -> str: pass # E: Method "g" is marked as an override, but no base method with this name was found
2736+
def g(self, x: int) -> str: pass # E: Method "g" is marked as an override, but no base method was found with this name
27362737

27372738
class B(A):
27382739
@override
@@ -2756,6 +2757,7 @@ class F(E):
27562757
[builtins fixtures/tuple.pyi]
27572758

27582759
[case explicitOverrideStaticmethod]
2760+
# flags: --python-version 3.12
27592761
from typing import override
27602762

27612763
class A:
@@ -2768,15 +2770,15 @@ class B(A):
27682770
def f(x: int) -> str: pass
27692771
@override
27702772
@staticmethod
2771-
def g(x: int) -> str: pass # E: Method "g" is marked as an override, but no base method with this name was found
2773+
def g(x: int) -> str: pass # E: Method "g" is marked as an override, but no base method was found with this name
27722774

27732775
class C(A): # inverted order of decorators
27742776
@override
27752777
@staticmethod
27762778
def f(x: int) -> str: pass
27772779
@override
27782780
@staticmethod
2779-
def g(x: int) -> str: pass # E: Method "g" is marked as an override, but no base method with this name was found
2781+
def g(x: int) -> str: pass # E: Method "g" is marked as an override, but no base method was found with this name
27802782

27812783
class D(A):
27822784
@staticmethod
@@ -2788,6 +2790,7 @@ class D(A):
27882790
[builtins fixtures/callable.pyi]
27892791

27902792
[case explicitOverrideClassmethod]
2793+
# flags: --python-version 3.12
27912794
from typing import override
27922795

27932796
class A:
@@ -2800,15 +2803,15 @@ class B(A):
28002803
def f(cls, x: int) -> str: pass
28012804
@override
28022805
@classmethod
2803-
def g(cls, x: int) -> str: pass # E: Method "g" is marked as an override, but no base method with this name was found
2806+
def g(cls, x: int) -> str: pass # E: Method "g" is marked as an override, but no base method was found with this name
28042807

28052808
class C(A): # inverted order of decorators
28062809
@override
28072810
@classmethod
28082811
def f(cls, x: int) -> str: pass
28092812
@override
28102813
@classmethod
2811-
def g(cls, x: int) -> str: pass # E: Method "g" is marked as an override, but no base method with this name was found
2814+
def g(cls, x: int) -> str: pass # E: Method "g" is marked as an override, but no base method was found with this name
28122815

28132816
class D(A):
28142817
@classmethod
@@ -2820,6 +2823,7 @@ class D(A):
28202823
[builtins fixtures/callable.pyi]
28212824

28222825
[case explicitOverrideProperty]
2826+
# flags: --python-version 3.12
28232827
from typing import override
28242828

28252829
class A:
@@ -2832,15 +2836,15 @@ class B(A):
28322836
def f(self) -> str: pass
28332837
@override
28342838
@property
2835-
def g(self) -> str: pass # E: Method "g" is marked as an override, but no base method with this name was found
2839+
def g(self) -> str: pass # E: Method "g" is marked as an override, but no base method was found with this name
28362840

28372841
class C(A): # inverted order of decorators
28382842
@override
28392843
@property
28402844
def f(self) -> str: pass
28412845
@override
28422846
@property
2843-
def g(self) -> str: pass # E: Method "g" is marked as an override, but no base method with this name was found
2847+
def g(self) -> str: pass # E: Method "g" is marked as an override, but no base method was found with this name
28442848

28452849
class D(A):
28462850
@property
@@ -2850,6 +2854,7 @@ class D(A):
28502854
[typing fixtures/typing-full.pyi]
28512855

28522856
[case invalidExplicitOverride]
2857+
# flags: --python-version 3.12
28532858
from typing import override
28542859

28552860
@override # E: "override" used with a non-method
@@ -2865,6 +2870,7 @@ def g() -> None:
28652870
[builtins fixtures/tuple.pyi]
28662871

28672872
[case explicitOverrideSpecialMethods]
2873+
# flags: --python-version 3.12
28682874
from typing import override
28692875

28702876
class A:
@@ -2879,3 +2885,15 @@ class C:
28792885
def __init__(self, a: int) -> None: pass
28802886
[typing fixtures/typing-full.pyi]
28812887
[builtins fixtures/tuple.pyi]
2888+
2889+
[case explicitOverrideFromExtensions]
2890+
from typing_extensions import override
2891+
2892+
class A:
2893+
def f(self, x: int) -> str: pass
2894+
2895+
class B(A):
2896+
@override
2897+
def f2(self, x: int) -> str: pass # E: Method "f2" is marked as an override, but no base method was found with this name
2898+
[typing fixtures/typing-full.pyi]
2899+
[builtins fixtures/tuple.pyi]

test-data/unit/lib-stub/typing_extensions.pyi

+2
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,6 @@ def dataclass_transform(
6767
**kwargs: Any,
6868
) -> Callable[[T], T]: ...
6969

70+
def override(__arg: _T) -> _T: ...
71+
7072
_FutureFeatureFixture = 0

0 commit comments

Comments
 (0)