zmk/docs/src/keymap-upgrade/headers.ts

41 lines
1.2 KiB
TypeScript

import type { SyntaxNode, Tree } from "web-tree-sitter";
import { Devicetree, findCapture } from "./parser";
import { getUpgradeEdits, MatchFunc, ReplaceFunc, TextEdit } from "./textedit";
// Map of { "deprecated": "replacement" } header paths.
const HEADERS = {
"dt-bindings/zmk/matrix-transform.h": "dt-bindings/zmk/matrix_transform.h",
};
export function upgradeHeaders(tree: Tree) {
const edits: TextEdit[] = [];
const query = Devicetree.query(
"(preproc_include path: [(string_literal) (system_lib_string)] @path)"
);
const matches = query.matches(tree.rootNode);
for (const { captures } of matches) {
const node = findCapture("path", captures);
if (node) {
edits.push(
...getUpgradeEdits(node, HEADERS, headerReplaceHandler, isHeaderMatch)
);
}
}
return edits;
}
const isHeaderMatch: MatchFunc = (node, text) => {
return node.text === `"${text}"` || node.text === `<${text}>`;
};
const headerReplaceHandler: ReplaceFunc = (node, replacement) => {
if (!replacement) {
throw new Error("Header replacement does not support removing headers");
}
return [new TextEdit(node.startIndex + 1, node.endIndex - 1, replacement)];
};