Skip to content

Commit 976b53b

Browse files
committed
vscode_extension: Add unknown parameters dynamically
1 parent 78930d6 commit 976b53b

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

scripts/vscode_extension.py

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
from dataclasses import dataclass
2+
import inspect
23

34

45
JSONSchemaType = 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

138142
def 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

Comments
 (0)