resw 0.6.0-alpha.4

A library for writing RESSA AST parts to a file
Documentation
let fs = require('fs').promises;

function collectRecursions(logs) {
    let added = {}
    let ret = "";
    // console.log(logs)
    for (let log of logs) {
        if (ret.length > 0) {
            ret += "\n     ⬇️\n";
        }
        ret += log;
        if (added[log]) {
            ret += "".repeat(added[log]);
        }
        added[log] = (added[log] || 0) + 1;
    }
    return ret;
}

(async () => {
    let log = await fs.readFile('out.log', 'utf-8');
    let lines = log.split('\n');
    let last_idx = 0;
    let logs = {};
    for (let line of lines) {
        if (line.trim().length == 0) {
            continue;
        }
        let matches = /(?<index>[0-9]+)?:? (?<name>.+)/.exec(line);
        if (!matches) {
            throw new Error(`No matches in ${line}`);
        }
        // console.log(matches);
        if (matches.groups) {
            let idx, name;
            if (line.startsWith('parse_labelled_statement')){
                idx = last_idx;
                name = "parse_labelled_statement";
            } else {
                name = matches.groups.name.split(' ')[0];
            } 
            if (matches.groups.index) {
                idx = +matches.groups.index;
                last_idx = idx;
            }
            
            if (!name.startsWith('parse')) {
                continue;
            }
            // console.log(idx, name);
            if (!logs[idx]) {
                logs[idx] = {};
            }
            if (!logs[idx].name_counts) {
                logs[idx].name_counts = {};
            }
            if (!logs[idx].name_counts[name]) {
                logs[idx].name_counts[name] = 1;
            } else {
                logs[idx].name_counts[name] += 1;
            }
            if (!logs[idx].names) {
                logs[idx].names = [];
            }
            logs[idx].names.push(name);
        }
    }
    let ret = '';
    outer: for (let log in logs) {
        let record = logs[log];
        for (let name in record.name_counts) {
            if (record.name_counts[name] > 1) {
                if (ret.length > 0) {
                    ret += "\n";
                }
                ret += `${log}\n${collectRecursions(record.names)}`;
                continue outer;
            }
        }
    }
    return ret;
})()
    .then(console.log)
    .catch(e => console.error('Error: ', e));