You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

58 lines
1.4 KiB
JavaScript

'use strict';
var DiagramRenderer = require('power-assert-renderer-diagram');
var inherits = require('util').inherits;
var some = require('core-js/library/fn/array/some');
/**
* options.stringify [function]
* options.maxDepth [number]
* options.lineSeparator [string]
* options.anonymous [string]
* options.circular [string]
*
* options.widthOf [function]
* options.ambiguousEastAsianCharWidth [number]
*/
function SuccinctRenderer (config) {
DiagramRenderer.call(this, config);
}
inherits(SuccinctRenderer, DiagramRenderer);
SuccinctRenderer.prototype.onData = function (esNode) {
if (!esNode.isCaptured) {
return;
}
if (withinMemberExpression(esNode)) {
return;
}
this.dumpIfSupported(esNode);
};
SuccinctRenderer.prototype.dumpIfSupported = function (esNode) {
switch(esNode.node.type) {
case 'Identifier':
case 'MemberExpression':
case 'CallExpression':
this.events.push({value: esNode.value, leftIndex: esNode.range[0]});
break;
}
};
function withinMemberExpression (esNode) {
var ancestors = collectAncestors([], esNode.parent);
return some(ancestors, function (eachNode) {
return eachNode.node.type === 'MemberExpression';
});
}
function collectAncestors (ary, esNode) {
if (!esNode) {
return ary;
}
ary.push(esNode);
return collectAncestors(ary, esNode.parent);
}
module.exports = SuccinctRenderer;