lint-md
Version:
Core of lint-md which used to lint your markdown file for Chinese.
75 lines (54 loc) • 3.01 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _lodash = _interopRequireDefault(require("lodash"));
var _rule = require("./helper/rule");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); }
function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
var PluginClasses = [require('./space-round-alphabet'), require('./space-round-number'), require('./no-empty-code-lang'), require('./no-empty-delete'), require('./no-empty-url'), require('./no-empty-list'), require('./no-empty-code'), require('./no-empty-inlinecode'), require('./no-empty-blockquote'), require('./no-special-characters'), require('./use-standard-ellipsis'), require('./no-fullwidth-number'), require('./no-space-in-emphasis'), require('./no-space-in-link'), require('./no-multiple-space-blockquote'), require('./no-space-in-inlinecode'), require('./no-trailing-punctuation'), require('./no-long-code')];
/**
* 所有的 lint 规则,欢迎 pr 添加
* @param throwError
* @param rules
* @returns {*[]}
*/
var _default = function _default(throwError, rules) {
// 所有的插件的默认 rules
var rulesConfig = {};
_lodash["default"].forEach(PluginClasses, function (Plugin) {
rulesConfig[Plugin.type] = {
level: 2 // 默认都是 error
};
}); // 用 rules 覆盖初始配置
Object.keys(rules).forEach(function (rule) {
var _concat = [].concat(rules[rule]),
_concat2 = _slicedToArray(_concat, 2),
level = _concat2[0],
config = _concat2[1];
rulesConfig[rule] = {
level: level,
config: config
};
}); // 配置为 0 的就是关闭,不启用插件!
var Plugins = _lodash["default"].filter(PluginClasses, function (Plugin) {
return rulesConfig[Plugin.type].level !== 0;
}); // 初始化插件
return _lodash["default"].map(Plugins, function (Plugin) {
var level = (0, _rule.ruleToLevel)(rulesConfig[Plugin.type].level); // 重新包装一下 throw 方法,加入 level
var throwErrorFunc = function throwErrorFunc(error) {
error.level = level;
error.type = Plugin.type;
throwError(error);
};
return new Plugin({
throwError: throwErrorFunc,
config: rulesConfig[Plugin.type].config
});
});
};
exports["default"] = _default;