zmk/docs/src/keymap-upgrade/nodes.ts
Joel Spadin 08d9391a8a feat(keymap-upgrader): Upgrade renamed nodes
Added an upgrade function to fix renamed behavior nodes in the unlikely
event that someone was changing behavior settings this way instead of
using references.
2024-01-25 18:03:37 -06:00

49 lines
1.9 KiB
TypeScript

import type { Tree } from "web-tree-sitter";
import { findDevicetreeNode } from "./parser";
import { TextEdit } from "./textedit";
// Map of { "deprecated path": "replacement name" } for devicetree nodes.
// Relocating nodes to another place in the tree is not supported.
const NODES = {
"/behaviors/behavior_backlight": "bcklight",
"/behaviors/behavior_caps_word": "caps_word",
"/behaviors/behavior_ext_power": "extpower",
"/behaviors/behavior_key_press": "key_press",
"/behaviors/behavior_key_repeat": "key_repeat",
"/behaviors/behavior_key_toggle": "key_toggle",
"/behaviors/behavior_layer_tap": "layer_tap",
"/behaviors/behavior_mod_tap": "mod_tap",
"/behaviors/behavior_momentary_layer": "momentary_layer",
"/behaviors/behavior_none": "none",
"/behaviors/behavior_outputs": "outputs",
"/behaviors/behavior_behavior_reset": "sysreset",
"/behaviors/behavior_reset_dfu": "bootload",
"/behaviors/behavior_rgb_underglow": "rgb_ug",
"/behaviors/behavior_sensor_rotate_key_press": "enc_key_press",
"/behaviors/behavior_sticky_key": "sticky_key",
"/behaviors/behavior_sticky_layer": "sticky_layer",
"/behaviors/behavior_to_layer": "to_layer",
"/behaviors/behavior_toggle_layer": "toggle_layer",
"/behaviors/behavior_transparent": "transparent",
"/behaviors/macro_control_mode_tap": "macro_tap",
"/behaviors/macro_control_mode_press": "macro_press",
"/behaviors/macro_control_mode_release": "macro_release",
"/behaviors/macro_control_tap_time": "macro_tap_time",
"/behaviors/macro_control_wait_time": "macro_wait_time",
};
export function upgradeNodeNames(tree: Tree) {
const edits: TextEdit[] = [];
for (const [path, newName] of Object.entries(NODES)) {
for (const node of findDevicetreeNode(tree, path)) {
const name = node.childForFieldName("name");
if (name) {
edits.push(TextEdit.fromNode(name, newName));
}
}
}
return edits;
}