code: function walk(node, parent, ctx) {
      if (!node) {
          return
      }
  
      node.parent = parent
  
      // walk each node if array
      if (util.isArray(node)) {
          return node.forEach(function(node){
              walk(node, parent, ctx)
          })
      }
  
      // visit each node depending on its type
      switch (node.type) {
          case T.MODULE :
              visitModule(node, parent, ctx)
          break
          case T.SPECIAL_PLACEHOLDER :
              visitSpecialPlaceholder(node, parent, ctx)
          break
          case T.SEXPR :
              visitSexpr(node, parent,  ctx)
          break
          case T.ARRAY :
              visitArray(node, parent, ctx)
          break
          case T.PROPERTY :
              visitProperty(node, parent, ctx)
          break
          case T.OBJECT :
              visitObject(node, parent, ctx)
          break
          case T.JSBLOCK :
              visitJSBlock(node, parent, ctx)
          break
          case T.NIL :
              visitNil(node, parent, ctx)
          break
          case T.STRING :
              visitString(node, parent, ctx)
          break
          case T.KEY_IDENT :
              visitKeyIdent(node, parent, ctx)
          break
          case T.IDENT :
              visitIdent(node, parent, ctx)
          break
          case T.REGEXP  :
              visitRegexp(node, parent, ctx)
          break
          case T.NUMBER  :
          case T.BOOLEAN :
          case T.LITERAL :
              visitLiteral(node, parent, ctx)
      }
  }
docs: walk through nodes