11from dataclasses import dataclass
2+ import inspect
23
34
45JSONSchemaType = dict | str | list | int | bool
@@ -94,9 +95,12 @@ class VscConfigurationProperty:
9495 # my own findings
9596 scope : None | str = None
9697
97- @staticmethod
98- def from_dict (data : dict ) -> "VscConfigurationProperty" :
99- return VscConfigurationProperty (** data )
98+ @classmethod
99+ def from_dict (cls , data : dict ) -> "VscConfigurationProperty" :
100+ prop = cls ()
101+ for k , v in data .items ():
102+ setattr (prop , k , v )
103+ return prop
100104
101105
102106@dataclass
@@ -113,8 +117,8 @@ class VscConfiguration:
113117 order : int | None
114118 title : str | None
115119
116- @staticmethod
117- def from_dict (data : dict ) -> "VscConfiguration" :
120+ @classmethod
121+ def from_dict (cls , data : dict ) -> "VscConfiguration" :
118122 id = data .get ("id" )
119123 order = data .get ("order" )
120124 title = data .get ("title" )
@@ -132,7 +136,7 @@ def from_dict(data: dict) -> "VscConfiguration":
132136 VscConfigurationPropertyNamed (name , prop )
133137 for name , prop in properties .items ()
134138 ]
135- return VscConfiguration (properties , properties_named , id , order , title )
139+ return cls (properties , properties_named , id , order , title )
136140
137141
138142def conf_is_not_generated (conf : dict ) -> bool :
@@ -148,8 +152,8 @@ class VscExtensionContributions:
148152 configuration : list [VscConfiguration ]
149153 rest : dict | None
150154
151- @staticmethod
152- def from_dict (data : dict ) -> "VscExtensionContributions" :
155+ @classmethod
156+ def from_dict (cls , data : dict ) -> "VscExtensionContributions" :
153157 configuration = data .pop ("configuration" )
154158 # make it always into a list
155159 if not isinstance (configuration , list ):
@@ -161,7 +165,7 @@ def from_dict(data: dict) -> "VscExtensionContributions":
161165 lambda conf : conf .get ("properties" ) is not None , configuration
162166 )
163167 configuration = [VscConfiguration .from_dict (conf ) for conf in configuration ]
164- return VscExtensionContributions (configuration , data )
168+ return cls (configuration , data )
165169
166170
167171@dataclass
@@ -170,10 +174,10 @@ class VscExtensionManifest:
170174 contributes : VscExtensionContributions
171175 rest : dict | None
172176
173- @staticmethod
174- def from_dict (data : dict ) -> "VscExtensionManifest" :
177+ @classmethod
178+ def from_dict (cls , data : dict ) -> "VscExtensionManifest" :
175179 # contributes = data["contributes"]["configuration"]["properties"]
176180 name = data .pop ("name" )
177181 contributes = data .pop ("contributes" )
178182 contributes = VscExtensionContributions .from_dict (contributes )
179- return VscExtensionManifest (name , contributes , data )
183+ return cls (name , contributes , data )
0 commit comments