all files / src/eslint/ help.js

96.83% Statements 61/63
81.48% Branches 22/27
100% Functions 8/8
98.39% Lines 61/62
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 83 84 85 86 87 88 89 90 91 92      49× 49× 49×   49× 49×     49× 49×     49× 49× 49× 49×   49×   49×   49× 49× 49×   49×     23× 23× 23×   23× 23×   23×     49× 49× 49× 49× 49×     14× 14× 14× 14× 111× 42×   69× 69× 69× 49× 49× 34×     69×     14×       14× 14× 14× 14× 14× 14×      
'use strict';
 
var eslint = require('./cli');
var _ = require('lodash');
var logger = require('../log')('eslint-help');
logger.debug('Loaded');
 
function parseNo(option, str){
  Iif(!str) return;
  var cmd = str.replace('--', '');
  if(/no-/.test(cmd)){
    logger.debug('Parsing no option', str);
    cmd = cmd.replace('no-', '');
    option.default = 'true';
  }
  option.option = cmd;
  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 = parseNo(option, optionText);
 
  option.type = type ? type : 'Boolean';
 
  var helpText = _.without(arr, optionText, type, '');
 
  var description = helpText.join(' ');
  Eif(description){
    option.description = description;
  }
  return 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 createOption(arr){
  var noAlias = /^--/.test(arr[0]);
  logger.debug('noAlias', noAlias);
  var option = noAlias ? parseRegular(arr) : parseAlias(arr);
  var isEmpty = _.isEmpty(option);
  return isEmpty ? undefined : option;
}
 
function parseHelp(helpText){
  var helpArr = helpText.split('\n');
  var newArr = [];
  var previousLine = [];
  _.each(helpArr, function(row, index){
    if(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();
    cllbk(parseHelp(eslintHelp));
  });
};