code: function transformFunction(node) {
    var nameNode = node.nodes[0];
    var paramsNodes = node.nodes[1] ? node.nodes[1].nodes : [];
    node.name = nameNode.value;
    if (node.name) {
      node.item('functions')[node.name] = node;
    }
    node.params = [];
    node.paramIndex = {};
  
    var paramTags = node.paramTags;
    // for functions assigned to variables, paramTags are in parent --
    // i.e. '/* @param a */ var parent = function (a) {}'
    if (node.paramTags === undefined && node.parent &&
        node.parent.type === 'assign' && node.parent.paramTags) {
      paramTags = node.parent.paramTags;
    }
    node.item('paramTags', paramTags);
  
    if (node.copyTags) {
      var tagSource = node.item('functions')[node.copyTags];
      if (tagSource) {
        if (!node.description && tagSource.description) {
          node.description = tagSource.description;
        }
        if (!paramTags && tagSource.item('paramTags')) {
          paramTags = tagSource.item('paramTags');
        }
      }
    }
  
    paramsNodes.forEach(function (paramNode, i) {
      var param = {
        name: paramNode.value
      };
      node.paramIndex[param.name] = i;
      if (paramTags) {
        if (paramTags[param.name]) {
          var tagValue = paramTags[param.name];
      // if (node.item('path') === 'cli') {
      //   console.log(tagValue)
      // }
          Object.keys(tagValue).forEach(function (key, i) {
            if (key !== 'name') {
              param[key] = tagValue[key];
            }
          });
        }
      }
      node.params.push(param);
    });
      // if (node.item('path') === 'cli') {
      //   console.log(node.params)
      // }
  }
docs: /*
  Move info from comment parameter tags into node.