tunnckoCore/parse-function

View on GitHub
src/lib/plugins/params.js

Summary

Maintainability
A
0 mins
Test Coverage
/*!
 * parse-function <https://github.com/tunnckoCore/parse-function>
 *
 * Copyright (c) 2017 Charlike Mike Reagent <open.source.charlike@gmail.com> (https://i.am.charlike.online)
 * Released under the MIT license.
 */

/* eslint-disable jsdoc/require-param-description, jsdoc/check-param-names */

/**
 * > Micro plugin to visit each of the params
 * in the given function and collect them into
 * an `result.args` array and `result.params` string.
 *
 * @param  {Object} node
 * @param  {Object} result
 * @return {Object} result
 * @private
 */
export default (app) => (node, result) => {
  if (!node.params.length) {
    return result
  }

  node.params.forEach((param) => {
    const defaultArgsName =
      param.type === 'AssignmentPattern' && param.left && param.left.name

    const restArgName =
      param.type === 'RestElement' && param.argument && param.argument.name

    const name = param.name || defaultArgsName || restArgName

    result.args.push(name)

    if (param.right && param.right.type === 'SequenceExpression') {
      let lastExpression = param.right.expressions.pop()

      result.defaults[name] = result.value.slice(
        lastExpression.start,
        lastExpression.end
      )
    } else {
      result.defaults[name] = param.right
        ? result.value.slice(param.right.start, param.right.end)
        : undefined
    }
  })
  result.params = result.args.join(', ')

  return result
}