mini: leaf location retrieval

- add onEnter callback for patternifyAST
- add leaf node location helpers
- add tests
This commit is contained in:
Felix Roos 2023-07-01 23:52:31 +02:00
parent f07859996e
commit c7e882e001
2 changed files with 82 additions and 54 deletions

View file

@ -4,7 +4,7 @@ Copyright (C) 2022 Strudel contributors - see <https://github.com/tidalcycles/st
This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
import { mini } from '../mini.mjs';
import { getLeafLocation, getLeafLocations, mini, mini2ast } from '../mini.mjs';
import '@strudel.cycles/core/euclid.mjs';
import { describe, expect, it } from 'vitest';
@ -185,3 +185,32 @@ describe('mini', () => {
expect(minV('a:b c:d:[e:f] g')).toEqual([['a', 'b'], ['c', 'd', ['e', 'f']], 'g']);
});
});
describe('getLeafLocation', () => {
it('gets location of leaf nodes', () => {
const code = '"bd sd"';
const ast = mini2ast(code);
const bd = ast.source_[0].source_;
expect(getLeafLocation(code, bd)).toEqual([
[1, 2, 1],
[1, 4, 3],
]);
const sd = ast.source_[1].source_;
expect(getLeafLocation(code, sd)).toEqual([
[1, 5, 4],
[1, 7, 6],
]);
});
});
describe('getLeafLocations', () => {
it('gets locations of leaf nodes', () => {
const code = '"bd sd"';
expect(getLeafLocations(code)).toEqual([
[1, 3], // bd columns
[4, 6], // sd columns
]);
});
});