docs: function visit(node, context, visitor) {
  	if (node === null || node === undefined) {
  		return null;
  	}
  
  	if (Array.isArray(visitor)) {
  		return visitor
  			.reduce((n, v) => {
  				const newNode = visit(n, context, v);
  				return newNode;
  			}, node);
  	}
  
  	const method = visitor[node.type];
  	if (typeof method === 'function') {
  		return method.apply(null, [node].concat(context));
  	}
  
  	const defaultMethod = visitor.defaultMethod;
  	if (typeof defaultMethod === 'function') {
  		return defaultMethod.apply(null, [node].concat(context));
  	}
  
  	return node;
  }