fix(wasm): allow passing in ERROR in descendantsOfType

This commit is contained in:
WillLillis 2025-01-11 02:27:21 -05:00 committed by Amaan Qureshi
parent 95fd37ecf8
commit cd6e766365
2 changed files with 22 additions and 0 deletions

View file

@ -501,6 +501,11 @@ class Node {
// Convert the type strings to numeric type symbols.
const symbols = [];
const typesBySymbol = this.tree.language.types;
for (let i = 0; i < types.length; i++) {
if (types[i] == "ERROR") {
symbols.push(65535); // Internally, ts_builtin_sym_error is -1, which is UINT_16MAX
}
}
for (let i = 0, n = typesBySymbol.length; i < n; i++) {
if (types.includes(typesBySymbol[i])) {
symbols.push(i);

View file

@ -494,6 +494,23 @@ describe('Node', () => {
});
});
describe('.descendantsOfType("ERROR", null, null)', () => {
it('finds all of the descendants of an ERROR node', () => {
tree = parser.parse(
`if ({a: 'b'} {c: 'd'}) {
// ^ ERROR
x = function(a) { b; } function(c) { d; }
}`
);
const errorNode = tree.rootNode;
let descendants = errorNode.descendantsOfType('ERROR', null, null);
assert.deepEqual(
descendants.map((node) => node.startIndex),
[4],
);
});
});
describe('.descendantsOfType(type, min, max)', () => {
it('finds all of the descendants of the given type in the given range', () => {
tree = parser.parse('a + 1 * b * 2 + c + 3');