Code coverage report for src/eslint/help.js

Statements: 94.44% (51 / 54)      Branches: 84.62% (22 / 26)      Functions: 100% (7 / 7)      Lines: 94.44% (51 / 54)      Ignored: none     

All files » src/eslint/ » help.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82    1 1 1   1 45 45 45 45     1 23 23 23   23 23   23     1 45 45     45 45 45 45 45   45   45 45 45   45     1 12 12 12 12 95 36   59 59 59 45 45 32     59     12       1 12 12 12 12 12 12 12              
'use strict';
 
var eslint = require('./cli');
var _ = require('lodash');
var logger = require('../log')('eslint-help');
 
function createOption(arr){
  var noAlias = arr[0].match(/--\w/);
  var option = noAlias ? parseRegular(arr) : parseAlias(arr);
  var isEmpty = _.isEmpty(option);
  return isEmpty ? undefined : option;
}
 
function parseAlias(arr){
  var alias = arr[0];
  logger.debug('Alias found: %s', alias);
  var option = parseRegular(_.without(arr, alias));
 
  Eif(alias){
    option.alias = alias.replace('-','');
  }
  return option;
}
 
function parseRegular(arr){
  logger.debug('Parsing %s', arr[0]);
  Iif(!arr[0]){
    return;
  }
  var optionText = arr[0];
  var type = arr[1];
  var option = {};
  option.option = optionText.replace('--', '');
  option.type = type ? type : 'Boolean';
 
  var helpText = _.without(arr, optionText, type, '');
 
  var description = helpText.join(' ');
  Eif(description){
    option.description = description;
  }
  return option;
}
 
function parseHelp(helpText){
  var helpArr = helpText.split('\n');
  var newArr = [];
  var previousLine = [];
  _.each(helpArr, function(row, index){
    if(index === 0 || index === 1 || index === 2){
      return;
    } else {
      var str = row.replace(',', '');
      var arr = str.trim().split(' ');
      if(str.indexOf('-') >= 0 && previousLine[0] !== ''){
        var option = createOption(arr);
        if(option && option.option !== 'format' && option.option !== 'help'){
          newArr.push(option);
        }
      }
      previousLine = arr;
    }
  });
  return newArr;
}
 
// rewrite in es6 this callback yucky stuff goes away.
module.exports = function(cllbk){
  logger.debug('Executing help');
  var spawn = eslint(['--help'], {help: true}, {});
  spawn.stdout.on('data', function(msg){
    logger.debug('Help text received');
    var eslintHelp = msg.toString();
    try {
      cllbk(parseHelp(eslintHelp));
    } catch(e){
      logger.log(e.stack);
      throw(e);
    }
  });
};