Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | 2x 2x 2x 2x 2x 2x | import { Node, //isDotOperator, // isWildcardOperator, // isGroupExpression, } from './types' const traverse = ( tree: Node, visitor: (node: Node, parents: Node[]) => void | boolean ) => { let parents = [] const _traverse = (node: Node) => { parents = parents.concat(node) let cache = parents for (let key in node) { if (node.hasOwnProperty(key)) { if (node[key] && node[key].type) { if (visitor(node[key], parents) !== false) { _traverse(node[key]) } } } parents = cache } } if (visitor(tree, parents) !== false) { _traverse(tree) } return tree } export class RelativeTree { public target: Node public base: Node constructor(target: Node, base: Node) { this.target = target this.base = target } transformForward(tree: Node) {} transformSiblingIndex(tree: Node) {} visitor = (node: Node, parents: Node[]) => { } create(): any { // const tree = this.target // if (isDotOperator(tree)) { // return this.transformForward(tree) // } else if(){ // } return traverse(this.target, this.visitor) } } |