Add wasm binding for running tree queries in a limited range

This commit is contained in:
Max Brunsfeld 2019-09-11 14:44:49 -07:00
parent 0528ad5f58
commit 49ce2fddb9
6 changed files with 143 additions and 24 deletions

View file

@ -41,10 +41,7 @@ describe("Query", () => {
`);
const matches = query.exec(tree.rootNode);
assert.deepEqual(
matches.map(({pattern, captures}) => ({
pattern,
captures: captures.map(({name, node}) => ({name, text: node.text}))
})),
formatMatches(matches),
[
{pattern: 0, captures: [{name: 'fn-def', text: 'one'}]},
{pattern: 1, captures: [{name: 'fn-ref', text: 'two'}]},
@ -52,4 +49,33 @@ describe("Query", () => {
]
);
});
it('matches queries in specified ranges', () => {
tree = parser.parse("[a, b,\nc, d,\ne, f,\ng, h]");
query = JavaScript.query('(identifier) @element');
const matches = query.exec(
tree.rootNode,
{row: 1, column: 1},
{row: 3, column: 1}
);
assert.deepEqual(
formatMatches(matches),
[
{pattern: 0, captures: [{name: 'element', text: 'd'}]},
{pattern: 0, captures: [{name: 'element', text: 'e'}]},
{pattern: 0, captures: [{name: 'element', text: 'f'}]},
{pattern: 0, captures: [{name: 'element', text: 'g'}]},
]
);
});
});
function formatMatches(matches) {
return matches.map(({pattern, captures}) => ({
pattern,
captures: captures.map(({name, node}) => ({
name,
text: node.text
}))
}))
}