lint-md-cli
Version:
Cli tool to lint your markdown file for Chinese.
218 lines (173 loc) • 7.18 kB
JavaScript
;
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
var _ = require('lodash');
var chalk = require('chalk');
var loadMdFiles = require('../helper/file');
var lint = require('./lint');
var string = require('../helper/string');
var _require = require('lint-md'),
getDescription = _require.getDescription;
var log = console.log;
/**
* Lint 组件
* @type {module.Lint}
*/
module.exports =
/*#__PURE__*/
function () {
function Lint(files, config) {
_classCallCheck(this, Lint);
this.files = files;
this.config = config; // 开始处理
this.start();
}
_createClass(Lint, [{
key: "start",
value: function () {
var _start = _asyncToGenerator(
/*#__PURE__*/
regeneratorRuntime.mark(function _callee() {
var mdFiles, errorFiles, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, file, errorFile, _this$errorCount, error, warning;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return loadMdFiles(this.files, this.config);
case 2:
mdFiles = _context.sent;
// 错误,格式为:{ path, file, errors: { start: { line, column }, end: { line, column } level, text, type } }
errorFiles = [];
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context.prev = 7;
_iterator = mdFiles[Symbol.iterator]();
case 9:
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
_context.next = 19;
break;
}
file = _step.value;
_context.next = 13;
return lint(file, this.config);
case 13:
errorFile = _context.sent;
errorFiles.push(errorFile);
this.printErrorFile(errorFile);
case 16:
_iteratorNormalCompletion = true;
_context.next = 9;
break;
case 19:
_context.next = 25;
break;
case 21:
_context.prev = 21;
_context.t0 = _context["catch"](7);
_didIteratorError = true;
_iteratorError = _context.t0;
case 25:
_context.prev = 25;
_context.prev = 26;
if (!_iteratorNormalCompletion && _iterator["return"] != null) {
_iterator["return"]();
}
case 28:
_context.prev = 28;
if (!_didIteratorError) {
_context.next = 31;
break;
}
throw _iteratorError;
case 31:
return _context.finish(28);
case 32:
return _context.finish(25);
case 33:
this.printOverview(errorFiles);
_this$errorCount = this.errorCount(errorFiles), error = _this$errorCount.error, warning = _this$errorCount.warning; // 是否出错
process.exit(error === 0 ? 0 : 1);
case 36:
case "end":
return _context.stop();
}
}
}, _callee, this, [[7, 21, 25, 33], [26,, 28, 32]]);
}));
function start() {
return _start.apply(this, arguments);
}
return start;
}()
/**
* 打印一个文件的错误信息
* @param errorFile
* @return {Promise<any>}
*/
}, {
key: "printErrorFile",
value: function printErrorFile(errorFile) {
var path = errorFile.path,
file = errorFile.file,
errors = errorFile.errors;
if (errors.length) log("".concat(path, "/").concat(file));
_.forEach(errors, this.printError);
if (errors.length) log();
}
/**
* 打印一个错误
* @param error
*/
}, {
key: "printError",
value: function printError(error) {
var start = error.start,
end = error.end,
level = error.level,
text = error.text,
type = error.type;
var pos = "".concat(start.line, ":").concat(start.column, "-").concat(end.line, ":").concat(end.column);
log(chalk.grey(' ', string.rightPad(pos, 16), ' ', string.rightPad("".concat(type), 24), ' ', chalk[level === 'error' ? 'red' : 'yellow']("".concat(getDescription(type).message, " ").concat(text))));
}
/**
* 打印概览
*/
}, {
key: "printOverview",
value: function printOverview(errorFiles) {
var fileCount = errorFiles.length;
var _this$errorCount2 = this.errorCount(errorFiles),
error = _this$errorCount2.error,
warning = _this$errorCount2.warning;
log(chalk.green("Lint total ".concat(fileCount, " files,")), chalk.yellow("".concat(warning, " warnings")), chalk.red("".concat(error, " errors")));
}
/**
* 计数
* @return {{error: *, warning: *}}
*/
}, {
key: "errorCount",
value: function errorCount(errorFiles) {
var warningCnt = errorFiles.reduce(function (r, current) {
return r + current.errors.filter(function (error) {
return error.level === 'warning';
}).length;
}, 0);
var errorCnt = errorFiles.reduce(function (r, current) {
return r + current.errors.filter(function (error) {
return error.level === 'error';
}).length;
}, 0);
return {
error: errorCnt,
warning: warningCnt
};
}
}]);
return Lint;
}();