Home Manual Reference Source Test Repository

src/module/traits/actualize.js

import HalsteadArray from './HalsteadArray';
import Trait         from './Trait';
import TraitUtil     from './TraitUtil';

/**
 * Provides a helper method to format core traits for escomplex processing.
 *
 * @param {function|number}         lloc - Logical lines of code
 * @param {function|number}         cyclomatic - The number of linearly independent paths through source code.
 * @param {function|string|Array}   operators - An operator carries out an action.
 * @param {function|string|Array}   operands - An operand participates in such an action (operator).
 * @param {function|string|Array}   ignoreKeys - Provides a list of AST node children keys to skip traversal.
 * @param {function|string}         newScope - Creates a new `class` or `method` scope for report generation.
 * @param {function|object|Array}   dependencies - An import / require dependency.
 *
 * @returns {{lloc: Trait, cyclomatic: Trait, operators: HalsteadArray, operands: HalsteadArray, ignoreKeys: Trait, newScope: Trait, dependencies: Trait}}
 */
export default function(lloc = 0, cyclomatic = 0, operators = undefined, operands = undefined,
 ignoreKeys = undefined, newScope = undefined, dependencies = undefined)
{
   return {
      lloc: new Trait('lloc', lloc),
      cyclomatic: new Trait('cyclomatic', cyclomatic),
      operators: new HalsteadArray('operators', TraitUtil.safeArray(operators)),
      operands: new HalsteadArray('operands', TraitUtil.safeArray(operands)),
      ignoreKeys: new Trait('ignoreKeys', TraitUtil.safeArray(ignoreKeys)),
      newScope: new Trait('newScope', newScope),
      dependencies: new Trait('dependencies', dependencies)
   };
}