binding_web: Add Query.didExceedMatchLimit
This lets wasm clients check whether a query exceeded its maximum number of in-progress matches.
This commit is contained in:
parent
b5ec720696
commit
e8eb3c5d5a
4 changed files with 32 additions and 0 deletions
|
|
@ -670,3 +670,10 @@ void ts_query_captures_wasm(
|
|||
TRANSFER_BUFFER[0] = (const void *)(capture_count);
|
||||
TRANSFER_BUFFER[1] = result.contents;
|
||||
}
|
||||
|
||||
bool ts_query_did_exceed_match_limit_wasm(
|
||||
const TSQuery *self
|
||||
) {
|
||||
if (!scratch_query_cursor) return false;
|
||||
return ts_query_cursor_did_exceed_match_limit(scratch_query_cursor);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1048,6 +1048,10 @@ class Query {
|
|||
predicatesForPattern(patternIndex) {
|
||||
return this.predicates[patternIndex]
|
||||
}
|
||||
|
||||
didExceedMatchLimit() {
|
||||
return C._ts_query_did_exceed_match_limit_wasm(this[0]);
|
||||
}
|
||||
}
|
||||
|
||||
function getText(tree, startIndex, endIndex) {
|
||||
|
|
|
|||
|
|
@ -76,6 +76,7 @@
|
|||
"_ts_query_capture_name_for_id",
|
||||
"_ts_query_captures_wasm",
|
||||
"_ts_query_delete",
|
||||
"_ts_query_did_exceed_match_limit_wasm",
|
||||
"_ts_query_matches_wasm",
|
||||
"_ts_query_new",
|
||||
"_ts_query_pattern_count",
|
||||
|
|
|
|||
|
|
@ -238,6 +238,26 @@ describe("Query", () => {
|
|||
refutedProperties: { bar: "baz" },
|
||||
},
|
||||
]);
|
||||
assert.ok(!query.didExceedMatchLimit());
|
||||
});
|
||||
|
||||
it("detects queries with too many permutations to track", () => {
|
||||
tree = parser.parse(`
|
||||
[
|
||||
hello, hello, hello, hello, hello, hello, hello, hello, hello, hello,
|
||||
hello, hello, hello, hello, hello, hello, hello, hello, hello, hello,
|
||||
hello, hello, hello, hello, hello, hello, hello, hello, hello, hello,
|
||||
hello, hello, hello, hello, hello, hello, hello, hello, hello, hello,
|
||||
hello, hello, hello, hello, hello, hello, hello, hello, hello, hello,
|
||||
];
|
||||
`);
|
||||
|
||||
query = JavaScript.query(`
|
||||
(array (identifier) @pre (identifier) @post)
|
||||
`);
|
||||
|
||||
const captures = query.captures(tree.rootNode);
|
||||
assert.ok(query.didExceedMatchLimit());
|
||||
});
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue