Skip to content

Commit 9691460

Browse files
committed
Improve TreeSitter query &field handling
1 parent c39b816 commit 9691460

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

src/TreeSitter.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,21 @@ export function queryNode(node: webTreeSitter.Node, queryString: string, startPo
9797
const language = node.tree.language;
9898
// const start = performance.now();
9999
try {
100-
query = new webTreeSitter.Query(language, queryString);
100+
try {
101+
query = new webTreeSitter.Query(language, queryString);
102+
} catch (error: any) {
103+
// &field is not an official TreeSitter feature. Attempt to disable if not using custom TreeSitter version
104+
query = new webTreeSitter.Query(language, queryString.replaceAll(/^\s*\(.*?&\w+\b.*?\s*$/gm, ''));
105+
}
101106
// if (performance.now() - start > 100) {
102107
// vscode.window.showInformationMessage(`queryString ${(performance.now() - start).toFixed(3)}ms: ${queryString}\n${JSON.stringify(query)}`);
103108
// }
104109
query.disableCapture('_ignore_');
105110
queryCache[queryString] = query;
106111
// vscode.window.showInformationMessage(JSON.stringify(query, stringify));
107112
// vscode.window.showInformationMessage(JSON.stringify(queryString));
108-
} catch (error) {
113+
} catch (error: any) {
114+
vscode.window.showWarningMessage(`JSON TextMate: TreeSitter Query:\n${error?.message || error.toString()}`);
109115
// console.warn(`JSON TextMate: TreeSitter Query:\n`, error);
110116
}
111117
}

0 commit comments

Comments
 (0)