Use relative paths for schemas, instead of $id. Enables VScode validation. (#25251)

This commit is contained in:
Nick Brassel 2025-05-19 22:10:39 +10:00 committed by GitHub
parent f686ad9e63
commit 919e2a4f5c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 197 additions and 169 deletions

27
.vscode/settings.json vendored
View File

@ -10,6 +10,13 @@
"**/*.uf2": true "**/*.uf2": true
}, },
"files.associations": { "files.associations": {
// QMK Filetypes
"keyboard.json": "jsonc",
"info.json": "jsonc",
"keymap.json": "jsonc",
"qmk.json": "jsonc",
"qmk_module.json": "jsonc",
// Standard filetypes
"*.h": "c", "*.h": "c",
"*.c": "c", "*.c": "c",
"*.inc": "c", "*.inc": "c",
@ -28,7 +35,23 @@
"[json]": { "[json]": {
"editor.formatOnSave": false "editor.formatOnSave": false
}, },
"clangd.arguments": [ "clangd.arguments": ["--header-insertion=never"],
"--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"
}
] ]
} }

View File

@ -1,7 +1,7 @@
{ {
"$id": "qmk.api.keyboard.v1", "$id": "qmk.api.keyboard.v1",
"allOf": [ "allOf": [
{"$ref": "qmk.keyboard.v1"}, {"$ref": "./keyboard.jsonschema#"},
{ {
"properties": { "properties": {
"keymaps": { "keymaps": {
@ -10,8 +10,8 @@
"url": {"type": "string"} "url": {"type": "string"}
} }
}, },
"parse_errors": {"$ref": "qmk.definitions.v1#/string_array"}, "parse_errors": {"$ref": "./definitions.jsonschema#/string_array"},
"parse_warnings": {"$ref": "qmk.definitions.v1#/string_array"}, "parse_warnings": {"$ref": "./definitions.jsonschema#/string_array"},
"processor_type": {"type": "string"}, "processor_type": {"type": "string"},
"protocol": {"type": "string"}, "protocol": {"type": "string"},
"keyboard_folder": {"type": "string"}, "keyboard_folder": {"type": "string"},

View File

@ -5,14 +5,14 @@
"type": "object", "type": "object",
"required": ["module_name", "maintainer"], "required": ["module_name", "maintainer"],
"properties": { "properties": {
"module_name": {"$ref": "qmk.definitions.v1#/text_identifier"}, "module_name": {"$ref": "./definitions.jsonschema#/text_identifier"},
"maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"}, "maintainer": {"$ref": "./definitions.jsonschema#/text_identifier"},
"license": {"type": "string"}, "license": {"type": "string"},
"url": { "url": {
"type": "string", "type": "string",
"format": "uri" "format": "uri"
}, },
"keycodes": {"$ref": "qmk.definitions.v1#/keycode_decl_array"}, "keycodes": {"$ref": "./definitions.jsonschema#/keycode_decl_array"},
"features": {"$ref": "qmk.keyboard.v1#/definitions/features_config"} "features": {"$ref": "./keyboard.jsonschema#/definitions/features_config"}
} }
} }

View File

@ -17,9 +17,9 @@
"additionalProperties": false, "additionalProperties": false,
"required": ["pin_a", "pin_b"], "required": ["pin_a", "pin_b"],
"properties": { "properties": {
"pin_a": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "pin_a": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"pin_b": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "pin_b": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"resolution": {"$ref": "qmk.definitions.v1#/unsigned_int"} "resolution": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
} }
} }
@ -28,22 +28,22 @@
"dip_switch_config": { "dip_switch_config": {
"type": "object", "type": "object",
"properties": { "properties": {
"pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
} }
}, },
"features_config": { "features_config": {
"$ref": "qmk.definitions.v1#/boolean_array", "$ref": "./definitions.jsonschema#/boolean_array",
"propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"}, "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
"not": {"required": ["lto"]} "not": {"required": ["lto"]}
} }
}, },
"type": "object", "type": "object",
"not": {"required": ["vendorId", "productId"]}, // reject via keys... "not": {"required": ["vendorId", "productId"]}, // reject via keys...
"properties": { "properties": {
"keyboard_name": {"$ref": "qmk.definitions.v1#/text_identifier"}, "keyboard_name": {"$ref": "./definitions.jsonschema#/text_identifier"},
"keyboard_folder": {"$ref": "qmk.definitions.v1#/keyboard"}, "keyboard_folder": {"$ref": "./definitions.jsonschema#/keyboard"},
"maintainer": {"$ref": "qmk.definitions.v1#/text_identifier"}, "maintainer": {"$ref": "./definitions.jsonschema#/text_identifier"},
"manufacturer": {"$ref": "qmk.definitions.v1#/text_identifier"}, "manufacturer": {"$ref": "./definitions.jsonschema#/text_identifier"},
"url": { "url": {
"type": "string", "type": "string",
"format": "uri" "format": "uri"
@ -119,8 +119,8 @@
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"data_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "data_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"clock_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "clock_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"default_brightness": { "default_brightness": {
"type": "integer", "type": "integer",
"minimum": 0, "minimum": 0,
@ -145,13 +145,13 @@
"enum": ["dac_additive", "dac_basic", "pwm_software", "pwm_hardware"] "enum": ["dac_additive", "dac_basic", "pwm_software", "pwm_hardware"]
}, },
"macro_beep": {"type": "boolean"}, "macro_beep": {"type": "boolean"},
"pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
"power_control": { "power_control": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"on_state": {"$ref": "qmk.definitions.v1#/bit"}, "on_state": {"$ref": "./definitions.jsonschema#/bit"},
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"} "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}
} }
}, },
"voices": {"type": "boolean"} "voices": {"type": "boolean"}
@ -171,20 +171,20 @@
"properties": { "properties": {
"on": {"type": "boolean"}, "on": {"type": "boolean"},
"breathing": {"type": "boolean"}, "breathing": {"type": "boolean"},
"brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
}, },
"breathing": {"type": "boolean"}, "breathing": {"type": "boolean"},
"breathing_period": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "breathing_period": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"levels": { "levels": {
"type": "integer", "type": "integer",
"minimum": 1, "minimum": 1,
"maximum": 31 "maximum": 31
}, },
"max_brightness": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"pins": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, "pins": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
"on_state": {"$ref": "qmk.definitions.v1#/bit"}, "on_state": {"$ref": "./definitions.jsonschema#/bit"},
"as_caps_lock": {"type": "boolean"} "as_caps_lock": {"type": "boolean"}
} }
}, },
@ -269,7 +269,7 @@
"type": "string", "type": "string",
"enum": ["COL2ROW", "ROW2COL"] "enum": ["COL2ROW", "ROW2COL"]
}, },
"debounce": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "debounce": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"caps_word": { "caps_word": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
@ -277,20 +277,20 @@
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"both_shifts_turns_on": {"type": "boolean"}, "both_shifts_turns_on": {"type": "boolean"},
"double_tap_shift_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"} "invert_on_shift": {"type": "boolean"}
} }
}, },
"combo": { "combo": {
"type": "object", "type": "object",
"properties": { "properties": {
"count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "count": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"term": {"$ref": "qmk.definitions.v1#/unsigned_int"} "term": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"community_layouts": { "community_layouts": {
"type": "array", "type": "array",
"items": {"$ref": "qmk.definitions.v1#/filename"} "items": {"$ref": "./definitions.jsonschema#/filename"}
}, },
"dip_switch": { "dip_switch": {
"$ref": "#/definitions/dip_switch_config", "$ref": "#/definitions/dip_switch_config",
@ -322,8 +322,8 @@
"type": "string", "type": "string",
"enum": ["none", "custom", "embedded_flash", "legacy", "rp2040_flash", "spi_flash"] "enum": ["none", "custom", "embedded_flash", "legacy", "rp2040_flash", "spi_flash"]
}, },
"backing_size": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "backing_size": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"logical_size": {"$ref": "qmk.definitions.v1#/unsigned_int"} "logical_size": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
} }
} }
@ -338,12 +338,12 @@
"indicators": { "indicators": {
"type": "object", "type": "object",
"properties": { "properties": {
"caps_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "caps_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"num_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "num_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"scroll_lock": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "scroll_lock": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"compose": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "compose": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"kana": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "kana": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"on_state": {"$ref": "qmk.definitions.v1#/bit"} "on_state": {"$ref": "./definitions.jsonschema#/bit"}
} }
}, },
"joystick": { "joystick": {
@ -351,8 +351,8 @@
"properties": { "properties": {
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"driver": {"type": "string"}, "driver": {"type": "string"},
"button_count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "button_count": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"axis_resolution": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "axis_resolution": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"axes": { "axes": {
"type": "object", "type": "object",
"propertyNames": {"enum": ["x", "y", "z", "rx", "ry", "rz"]}, "propertyNames": {"enum": ["x", "y", "z", "rx", "ry", "rz"]},
@ -361,10 +361,10 @@
{ {
"type": "object", "type": "object",
"properties": { "properties": {
"input_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "input_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"low": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "low": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"rest": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "rest": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"high": {"$ref": "qmk.definitions.v1#/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": { "layer_lock": {
"type": "object", "type": "object",
"properties": { "properties": {
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"layout_aliases": { "layout_aliases": {
"type": "object", "type": "object",
"additionalProperties": {"$ref": "qmk.definitions.v1#/layout_macro"} "additionalProperties": {"$ref": "./definitions.jsonschema#/layout_macro"}
}, },
"layouts": { "layouts": {
"type": "object", "type": "object",
"propertyNames": {"$ref": "qmk.definitions.v1#/layout_macro"}, "propertyNames": {"$ref": "./definitions.jsonschema#/layout_macro"},
"additionalProperties": { "additionalProperties": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
@ -404,7 +404,7 @@
"additionalProperties": false, "additionalProperties": false,
"required": ["x", "y"], "required": ["x", "y"],
"properties": { "properties": {
"encoder": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "encoder": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"label": { "label": {
"type": "string", "type": "string",
"pattern": "^[^\\n]*$" "pattern": "^[^\\n]*$"
@ -418,13 +418,13 @@
"minimum": 0 "minimum": 0
} }
}, },
"r": {"$ref": "qmk.definitions.v1#/signed_decimal"}, "r": {"$ref": "./definitions.jsonschema#/signed_decimal"},
"rx": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, "rx": {"$ref": "./definitions.jsonschema#/unsigned_decimal"},
"ry": {"$ref": "qmk.definitions.v1#/unsigned_decimal"}, "ry": {"$ref": "./definitions.jsonschema#/unsigned_decimal"},
"h": {"$ref": "qmk.definitions.v1#/key_unit"}, "h": {"$ref": "./definitions.jsonschema#/key_unit"},
"w": {"$ref": "qmk.definitions.v1#/key_unit"}, "w": {"$ref": "./definitions.jsonschema#/key_unit"},
"x": {"$ref": "qmk.definitions.v1#/key_unit"}, "x": {"$ref": "./definitions.jsonschema#/key_unit"},
"y": {"$ref": "qmk.definitions.v1#/key_unit"}, "y": {"$ref": "./definitions.jsonschema#/key_unit"},
"hand": { "hand": {
"type": "string", "type": "string",
"enum": ["L", "R", "*"] "enum": ["L", "R", "*"]
@ -461,7 +461,7 @@
"properties": { "properties": {
"timing": {"type": "boolean"}, "timing": {"type": "boolean"},
"strict_processing": {"type": "boolean"}, "strict_processing": {"type": "boolean"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"matrix_pins": { "matrix_pins": {
@ -471,14 +471,14 @@
"custom": {"type": "boolean"}, "custom": {"type": "boolean"},
"custom_lite": {"type": "boolean"}, "custom_lite": {"type": "boolean"},
"ghost": {"type": "boolean"}, "ghost": {"type": "boolean"},
"input_pressed_state": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "input_pressed_state": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"io_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "io_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"direct": { "direct": {
"type": "array", "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"}, "cols": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
"rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} "rows": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
} }
}, },
"modules": { "modules": {
@ -491,18 +491,18 @@
"type": "object", "type": "object",
"properties": { "properties": {
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "delay": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "interval": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"max_speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "max_speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"time_to_max": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "time_to_max": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"wheel_delay": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "wheel_delay": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
}, },
"oneshot": { "oneshot": {
"type": "object", "type": "object",
"properties": { "properties": {
"tap_toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "tap_toggle": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"led_matrix": { "led_matrix": {
@ -510,7 +510,7 @@
"properties": { "properties": {
"animations": { "animations": {
"type": "object", "type": "object",
"propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"}, "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
"additionalProperties": {"type": "boolean"} "additionalProperties": {"type": "boolean"}
}, },
"default": { "default": {
@ -519,8 +519,8 @@
"properties": { "properties": {
"on": {"type": "boolean"}, "on": {"type": "boolean"},
"animation": {"type": "string"}, "animation": {"type": "string"},
"val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
}, },
"driver": { "driver": {
@ -546,21 +546,21 @@
"type": "array", "type": "array",
"minItems": 2, "minItems": 2,
"maxItems": 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"}, "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"val_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "val_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"speed_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "speed_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"led_flush_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "led_flush_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"led_process_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "led_process_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"react_on_keyup": {"type": "boolean"}, "react_on_keyup": {"type": "boolean"},
"sleep": {"type": "boolean"}, "sleep": {"type": "boolean"},
"split_count": { "split_count": {
"type": "array", "type": "array",
"minItems": 2, "minItems": 2,
"maxItems": 2, "maxItems": 2,
"items": {"$ref": "qmk.definitions.v1#/unsigned_int"} "items": {"$ref": "./definitions.jsonschema#/unsigned_int"}
}, },
"layout": { "layout": {
"type": "array", "type": "array",
@ -578,9 +578,9 @@
"minimum": 0 "minimum": 0
} }
}, },
"x": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "x": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"y": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "y": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"flags": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
} }
} }
@ -591,7 +591,7 @@
"properties": { "properties": {
"animations": { "animations": {
"type": "object", "type": "object",
"propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"}, "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
"additionalProperties": {"type": "boolean"} "additionalProperties": {"type": "boolean"}
}, },
"default": { "default": {
@ -600,10 +600,10 @@
"properties": { "properties": {
"on": {"type": "boolean"}, "on": {"type": "boolean"},
"animation": {"type": "string"}, "animation": {"type": "string"},
"hue": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "hue": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"sat": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "sat": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
}, },
"driver": { "driver": {
@ -631,23 +631,23 @@
"type": "array", "type": "array",
"minItems": 2, "minItems": 2,
"maxItems": 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"}, "max_brightness": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "hue_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"sat_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "sat_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"val_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "val_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"speed_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "speed_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"led_flush_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "led_flush_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"led_process_limit": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "led_process_limit": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"react_on_keyup": {"type": "boolean"}, "react_on_keyup": {"type": "boolean"},
"sleep": {"type": "boolean"}, "sleep": {"type": "boolean"},
"split_count": { "split_count": {
"type": "array", "type": "array",
"minItems": 2, "minItems": 2,
"maxItems": 2, "maxItems": 2,
"items": {"$ref": "qmk.definitions.v1#/unsigned_int"} "items": {"$ref": "./definitions.jsonschema#/unsigned_int"}
}, },
"layout": { "layout": {
"type": "array", "type": "array",
@ -665,9 +665,9 @@
"minimum": 0 "minimum": 0
} }
}, },
"x": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "x": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"y": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "y": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"flags": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "flags": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
} }
} }
@ -679,27 +679,27 @@
"properties": { "properties": {
"animations": { "animations": {
"type": "object", "type": "object",
"propertyNames": {"$ref": "qmk.definitions.v1#/snake_case"}, "propertyNames": {"$ref": "./definitions.jsonschema#/snake_case"},
"additionalProperties": {"type": "boolean"} "additionalProperties": {"type": "boolean"}
}, },
"brightness_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "brightness_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"default": { "default": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"on": {"type": "boolean"}, "on": {"type": "boolean"},
"animation": {"type": "string"}, "animation": {"type": "string"},
"hue": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "hue": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"sat": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "sat": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"val": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "val": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"speed": {"$ref": "qmk.definitions.v1#/unsigned_int_8"} "speed": {"$ref": "./definitions.jsonschema#/unsigned_int_8"}
} }
}, },
"driver": { "driver": {
"type": "string", "type": "string",
"enum": ["apa102", "custom", "ws2812"] "enum": ["apa102", "custom", "ws2812"]
}, },
"hue_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "hue_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"layers": { "layers": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
@ -714,29 +714,29 @@
"override_rgb": {"type": "boolean"} "override_rgb": {"type": "boolean"}
} }
}, },
"led_count": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "led_count": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"led_map": { "led_map": {
"type": "array", "type": "array",
"minItems": 2, "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": { "pin": {
"$ref": "qmk.definitions.v1#/mcu_pin", "$ref": "./definitions.jsonschema#/mcu_pin",
"$comment": "Deprecated: use ws2812.pin instead" "$comment": "Deprecated: use ws2812.pin instead"
}, },
"rgbw": { "rgbw": {
"type": "boolean", "type": "boolean",
"$comment": "Deprecated: use ws2812.rgbw instead" "$comment": "Deprecated: use ws2812.rgbw instead"
}, },
"saturation_steps": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "saturation_steps": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"sleep": {"type": "boolean"}, "sleep": {"type": "boolean"},
"split": {"type": "boolean"}, "split": {"type": "boolean"},
"split_count": { "split_count": {
"type": "array", "type": "array",
"minItems": 2, "minItems": 2,
"maxItems": 2, "maxItems": 2,
"items": {"$ref": "qmk.definitions.v1#/unsigned_int"} "items": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
} }
}, },
@ -745,8 +745,8 @@
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"unlock_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "unlock_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"idle_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "idle_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"unlock_sequence": { "unlock_sequence": {
"type": "array", "type": "array",
"minItems": 1, "minItems": 1,
@ -780,8 +780,8 @@
"properties": { "properties": {
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"mouse_enabled": {"type": "boolean"}, "mouse_enabled": {"type": "boolean"},
"clock_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "clock_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"data_pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "data_pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"driver": { "driver": {
"type": "string", "type": "string",
"enum": ["busywait", "interrupt", "usart", "vendor"] "enum": ["busywait", "interrupt", "usart", "vendor"]
@ -818,11 +818,11 @@
"properties": { "properties": {
"direct": { "direct": {
"type": "array", "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"}, "cols": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
"rows": {"$ref": "qmk.definitions.v1#/mcu_pin_array"}, "rows": {"$ref": "./definitions.jsonschema#/mcu_pin_array"},
"unused": {"$ref": "qmk.definitions.v1#/mcu_pin_array"} "unused": {"$ref": "./definitions.jsonschema#/mcu_pin_array"}
} }
} }
} }
@ -849,16 +849,16 @@
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"matrix_grid": { "matrix_grid": {
"$ref": "qmk.definitions.v1#/mcu_pin_array", "$ref": "./definitions.jsonschema#/mcu_pin_array",
"minItems": 2, "minItems": 2,
"maxItems": 2 "maxItems": 2
} }
} }
}, },
"soft_serial_pin": { "soft_serial_pin": {
"$ref": "qmk.definitions.v1#/mcu_pin", "$ref": "./definitions.jsonschema#/mcu_pin",
"$comment": "Deprecated: use split.serial.pin instead" "$comment": "Deprecated: use split.serial.pin instead"
}, },
"soft_serial_speed": { "soft_serial_speed": {
@ -874,7 +874,7 @@
"type": "string", "type": "string",
"enum": ["bitbang", "usart", "vendor"] "enum": ["bitbang", "usart", "vendor"]
}, },
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"} "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"}
} }
}, },
"transport": { "transport": {
@ -902,7 +902,7 @@
} }
}, },
"watchdog": {"type": "boolean"}, "watchdog": {"type": "boolean"},
"watchdog_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "watchdog_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"sync_matrix_state": { "sync_matrix_state": {
"type": "boolean", "type": "boolean",
"$comment": "Deprecated: use sync.matrix_state instead" "$comment": "Deprecated: use sync.matrix_state instead"
@ -918,8 +918,8 @@
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"enabled": {"type": "boolean"}, "enabled": {"type": "boolean"},
"polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "polling_interval": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} "timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"main": { "main": {
@ -929,7 +929,7 @@
}, },
"matrix_grid": { "matrix_grid": {
"type": "array", "type": "array",
"items": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "items": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"$comment": "Deprecated: use split.handedness.matrix_grid instead" "$comment": "Deprecated: use split.handedness.matrix_grid instead"
} }
} }
@ -951,9 +951,9 @@
"permissive_hold_per_key": {"type": "boolean"}, "permissive_hold_per_key": {"type": "boolean"},
"retro": {"type": "boolean"}, "retro": {"type": "boolean"},
"retro_per_key": {"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"}, "term_per_key": {"type": "boolean"},
"toggle": {"$ref": "qmk.definitions.v1#/unsigned_int"} "toggle": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
}, },
"usb": { "usb": {
@ -961,20 +961,20 @@
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"device_ver": { "device_ver": {
"$ref": "qmk.definitions.v1#/hex_number_4d", "$ref": "./definitions.jsonschema#/hex_number_4d",
"$comment": "Deprecated: use device_version instead" "$comment": "Deprecated: use device_version instead"
}, },
"device_version": {"$ref": "qmk.definitions.v1#/bcd_version"}, "device_version": {"$ref": "./definitions.jsonschema#/bcd_version"},
"force_nkro": { "force_nkro": {
"type": "boolean", "type": "boolean",
"$comment": "Deprecated: use host.default.nkro instead" "$comment": "Deprecated: use host.default.nkro instead"
}, },
"pid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, "pid": {"$ref": "./definitions.jsonschema#/hex_number_4d"},
"vid": {"$ref": "qmk.definitions.v1#/hex_number_4d"}, "vid": {"$ref": "./definitions.jsonschema#/hex_number_4d"},
"max_power": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "max_power": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"no_startup_check": {"type": "boolean"}, "no_startup_check": {"type": "boolean"},
"polling_interval": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "polling_interval": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"shared_endpoint": { "shared_endpoint": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
@ -983,7 +983,7 @@
"mouse": {"type": "boolean"} "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"} "wait_for_enumeration": {"type": "boolean"}
} }
}, },
@ -991,9 +991,9 @@
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"keys_per_scan": {"$ref": "qmk.definitions.v1#/unsigned_int_8"}, "keys_per_scan": {"$ref": "./definitions.jsonschema#/unsigned_int_8"},
"tap_keycode_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "tap_keycode_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"tap_capslock_delay": {"$ref": "qmk.definitions.v1#/unsigned_int"}, "tap_capslock_delay": {"$ref": "./definitions.jsonschema#/unsigned_int"},
"locking": { "locking": {
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
@ -1008,10 +1008,10 @@
"type": "object", "type": "object",
"additionalProperties": false, "additionalProperties": false,
"properties": { "properties": {
"esc_output": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "esc_output": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"esc_input": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "esc_input": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"led": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "led": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"speaker": {"$ref": "qmk.definitions.v1#/mcu_pin"} "speaker": {"$ref": "./definitions.jsonschema#/mcu_pin"}
} }
}, },
"ws2812": { "ws2812": {
@ -1022,10 +1022,10 @@
"type": "string", "type": "string",
"enum": ["bitbang", "custom", "i2c", "pwm", "spi", "vendor"] "enum": ["bitbang", "custom", "i2c", "pwm", "spi", "vendor"]
}, },
"pin": {"$ref": "qmk.definitions.v1#/mcu_pin"}, "pin": {"$ref": "./definitions.jsonschema#/mcu_pin"},
"rgbw": {"type": "boolean"}, "rgbw": {"type": "boolean"},
"i2c_address": {"$ref": "qmk.definitions.v1#/hex_number_2d"}, "i2c_address": {"$ref": "./definitions.jsonschema#/hex_number_2d"},
"i2c_timeout": {"$ref": "qmk.definitions.v1#/unsigned_int"} "i2c_timeout": {"$ref": "./definitions.jsonschema#/unsigned_int"}
} }
} }
} }

View File

@ -30,10 +30,10 @@
"keycodes": { "keycodes": {
"type": "object", "type": "object",
"propertyNames": { "propertyNames": {
"$ref": "qmk.definitions.v1#/hex_number_4d" "$ref": "./definitions.jsonschema#/hex_number_4d"
}, },
"additionalProperties": { "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": [ "required": [
"key" "key"
], ],

View File

@ -10,10 +10,10 @@
"minLength": 1, "minLength": 1,
"pattern": "^[a-z][0-9a-z_]*$" "pattern": "^[a-z][0-9a-z_]*$"
}, },
"host_language": {"$ref": "qmk.definitions.v1#/text_identifier"}, "host_language": {"$ref": "./definitions.jsonschema#/text_identifier"},
"keyboard": {"$ref": "qmk.definitions.v1#/text_identifier"}, "keyboard": {"$ref": "./definitions.jsonschema#/text_identifier"},
"keymap": {"$ref": "qmk.definitions.v1#/text_identifier"}, "keymap": {"$ref": "./definitions.jsonschema#/text_identifier"},
"layout": {"$ref": "qmk.definitions.v1#/layout_macro"}, "layout": {"$ref": "./definitions.jsonschema#/layout_macro"},
"layers": { "layers": {
"type": "array", "type": "array",
"items": { "items": {
@ -55,11 +55,11 @@
"keycodes": { "keycodes": {
"type": "array", "type": "array",
"items": { "items": {
"$ref": "qmk.definitions.v1#/text_identifier" "$ref": "./definitions.jsonschema#/text_identifier"
} }
}, },
"duration": { "duration": {
"$ref": "qmk.definitions.v1#/unsigned_int" "$ref": "./definitions.jsonschema#/unsigned_int"
} }
} }
} }
@ -67,8 +67,8 @@
} }
} }
}, },
"keycodes": {"$ref": "qmk.definitions.v1#/keycode_decl_array"}, "keycodes": {"$ref": "./definitions.jsonschema#/keycode_decl_array"},
"config": {"$ref": "qmk.keyboard.v1"}, "config": {"$ref": "./keyboard.jsonschema#"},
"notes": { "notes": {
"type": "string" "type": "string"
}, },

View File

@ -6,8 +6,8 @@
"definitions": { "definitions": {
"build_target": { "build_target": {
"oneOf": [ "oneOf": [
{"$ref": "qmk.definitions.v1#/keyboard_keymap_tuple"}, {"$ref": "./definitions.jsonschema#/keyboard_keymap_tuple"},
{"$ref": "qmk.definitions.v1#/json_file_path"} {"$ref": "./definitions.jsonschema#/json_file_path"}
] ]
} }
}, },

View File

@ -6,9 +6,9 @@
"definitions": { "definitions": {
"build_target": { "build_target": {
"oneOf": [ "oneOf": [
{"$ref": "qmk.definitions.v1#/keyboard_keymap_tuple"}, {"$ref": "./definitions.jsonschema#/keyboard_keymap_tuple"},
{"$ref": "qmk.definitions.v1#/keyboard_keymap_env"}, {"$ref": "./definitions.jsonschema#/keyboard_keymap_env"},
{"$ref": "qmk.definitions.v1#/json_file_path"} {"$ref": "./definitions.jsonschema#/json_file_path"}
] ]
} }
}, },

View File

@ -76,8 +76,13 @@ def compile_schema_store():
if not isinstance(schema_data, dict): if not isinstance(schema_data, dict):
cli.log.debug('Skipping schema file %s', schema_file) cli.log.debug('Skipping schema file %s', schema_file)
continue continue
# `$id`-based references
schema_store[schema_data['$id']] = schema_data schema_store[schema_data['$id']] = schema_data
# Path-based references
schema_store[Path(schema_file).name] = schema_data
return schema_store return schema_store