2
2
3
3
from typing import Callable , Optional
4
4
5
- from mypy .nodes import MDEF , SymbolTableNode , Var
5
+ from mypy .nodes import MDEF , DataclassTransformSpec , SymbolTableNode , Var
6
6
from mypy .plugin import ClassDefContext , Plugin
7
7
from mypy .plugins .dataclasses import DataclassTransformer
8
8
from mypy .types import AnyType , TypeOfAny
@@ -13,26 +13,53 @@ def get_class_decorator_hook(
13
13
self , fullname : str
14
14
) -> Optional [Callable [[ClassDefContext ], None ]]:
15
15
if fullname .endswith (".datafile" ):
16
- return datafile_class_maker_callback
16
+ return self . datafile_class_maker_callback
17
17
return None
18
18
19
+ def datafile_class_maker_callback (self , ctx : ClassDefContext ) -> None :
20
+ # Inherit all type definitions from dataclasses
21
+ spec = DataclassTransformSpec ()
22
+ DataclassTransformer (ctx .cls , ctx .reason , spec , ctx .api ).transform ()
19
23
20
- def datafile_class_maker_callback (ctx : ClassDefContext ) -> None :
21
- # Inherit all type definitions from dataclasses
22
- DataclassTransformer (ctx ).transform ()
24
+ # Define 'objects' as a class property
25
+ var = Var ("objects" , AnyType (TypeOfAny .unannotated ))
26
+ var .info = ctx .cls .info
27
+ var .is_property = True
28
+ ctx .cls .info .names [var .name ] = SymbolTableNode (MDEF , var )
23
29
24
- # Define 'objects ' as a class propery
25
- var = Var ("objects " , AnyType (TypeOfAny .unannotated ))
26
- var .info = ctx .cls .info
27
- var .is_property = True
28
- ctx .cls .info .names [var .name ] = SymbolTableNode (MDEF , var )
30
+ # Define 'datafile ' as an instance property
31
+ var = Var ("datafile " , AnyType (TypeOfAny .unannotated ))
32
+ var .info = ctx .cls .info
33
+ var .is_property = True
34
+ ctx .cls .info .names [var .name ] = SymbolTableNode (MDEF , var )
29
35
30
- # Define 'datafile' as an instance property
31
- var = Var ("datafile" , AnyType (TypeOfAny .unannotated ))
32
- var .info = ctx .cls .info
33
- var .is_property = True
34
- ctx .cls .info .names [var .name ] = SymbolTableNode (MDEF , var )
36
+
37
+ class DatafilesPluginLegacy (Plugin ):
38
+ def get_class_decorator_hook (
39
+ self , fullname : str
40
+ ) -> Optional [Callable [[ClassDefContext ], None ]]:
41
+ if fullname .endswith (".datafile" ):
42
+ return self .datafile_class_maker_callback
43
+ return None
44
+
45
+ def datafile_class_maker_callback (self , ctx : ClassDefContext ) -> None :
46
+ # Inherit all type definitions from dataclasses
47
+ DataclassTransformer (ctx ).transform () # type: ignore
48
+
49
+ # Define 'objects' as a class property
50
+ var = Var ("objects" , AnyType (TypeOfAny .unannotated ))
51
+ var .info = ctx .cls .info
52
+ var .is_property = True
53
+ ctx .cls .info .names [var .name ] = SymbolTableNode (MDEF , var )
54
+
55
+ # Define 'datafile' as an instance property
56
+ var = Var ("datafile" , AnyType (TypeOfAny .unannotated ))
57
+ var .info = ctx .cls .info
58
+ var .is_property = True
59
+ ctx .cls .info .names [var .name ] = SymbolTableNode (MDEF , var )
35
60
36
61
37
62
def mypy (version : str ):
63
+ if version < "1.1" :
64
+ return DatafilesPluginLegacy
38
65
return DatafilesPlugin
0 commit comments