UNPKG

lint-md-cli

Version:

Cli tool to lint your markdown file for Chinese.

218 lines (173 loc) 7.18 kB
"use strict"; 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; }();