@@ -54,6 +54,7 @@ def main() -> None:
5454def 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
116126if __name__ == "__main__" :
0 commit comments