textlint-rule-helper
Version:
A helper library for textlint rule.
50 lines • 1.9 kB
JavaScript
// MIT © 2018 azu
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.wrapReportHandler = wrapReportHandler;
var textlint_rule_helper_1 = __importDefault(require("./textlint-rule-helper"));
var IgnoreNodeManager_1 = __importDefault(require("./IgnoreNodeManager"));
var SourceLocation_1 = require("./SourceLocation");
/**
*
* @param context
* @param options
* @param handler
*/
function wrapReportHandler(context, options, handler) {
var ignoreNodeTypes = options.ignoreNodeTypes || [];
var ignoreNodeManager = new IgnoreNodeManager_1.default();
var ruleHelper = new textlint_rule_helper_1.default(context);
var text = context.getSource();
var sourceLocation = new SourceLocation_1.SourceLocation(text);
var reportIfUnignored = function reportIfUnignored(node, ruleError) {
var index = sourceLocation.toAbsoluteLocation(node, ruleError);
if (ignoreNodeManager.isIgnoredIndex(index)) {
return;
}
return context.report(node, ruleError);
};
var handlers = handler(reportIfUnignored);
Object.keys(handlers).forEach(function (nodeType) {
var nodeHandler = handlers[nodeType];
var wrappedNodeHandler = function (node) {
// child nodes
ignoreNodeManager.ignoreChildrenByTypes(node, ignoreNodeTypes);
// parent node
if (ruleHelper.isChildNode(node, ignoreNodeTypes)) {
return;
}
if (!nodeHandler) {
return;
}
return nodeHandler(node);
};
// @ts-expect-error: ignore
handlers[nodeType] = wrappedNodeHandler;
});
return handlers;
}
//# sourceMappingURL=wrap-report-handler.js.map