diff options
-rw-r--r-- | .vscode/settings.json | 27 | ||||
-rw-r--r-- | data/schemas/api_keyboard.jsonschema | 6 | ||||
-rw-r--r-- | data/schemas/community_module.jsonschema | 8 | ||||
-rw-r--r-- | data/schemas/keyboard.jsonschema | 290 | ||||
-rw-r--r-- | data/schemas/keycodes.jsonschema | 4 | ||||
-rw-r--r-- | data/schemas/keymap.jsonschema | 16 | ||||
-rw-r--r-- | data/schemas/user_repo_v1.jsonschema | 4 | ||||
-rw-r--r-- | data/schemas/user_repo_v1_1.jsonschema | 6 | ||||
-rw-r--r-- | lib/python/qmk/json_schema.py | 5 |
9 files changed, 197 insertions, 169 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json index f369ecb174..c04ea51de1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -10,6 +10,13 @@ "**/*.uf2": true }, "files.associations": { + // QMK Filetypes + "keyboard.json": "jsonc", + "info.json": "jsonc", + "keymap.json": "jsonc", + "qmk.json": "jsonc", + "qmk_module.json": "jsonc", + // Standard filetypes "*.h": "c", "*.c": "c", "*.inc": "c", @@ -28,7 +35,23 @@ "[json]": { "editor.formatOnSave": false }, - "clangd.arguments": [ - "--header-insertion=never" + "clangd.arguments": ["--header-insertion=never"], + "json.schemas": [ + { + "fileMatch": ["qmk.json"], + "url": "./data/schemas/user_repo_v1_1.jsonschema" + }, + { + "fileMatch": ["qmk_module.json"], + "url": "./data/schemas/community_module.jsonschema" + }, + { + "fileMatch": ["keyboard.json", "info.json"], + "url": "./data/schemas/keyboard.jsonschema" + }, + { + "fileMatch": ["keymap.json"], + "url": "./data/schemas/keymap.jsonschema" + } ] } diff --git a/data/schemas/api_keyboard.jsonschema b/data/schemas/api_keyboard.jsonschema index 6a30b5d990..a3b7872ee0 100644 --- a/data/schemas/api_keyboard.jsonschema +++ b/data/schemas/api_keyboard.jsonschema @@ -1,7 +1,7 @@ { "$id": "qmk.api.keyboard.v1", "allOf": [ - {"$ref": "qmk.keyboard.v1"}, + {"$ref": "./keyboard.jsonschema#"}, { "properties": { "keymaps": { @@ -10,8 +10,8 @@ "url": {"type": "string"} } }, - "parse_errors": {"$ref": "qmk.definitions.v1#/string_array"}, - "parse_warnings": {"$ref": "qmk.definitions.v1#/string_array"}, + "parse_errors": {"$ref": "./definitions.jsonschema#/string_array"}, + "parse_warnings": {"$ref": "./definitions.jsonschema#/string_array"}, "processor_type": {"type": "string"}, "protocol": {"type": "string"}, "keyboard_folder": {"type": "string"}, diff --git a/data/schemas/community_module.jsonschema b/data/schemas/community_module.jsonschema index feced00508..92981ceb5c 100644 --- a/data/schemas/community_module.jsonschema +++ b/data/schemas/community_module.jsonschema @@ -5,14 +5,14 @@ "type": "object", "required": ["module_name", "maintainer"], "properties": { - "module_name": {"$ref": "qmk.definitions.v1#/text_identifier"}, - "maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"}, + "module_name": {"$ref": "./definitions.jsonschema#/text_identifier"}, + "maintainer": {"$ref": "./definitions.jsonschema#/text_identifier"}, "license": {"type": "string"}, "url": { "type": "string", "format": "uri" }, - "keycodes": {"$ref": "qmk.definitions.v1#/keycode_decl_array"}, - "features": {"$ref": "qmk.keyboard.v1#/definitions/features_config"} + "keycodes": {"$ref": "./definitions.jsonschema#/keycode_decl_array"}, + "features": {"$ref": "./keyboard.jsonschema#/definitions/features_config"} } } diff --git a/data/schemas/keyboard.jsonschema b/data/schemas/keyboard.jsonschema index 6c9c703bda..3aa259605e 100644 --- a/data/schemas/keyboard.jsonschema +++ b/data/schemas/keyboard.jsonschema @@ -17,9 +17,9 @@ "additionalProperties": false, "required": ["pin_a", "pin_b"], "properties": { - "pin_a": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "pin_b": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "resolution": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "pin_a": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "pin_b": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "resolution": {"$ref": "./definitions.jsonschema#/unsigned_int"} } } } @@ -28,22 +28,22 @@ "dip_switch_config": { "type": "object", "properties": { - "pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} + "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"} } }, "features_config": { - "$ref": "qmk.definitions.v1#/boolean_array", - "propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"}, + "$ref": "./definitions.jsonschema#/boolean_array", + "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"}, "not": {"required": ["lto"]} } }, "type": "object", "not": {"required": ["vendorId", "productId"]}, // reject via keys... "properties": { - "keyboard_name": {"$ref": "qmk.definitions.v1#/text_identifier"}, - "keyboard_folder": {"$ref": "qmk.definitions.v1#/keyboard"}, - "maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"}, - "manufacturer": {"$ref": "qmk.definitions.v1#/text_identifier"}, + "keyboard_name": {"$ref": "./definitions.jsonschema#/text_identifier"}, + "keyboard_folder": {"$ref": "./definitions.jsonschema#/keyboard"}, + "maintainer": {"$ref": "./definitions.jsonschema#/text_identifier"}, + "manufacturer": {"$ref": "./definitions.jsonschema#/text_identifier"}, "url": { "type": "string", "format": "uri" @@ -119,8 +119,8 @@ "type": "object", "additionalProperties": false, "properties": { - "data_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "clock_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, + "data_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "clock_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}, "default_brightness": { "type": "integer", "minimum": 0, @@ -145,13 +145,13 @@ "enum": ["dac_additive", "dac_basic", "pwm_software", "pwm_hardware"] }, "macro_beep": {"type": "boolean"}, - "pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, + "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}, "power_control": { "type": "object", "additionalProperties": false, "properties": { - "on_state": {"$ref": "qmk.definitions.v1#/bit"}, - "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"} + "on_state": {"$ref": "./definitions.jsonschema#/bit"}, + "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"} } }, "voices": {"type": "boolean"} @@ -171,20 +171,20 @@ "properties": { "on": {"type": "boolean"}, "breathing": {"type": "boolean"}, - "brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} + "brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} } }, "breathing": {"type": "boolean"}, - "breathing_period": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, + "breathing_period": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, "levels": { "type": "integer", "minimum": 1, "maximum": 31 }, - "max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, - "on_state": {"$ref": "qmk.definitions.v1#/bit"}, + "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}, + "on_state": {"$ref": "./definitions.jsonschema#/bit"}, "as_caps_lock": {"type": "boolean"} } }, @@ -269,7 +269,7 @@ "type": "string", "enum": ["COL2ROW", "ROW2COL"] }, - "debounce": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "debounce": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "caps_word": { "type": "object", "additionalProperties": false, @@ -277,20 +277,20 @@ "enabled": {"type": "boolean"}, "both_shifts_turns_on": {"type": "boolean"}, "double_tap_shift_turns_on": {"type": "boolean"}, - "idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "idle_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "invert_on_shift": {"type": "boolean"} } }, "combo": { "type": "object", "properties": { - "count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "term": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "count": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "term": {"$ref": "./definitions.jsonschema#/unsigned_int"} } }, "community_layouts": { "type": "array", - "items": {"$ref": "qmk.definitions.v1#/filename"} + "items": {"$ref": "./definitions.jsonschema#/filename"} }, "dip_switch": { "$ref": "#/definitions/dip_switch_config", @@ -322,8 +322,8 @@ "type": "string", "enum": ["none", "custom", "embedded_flash", "legacy", "rp2040_flash", "spi_flash"] }, - "backing_size": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "logical_size": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "backing_size": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "logical_size": {"$ref": "./definitions.jsonschema#/unsigned_int"} } } } @@ -338,12 +338,12 @@ "indicators": { "type": "object", "properties": { - "caps_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "num_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "scroll_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "compose": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "kana": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "on_state": {"$ref": "qmk.definitions.v1#/bit"} + "caps_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "num_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "scroll_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "compose": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "kana": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "on_state": {"$ref": "./definitions.jsonschema#/bit"} } }, "joystick": { @@ -351,8 +351,8 @@ "properties": { "enabled": {"type": "boolean"}, "driver": {"type": "string"}, - "button_count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "axis_resolution": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "button_count": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "axis_resolution": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "axes": { "type": "object", "propertyNames": {"enum": ["x", "y", "z", "rx", "ry", "rz"]}, @@ -361,10 +361,10 @@ { "type": "object", "properties": { - "input_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "low": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "rest": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "high": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "input_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "low": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "rest": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "high": {"$ref": "./definitions.jsonschema#/unsigned_int"} } }, { @@ -376,20 +376,20 @@ } } }, - "keycodes": {"$ref": "qmk.definitions.v1#/keycode_decl_array"}, + "keycodes": {"$ref": "./definitions.jsonschema#/keycode_decl_array"}, "layer_lock": { "type": "object", "properties": { - "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"} } }, "layout_aliases": { "type": "object", - "additionalProperties": {"$ref": "qmk.definitions.v1#/layout_macro"} + "additionalProperties": {"$ref": "./definitions.jsonschema#/layout_macro"} }, "layouts": { "type": "object", - "propertyNames": {"$ref": "qmk.definitions.v1#/layout_macro"}, + "propertyNames": {"$ref": "./definitions.jsonschema#/layout_macro"}, "additionalProperties": { "type": "object", "additionalProperties": false, @@ -404,7 +404,7 @@ "additionalProperties": false, "required": ["x", "y"], "properties": { - "encoder": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "encoder": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "label": { "type": "string", "pattern": "^[^\\n]*$" @@ -418,13 +418,13 @@ "minimum": 0 } }, - "r": {"$ref": "qmk.definitions.v1#/signed_decimal"}, - "rx": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, - "ry": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, - "h": {"$ref": "qmk.definitions.v1#/key_unit"}, - "w": {"$ref": "qmk.definitions.v1#/key_unit"}, - "x": {"$ref": "qmk.definitions.v1#/key_unit"}, - "y": {"$ref": "qmk.definitions.v1#/key_unit"}, + "r": {"$ref": "./definitions.jsonschema#/signed_decimal"}, + "rx": {"$ref": "./definitions.jsonschema#/unsigned_decimal"}, + "ry": {"$ref": "./definitions.jsonschema#/unsigned_decimal"}, + "h": {"$ref": "./definitions.jsonschema#/key_unit"}, + "w": {"$ref": "./definitions.jsonschema#/key_unit"}, + "x": {"$ref": "./definitions.jsonschema#/key_unit"}, + "y": {"$ref": "./definitions.jsonschema#/key_unit"}, "hand": { "type": "string", "enum": ["L", "R", "*"] @@ -461,7 +461,7 @@ "properties": { "timing": {"type": "boolean"}, "strict_processing": {"type": "boolean"}, - "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"} } }, "matrix_pins": { @@ -471,14 +471,14 @@ "custom": {"type": "boolean"}, "custom_lite": {"type": "boolean"}, "ghost": {"type": "boolean"}, - "input_pressed_state": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "io_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "input_pressed_state": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "io_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "direct": { "type": "array", - "items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} + "items": {"$ref": "./definitions.jsonschema#/mcu_pin_array"} }, - "cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, - "rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} + "cols": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}, + "rows": {"$ref": "./definitions.jsonschema#/mcu_pin_array"} } }, "modules": { @@ -491,18 +491,18 @@ "type": "object", "properties": { "enabled": {"type": "boolean"}, - "delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "wheel_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} + "delay": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "interval": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "max_speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "time_to_max": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "wheel_delay": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} } }, "oneshot": { "type": "object", "properties": { - "tap_toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "tap_toggle": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"} } }, "led_matrix": { @@ -510,7 +510,7 @@ "properties": { "animations": { "type": "object", - "propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"}, + "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"}, "additionalProperties": {"type": "boolean"} }, "default": { @@ -519,8 +519,8 @@ "properties": { "on": {"type": "boolean"}, "animation": {"type": "string"}, - "val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} + "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} } }, "driver": { @@ -546,21 +546,21 @@ "type": "array", "minItems": 2, "maxItems": 2, - "items": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} + "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} }, - "max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "val_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "speed_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "led_flush_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "led_process_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "val_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "speed_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "led_flush_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "led_process_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "react_on_keyup": {"type": "boolean"}, "sleep": {"type": "boolean"}, "split_count": { "type": "array", "minItems": 2, "maxItems": 2, - "items": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "items": {"$ref": "./definitions.jsonschema#/unsigned_int"} }, "layout": { "type": "array", @@ -578,9 +578,9 @@ "minimum": 0 } }, - "x": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "y": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "flags": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} + "x": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "y": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} } } } @@ -591,7 +591,7 @@ "properties": { "animations": { "type": "object", - "propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"}, + "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"}, "additionalProperties": {"type": "boolean"} }, "default": { @@ -600,10 +600,10 @@ "properties": { "on": {"type": "boolean"}, "animation": {"type": "string"}, - "hue": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "sat": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} + "hue": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "sat": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} } }, "driver": { @@ -631,23 +631,23 @@ "type": "array", "minItems": 2, "maxItems": 2, - "items": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} + "items": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} }, - "max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "sat_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "val_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "speed_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "led_flush_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "led_process_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "hue_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "sat_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "val_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "speed_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "led_flush_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "led_process_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "react_on_keyup": {"type": "boolean"}, "sleep": {"type": "boolean"}, "split_count": { "type": "array", "minItems": 2, "maxItems": 2, - "items": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "items": {"$ref": "./definitions.jsonschema#/unsigned_int"} }, "layout": { "type": "array", @@ -665,9 +665,9 @@ "minimum": 0 } }, - "x": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "y": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "flags": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} + "x": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "y": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} } } } @@ -679,27 +679,27 @@ "properties": { "animations": { "type": "object", - "propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"}, + "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"}, "additionalProperties": {"type": "boolean"} }, - "brightness_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "brightness_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "default": { "type": "object", "additionalProperties": false, "properties": { "on": {"type": "boolean"}, "animation": {"type": "string"}, - "hue": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "sat": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} + "hue": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "sat": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"} } }, "driver": { "type": "string", "enum": ["apa102", "custom", "ws2812"] }, - "hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "hue_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "layers": { "type": "object", "additionalProperties": false, @@ -714,29 +714,29 @@ "override_rgb": {"type": "boolean"} } }, - "led_count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "led_count": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "led_map": { "type": "array", "minItems": 2, - "items": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "items": {"$ref": "./definitions.jsonschema#/unsigned_int"} }, - "max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, + "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, "pin": { - "$ref": "qmk.definitions.v1#/mcu_pin", + "$ref": "./definitions.jsonschema#/mcu_pin", "$comment": "Deprecated: use ws2812.pin instead" }, "rgbw": { "type": "boolean", "$comment": "Deprecated: use ws2812.rgbw instead" }, - "saturation_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "saturation_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "sleep": {"type": "boolean"}, "split": {"type": "boolean"}, "split_count": { "type": "array", "minItems": 2, "maxItems": 2, - "items": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "items": {"$ref": "./definitions.jsonschema#/unsigned_int"} } } }, @@ -745,8 +745,8 @@ "additionalProperties": false, "properties": { "enabled": {"type": "boolean"}, - "unlock_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "unlock_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "idle_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "unlock_sequence": { "type": "array", "minItems": 1, @@ -780,8 +780,8 @@ "properties": { "enabled": {"type": "boolean"}, "mouse_enabled": {"type": "boolean"}, - "clock_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "data_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, + "clock_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "data_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}, "driver": { "type": "string", "enum": ["busywait", "interrupt", "usart", "vendor"] @@ -818,11 +818,11 @@ "properties": { "direct": { "type": "array", - "items": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} + "items": {"$ref": "./definitions.jsonschema#/mcu_pin_array"} }, - "cols": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, - "rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, - "unused": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} + "cols": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}, + "rows": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}, + "unused": {"$ref": "./definitions.jsonschema#/mcu_pin_array"} } } } @@ -849,16 +849,16 @@ "type": "object", "additionalProperties": false, "properties": { - "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, + "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}, "matrix_grid": { - "$ref": "qmk.definitions.v1#/mcu_pin_array", + "$ref": "./definitions.jsonschema#/mcu_pin_array", "minItems": 2, "maxItems": 2 } } }, "soft_serial_pin": { - "$ref": "qmk.definitions.v1#/mcu_pin", + "$ref": "./definitions.jsonschema#/mcu_pin", "$comment": "Deprecated: use split.serial.pin instead" }, "soft_serial_speed": { @@ -874,7 +874,7 @@ "type": "string", "enum": ["bitbang", "usart", "vendor"] }, - "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"} + "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"} } }, "transport": { @@ -902,7 +902,7 @@ } }, "watchdog": {"type": "boolean"}, - "watchdog_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "watchdog_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "sync_matrix_state": { "type": "boolean", "$comment": "Deprecated: use sync.matrix_state instead" @@ -918,8 +918,8 @@ "additionalProperties": false, "properties": { "enabled": {"type": "boolean"}, - "polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "polling_interval": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"} } }, "main": { @@ -929,7 +929,7 @@ }, "matrix_grid": { "type": "array", - "items": {"$ref": "qmk.definitions.v1#/mcu_pin"}, + "items": {"$ref": "./definitions.jsonschema#/mcu_pin"}, "$comment": "Deprecated: use split.handedness.matrix_grid instead" } } @@ -951,9 +951,9 @@ "permissive_hold_per_key": {"type": "boolean"}, "retro": {"type": "boolean"}, "retro_per_key": {"type": "boolean"}, - "term": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "term": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "term_per_key": {"type": "boolean"}, - "toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "toggle": {"$ref": "./definitions.jsonschema#/unsigned_int"} } }, "usb": { @@ -961,20 +961,20 @@ "additionalProperties": false, "properties": { "device_ver": { - "$ref": "qmk.definitions.v1#/hex_number_4d", + "$ref": "./definitions.jsonschema#/hex_number_4d", "$comment": "Deprecated: use device_version instead" }, - "device_version": {"$ref": "qmk.definitions.v1#/bcd_version"}, + "device_version": {"$ref": "./definitions.jsonschema#/bcd_version"}, "force_nkro": { "type": "boolean", "$comment": "Deprecated: use host.default.nkro instead" }, - "pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, - "vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, - "max_power": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "pid": {"$ref": "./definitions.jsonschema#/hex_number_4d"}, + "vid": {"$ref": "./definitions.jsonschema#/hex_number_4d"}, + "max_power": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "no_startup_check": {"type": "boolean"}, - "polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, + "polling_interval": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, "shared_endpoint": { "type": "object", "additionalProperties": false, @@ -983,7 +983,7 @@ "mouse": {"type": "boolean"} } }, - "suspend_wakeup_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "suspend_wakeup_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "wait_for_enumeration": {"type": "boolean"} } }, @@ -991,9 +991,9 @@ "type": "object", "additionalProperties": false, "properties": { - "keys_per_scan": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, - "tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, - "tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, + "keys_per_scan": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}, + "tap_keycode_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"}, + "tap_capslock_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"}, "locking": { "type": "object", "additionalProperties": false, @@ -1008,10 +1008,10 @@ "type": "object", "additionalProperties": false, "properties": { - "esc_output": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "esc_input": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "led": {"$ref": "qmk.definitions.v1#/mcu_pin"}, - "speaker": {"$ref": "qmk.definitions.v1#/mcu_pin"} + "esc_output": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "esc_input": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "led": {"$ref": "./definitions.jsonschema#/mcu_pin"}, + "speaker": {"$ref": "./definitions.jsonschema#/mcu_pin"} } }, "ws2812": { @@ -1022,10 +1022,10 @@ "type": "string", "enum": ["bitbang", "custom", "i2c", "pwm", "spi", "vendor"] }, - "pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, + "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}, "rgbw": {"type": "boolean"}, - "i2c_address": {"$ref": "qmk.definitions.v1#/hex_number_2d"}, - "i2c_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} + "i2c_address": {"$ref": "./definitions.jsonschema#/hex_number_2d"}, + "i2c_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"} } } } diff --git a/data/schemas/keycodes.jsonschema b/data/schemas/keycodes.jsonschema index df6ce95a83..0f9dfc763e 100644 --- a/data/schemas/keycodes.jsonschema +++ b/data/schemas/keycodes.jsonschema @@ -30,10 +30,10 @@ "keycodes": { "type": "object", "propertyNames": { - "$ref": "qmk.definitions.v1#/hex_number_4d" + "$ref": "./definitions.jsonschema#/hex_number_4d" }, "additionalProperties": { - "type": "object", // use 'qmk.definitions.v1#/keycode_decl' when problem keycodes are removed + "type": "object", // use './definitions.jsonschema#/keycode_decl' when problem keycodes are removed "required": [ "key" ], diff --git a/data/schemas/keymap.jsonschema b/data/schemas/keymap.jsonschema index b92a536c2c..99aeaa6b6c 100644 --- a/data/schemas/keymap.jsonschema +++ b/data/schemas/keymap.jsonschema @@ -10,10 +10,10 @@ "minLength": 1, "pattern": "^[a-z][0-9a-z_]*$" }, - "host_language": {"$ref": "qmk.definitions.v1#/text_identifier"}, - "keyboard": {"$ref": "qmk.definitions.v1#/text_identifier"}, - "keymap": {"$ref": "qmk.definitions.v1#/text_identifier"}, - "layout": {"$ref": "qmk.definitions.v1#/layout_macro"}, + "host_language": {"$ref": "./definitions.jsonschema#/text_identifier"}, + "keyboard": {"$ref": "./definitions.jsonschema#/text_identifier"}, + "keymap": {"$ref": "./definitions.jsonschema#/text_identifier"}, + "layout": {"$ref": "./definitions.jsonschema#/layout_macro"}, "layers": { "type": "array", "items": { @@ -55,11 +55,11 @@ "keycodes": { "type": "array", "items": { - "$ref": "qmk.definitions.v1#/text_identifier" + "$ref": "./definitions.jsonschema#/text_identifier" } }, "duration": { - "$ref": "qmk.definitions.v1#/unsigned_int" + "$ref": "./definitions.jsonschema#/unsigned_int" } } } @@ -67,8 +67,8 @@ } } }, - "keycodes": {"$ref": "qmk.definitions.v1#/keycode_decl_array"}, - "config": {"$ref": "qmk.keyboard.v1"}, + "keycodes": {"$ref": "./definitions.jsonschema#/keycode_decl_array"}, + "config": {"$ref": "./keyboard.jsonschema#"}, "notes": { "type": "string" }, diff --git a/data/schemas/user_repo_v1.jsonschema b/data/schemas/user_repo_v1.jsonschema index 88b50e8a72..07c61d0fea 100644 --- a/data/schemas/user_repo_v1.jsonschema +++ b/data/schemas/user_repo_v1.jsonschema @@ -6,8 +6,8 @@ "definitions": { "build_target": { "oneOf": [ - {"$ref": "qmk.definitions.v1#/keyboard_keymap_tuple"}, - {"$ref": "qmk.definitions.v1#/json_file_path"} + {"$ref": "./definitions.jsonschema#/keyboard_keymap_tuple"}, + {"$ref": "./definitions.jsonschema#/json_file_path"} ] } }, diff --git a/data/schemas/user_repo_v1_1.jsonschema b/data/schemas/user_repo_v1_1.jsonschema index 173d8d26d6..cd6d89ad81 100644 --- a/data/schemas/user_repo_v1_1.jsonschema +++ b/data/schemas/user_repo_v1_1.jsonschema @@ -6,9 +6,9 @@ "definitions": { "build_target": { "oneOf": [ - {"$ref": "qmk.definitions.v1#/keyboard_keymap_tuple"}, - {"$ref": "qmk.definitions.v1#/keyboard_keymap_env"}, - {"$ref": "qmk.definitions.v1#/json_file_path"} + {"$ref": "./definitions.jsonschema#/keyboard_keymap_tuple"}, + {"$ref": "./definitions.jsonschema#/keyboard_keymap_env"}, + {"$ref": "./definitions.jsonschema#/json_file_path"} ] } }, diff --git a/lib/python/qmk/json_schema.py b/lib/python/qmk/json_schema.py index b11a0ed7ea..e871598565 100644 --- a/lib/python/qmk/json_schema.py +++ b/lib/python/qmk/json_schema.py @@ -76,8 +76,13 @@ def compile_schema_store(): if not isinstance(schema_data, dict): cli.log.debug('Skipping schema file %s', schema_file) continue + + # `$id`-based references schema_store[schema_data['$id']] = schema_data + # Path-based references + schema_store[Path(schema_file).name] = schema_data + return schema_store |