File tree Expand file tree Collapse file tree 2 files changed +22
-4
lines changed Expand file tree Collapse file tree 2 files changed +22
-4
lines changed Original file line number Diff line number Diff line change @@ -770,7 +770,11 @@ def analyze_base_classes(self, defn: ClassDef) -> None:
770
770
base_types .append (base )
771
771
elif isinstance (base , AnyType ):
772
772
if self .options .disallow_subclassing_any :
773
- self .fail ("Class cannot subclass value of type 'Any'" , base_expr )
773
+ if isinstance (base_expr , RefExpr ):
774
+ msg = "Class cannot subclass '{}' (has type 'Any')" .format (base_expr .name )
775
+ else :
776
+ msg = "Class cannot subclass value of type 'Any'"
777
+ self .fail (msg , base_expr )
774
778
info .fallback_to_any = True
775
779
else :
776
780
self .fail ('Invalid base class' , base_expr )
Original file line number Diff line number Diff line change @@ -41,15 +41,15 @@ main:2: error: Function is missing a type annotation
41
41
# flags: --disallow-subclassing-any
42
42
from typing import Any
43
43
FakeClass = None # type: Any
44
- class Foo(FakeClass): pass # E: Class cannot subclass value of type 'Any'
44
+ class Foo(FakeClass): pass # E: Class cannot subclass 'FakeClass' (has type 'Any')
45
45
[out]
46
46
47
47
[case testSubclassingAnyMultipleBaseClasses]
48
48
# flags: --disallow-subclassing-any
49
49
from typing import Any
50
50
FakeClass = None # type: Any
51
51
class ActualClass: pass
52
- class Foo(ActualClass, FakeClass): pass # E: Class cannot subclass value of type 'Any'
52
+ class Foo(ActualClass, FakeClass): pass # E: Class cannot subclass 'FakeClass' (has type 'Any')
53
53
[out]
54
54
55
55
[case testSubclassingAnySilentImports]
@@ -64,4 +64,18 @@ class Foo(BaseClass): pass
64
64
class BaseClass: pass
65
65
66
66
[out]
67
- tmp/main.py:2: error: Class cannot subclass value of type 'Any'
67
+ tmp/main.py:2: error: Class cannot subclass 'BaseClass' (has type 'Any')
68
+
69
+ [case testSubclassingAnySilentImports2]
70
+ # flags: --disallow-subclassing-any --silent-imports
71
+ # cmd: mypy -m main
72
+
73
+ [file main.py]
74
+ import ignored_module
75
+ class Foo(ignored_module.BaseClass): pass
76
+
77
+ [file ignored_module.py]
78
+ class BaseClass: pass
79
+
80
+ [out]
81
+ tmp/main.py:2: error: Class cannot subclass 'BaseClass' (has type 'Any')
You can’t perform that action at this time.
0 commit comments