@@ -19,54 +19,74 @@ class A:
1919
2020class Parent :
2121 def foo (self ): ...
22+
2223 @ property
2324 def my_property1 (self ) -> int : ...
25+
2426 @ property
2527 def my_property2 (self ) -> int : ...
28+
2629 baz = None
30+
2731 @ classmethod
2832 def class_method1 (cls ) -> int : ...
33+
2934 @ staticmethod
3035 def static_method1 () -> int : ...
36+
3137 @ classmethod
3238 def class_method2 (cls ) -> int : ...
39+
3340 @ staticmethod
3441 def static_method2 () -> int : ...
42+
3543 @lossy_decorator
3644 def decorated_1 (self ): ...
45+
3746 @lossy_decorator
3847 def decorated_2 (self ): ...
48+
3949 @lossy_decorator
4050 def decorated_3 (self ): ...
4151
4252class Child (Parent ):
4353 @override
4454 def foo (self ): ... # fine: overrides `Parent.foo`
55+
4556 @ property
4657 @override
4758 def my_property1 (self ) -> int : ... # fine: overrides `Parent.my_property1`
59+
4860 @override
4961 @ property
5062 def my_property2 (self ) -> int : ... # fine: overrides `Parent.my_property2`
63+
5164 @override
5265 def baz (self ): ... # fine: overrides `Parent.baz`
66+
5367 @ classmethod
5468 @override
5569 def class_method1 (cls ) -> int : ... # fine: overrides `Parent.class_method1`
70+
5671 @ staticmethod
5772 @override
5873 def static_method1 () -> int : ... # fine: overrides `Parent.static_method1`
74+
5975 @override
6076 @ classmethod
6177 def class_method2 (cls ) -> int : ... # fine: overrides `Parent.class_method2`
78+
6279 @override
6380 @ staticmethod
6481 def static_method2 () -> int : ... # fine: overrides `Parent.static_method2`
82+
6583 @override
6684 def decorated_1 (self ): ... # fine: overrides `Parent.decorated_1`
85+
6786 @override
6887 @lossy_decorator
6988 def decorated_2 (self ): ... # fine: overrides `Parent.decorated_2`
89+
7090 @lossy_decorator
7191 @override
7292 def decorated_3 (self ): ... # fine: overrides `Parent.decorated_3`
@@ -76,56 +96,79 @@ class OtherChild(Parent): ...
7696class Grandchild (OtherChild ):
7797 @override
7898 def foo (self ): ... # fine: overrides `Parent.foo`
99+
79100 @override
80101 @ property
81- def bar (self ) -> int : ... # fine: overrides `Parent.bar`
102+ def my_property1 (self ) -> int : ... # fine: overrides `Parent.my_property1`
103+
82104 @override
83105 def baz (self ): ... # fine: overrides `Parent.baz`
106+
84107 @ classmethod
85108 @override
86109 def class_method1 (cls ) -> int : ... # fine: overrides `Parent.class_method1`
110+
87111 @ staticmethod
88112 @override
89113 def static_method1 () -> int : ... # fine: overrides `Parent.static_method1`
114+
90115 @override
91116 @ classmethod
92117 def class_method2 (cls ) -> int : ... # fine: overrides `Parent.class_method2`
118+
93119 @override
94120 @ staticmethod
95121 def static_method2 () -> int : ... # fine: overrides `Parent.static_method2`
122+
96123 @override
97124 def decorated_1 (self ): ... # fine: overrides `Parent.decorated_1`
125+
98126 @override
99127 @lossy_decorator
100128 def decorated_2 (self ): ... # fine: overrides `Parent.decorated_2`
129+
101130 @lossy_decorator
102131 @override
103132 def decorated_3 (self ): ... # fine: overrides `Parent.decorated_3`
104133
105134class Invalid :
106135 @override
107136 def ___reprrr__ (self ): ... # error: [invalid-explicit-override]
137+
108138 @override
109139 @ classmethod
110140 def foo (self ): ... # error: [invalid-explicit-override]
141+
111142 @ classmethod
112143 @override
113144 def bar (self ): ... # error: [invalid-explicit-override]
145+
114146 @ staticmethod
115147 @override
116148 def baz (): ... # error: [invalid-explicit-override]
149+
117150 @override
118151 @ staticmethod
119152 def eggs (): ... # error: [invalid-explicit-override]
153+
120154 @ property
121155 @override
122- def bad_property1 (self ) -> int : ... # TODO : should emit `invalid-explicit-override` here
156+ def bad_property1 (self ) -> int : ... # error: [invalid-explicit-override]
157+
123158 @override
124159 @ property
125- def bad_property2 (self ) -> int : ... # TODO : should emit `invalid-explicit-override` here
160+ def bad_property2 (self ) -> int : ... # error: [invalid-explicit-override]
161+
162+ @ property
163+ @override
164+ def bad_settable_property (self ) -> int : ... # error: [invalid-explicit-override]
165+ @bad_settable_property.setter
166+ def bad_settable_property (self , x : int ) -> None : ...
167+
126168 @lossy_decorator
127169 @override
128170 def lossy (self ): ... # TODO : should emit `invalid-explicit-override` here
171+
129172 @override
130173 @lossy_decorator
131174 def lossy2 (self ): ... # TODO : should emit `invalid-explicit-override` here
@@ -136,11 +179,14 @@ class LiskovViolatingButNotOverrideViolating(Parent):
136179 @override
137180 @ property
138181 def foo (self ) -> int : ...
182+
139183 @override
140184 def my_property1 (self ) -> int : ...
185+
141186 @ staticmethod
142187 @override
143188 def class_method1 () -> int : ...
189+
144190 @ classmethod
145191 @override
146192 def static_method1 (cls ) -> int : ...
0 commit comments