Skip to content

Extract JS tags

Alexander Misel edited this page Nov 19, 2019 · 1 revision

Using the following js code to extract JS tags from https://github.com/ternjs/tern/tree/master/defs

var tags = []

function read(obj, name, cname) {
    var item = { name: name, cname: cname }
    if (typeof(obj) === 'string') {
        if (obj.substring(0,2) === 'fn') {
            item.type = 'f';
            item.ret = obj.match(/-> ([+.\w]+)/) && RegExp.$1;
            item.ret = item.ret || (obj.match(/-> \[/) && '+Array');
        } else {
            item.type = 'm';
            item.ret = obj;
        }
    } else {
        item.type = 'c';
        for (var k in obj) {
            if (k[0] !== '!') {
                if (k === 'prototype') {
                    read(obj[k], k, '+' + name);
                } else if (name === 'prototype') {
                    read(obj[k], k, cname);
                } else {
                    read(obj[k], k, (cname && (cname + '.')) + name);
                }
            } else if (k === '!type') {
                hasType = true;
                var type = obj[k];
                if (type.substring(0,2) === 'fn') {
                    item.type = 'f';
                    item.ret = type.match(/-> ([+.\w]+)/) && RegExp.$1;
                    item.ret = item.ret || (type.match(/-> \[/) && '+Array');
                } else {
                    item.type = 'm';
                    item.ret = type;
                }
            }
        }
    }
    if (name !== 'prototype') {
        tags.push(item);
    }
}

read(browser, '', '')

tags.sort((a, b) => a.name.toLowerCase() > b.name.toLowerCase());
tags.map(x => `${x.name}\t_\t0;"\t${x.type}\t` + (x.cname && `class:${x.cname}\t`) + (x.ret ? `typeref:${x.ret}` : '')).join('\n')
Clone this wiki locally