22
33from typing import Callable , Optional
44
5- from mypy .nodes import MDEF , SymbolTableNode , Var
5+ from mypy .nodes import MDEF , DataclassTransformSpec , SymbolTableNode , Var
66from mypy .plugin import ClassDefContext , Plugin
77from mypy .plugins .dataclasses import DataclassTransformer
88from mypy .types import AnyType , TypeOfAny
@@ -13,26 +13,53 @@ def get_class_decorator_hook(
1313 self , fullname : str
1414 ) -> Optional [Callable [[ClassDefContext ], None ]]:
1515 if fullname .endswith (".datafile" ):
16- return datafile_class_maker_callback
16+ return self . datafile_class_maker_callback
1717 return None
1818
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 ()
1923
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 )
2329
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 )
2935
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 )
3560
3661
3762def mypy (version : str ):
63+ if version < "1.1" :
64+ return DatafilesPluginLegacy
3865 return DatafilesPlugin
0 commit comments