Skip to content

Commit 3c51888

Browse files
committed
fix: ensure definitions exist when referring to in settings schema
1 parent 7ba05f4 commit 3c51888

File tree

2 files changed

+606
-554
lines changed

2 files changed

+606
-554
lines changed

scripts/update_schema.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def main() -> None:
5454
def read_sublime_package_json() -> tuple[JsonDict, JsonDict]:
5555
with urlopen(PYRIGHT_CONFIGURATION_SCHEMA_URL) as response:
5656
pyrightconfig_schema_json: JsonDict = json.load(response)
57+
create_all_property_definitions(pyrightconfig_schema_json)
5758
sublime_package_schema_json: JsonDict = json.loads(SUBLIME_PACKAGE_JSON_PATH.read_bytes())
5859
return (pyrightconfig_schema_json, sublime_package_schema_json)
5960

@@ -81,13 +82,13 @@ def update_schema(sublime_package_json: JsonDict, pyrightconfig_schema_json: Jso
8182
# get last dotted component.
8283
last_component_key = setting_key.rpartition(".")[2]
8384
if last_component_key in pyrightconfig_properties:
84-
update_property_ref(last_component_key, setting_value, pyrightconfig_properties)
85+
update_property_ref(last_component_key, setting_value)
8586
if setting_key == "python.analysis.diagnosticSeverityOverrides":
8687
overrides_properties: JsonDict = setting_value["properties"]
8788
deleted_keys: set[str] = set()
8889
for override_key, override_value in overrides_properties.items():
8990
if override_key in pyrightconfig_properties:
90-
update_property_ref(override_key, override_value, pyrightconfig_properties)
91+
update_property_ref(override_key, override_value)
9192
else:
9293
deleted_keys.add(override_key)
9394
for key in deleted_keys:
@@ -108,9 +109,18 @@ def update_schema(sublime_package_json: JsonDict, pyrightconfig_schema_json: Jso
108109
return new_schema_keys
109110

110111

111-
def update_property_ref(property_key: str, property_schema: JsonDict, pyrightconfig_properties: JsonDict) -> None:
112+
def update_property_ref(property_key: str, property_schema: JsonDict, *, relative: bool = False) -> None:
112113
property_schema.clear()
113-
property_schema["$ref"] = f"{PYRIGHTCONFIG_SCHEMA_ID}#/definitions/{property_key}"
114+
property_schema["$ref"] = f"{'' if relative else PYRIGHTCONFIG_SCHEMA_ID}#/definitions/{property_key}"
115+
116+
117+
def create_all_property_definitions(pyrightconfig_schema_json: JsonDict) -> None:
118+
"""Modify schema so that there exists an entry in "definitions" for every of "properties"."""
119+
for key, definition in pyrightconfig_schema_json['properties'].items():
120+
if '$ref' in definition:
121+
continue
122+
pyrightconfig_schema_json['definitions'][key] = definition.copy()
123+
update_property_ref(key, definition, relative=True)
114124

115125

116126
if __name__ == "__main__":

0 commit comments

Comments
 (0)