mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-12-16 14:00:13 +01:00
Refactor to simplify and generalize rule name handling.
This commit is contained in:
parent
bc8776c582
commit
fda309df2f
1 changed files with 30 additions and 33 deletions
|
|
@ -8,42 +8,38 @@ var md = require("markdown-it")({ "html": true });
|
|||
var rules = require("./rules");
|
||||
var shared = require("./shared");
|
||||
|
||||
// Mappings from rule to description and name/tag to rules
|
||||
var allRuleNames = [];
|
||||
var ruleNameToRule = {};
|
||||
var idUpperToRuleNames = {};
|
||||
// Mapping from rule names/tags to canonical rule name
|
||||
var aliasToRuleNames = {};
|
||||
// var tagToRuleNames = {};
|
||||
rules.forEach(function forRule(rule) {
|
||||
var ruleName = rule.names[0];
|
||||
var ruleAliases = rule.names.slice(1);
|
||||
allRuleNames.push(ruleName);
|
||||
ruleNameToRule[ruleName] = rule;
|
||||
var ruleName = rule.names[0].toUpperCase();
|
||||
// The following is useful for updating README.md
|
||||
// console.log(
|
||||
// "* **[" + ruleName + "](doc/Rules.md#" + ruleName.toLowerCase() +
|
||||
// ")** *" + ruleAliases.join(", ") + "* - " + rule.description);
|
||||
// ")** *" + rule.names.slice(1).join(", ") + "* - " + rule.description);
|
||||
rule.names.forEach(function forName(name) {
|
||||
var nameUpper = name.toUpperCase();
|
||||
aliasToRuleNames[nameUpper] = [ ruleName ];
|
||||
});
|
||||
rule.tags.forEach(function forTag(tag) {
|
||||
var tagUpper = tag.toUpperCase();
|
||||
var ruleNames = idUpperToRuleNames[tagUpper] || [];
|
||||
var ruleNames = aliasToRuleNames[tagUpper] || [];
|
||||
ruleNames.push(ruleName);
|
||||
idUpperToRuleNames[tagUpper] = ruleNames;
|
||||
aliasToRuleNames[tagUpper] = ruleNames;
|
||||
// tagToRuleNames[tag] = ruleName;
|
||||
});
|
||||
ruleAliases.forEach(function forAlias(alias) {
|
||||
var aliasUpper = alias.toUpperCase();
|
||||
idUpperToRuleNames[aliasUpper] = [ ruleName ];
|
||||
});
|
||||
});
|
||||
// The following is useful for updating README.md
|
||||
// Object.keys(tagToRuleNames).sort().forEach(function forTag(tag) {
|
||||
// console.log("* **" + tag + "** - " +
|
||||
// idUpperToRuleNames[tag.toUpperCase()].join(", "));
|
||||
// aliasToRuleNames[tag.toUpperCase()].join(", "));
|
||||
// });
|
||||
|
||||
// Class for results with toString for pretty display
|
||||
function Results() {}
|
||||
Results.prototype.toString = function resultsToString(useAlias) {
|
||||
var that = this;
|
||||
var ruleNameToRule = null;
|
||||
var results = [];
|
||||
Object.keys(that).forEach(function forFile(file) {
|
||||
var fileResults = that[file];
|
||||
|
|
@ -65,6 +61,13 @@ Results.prototype.toString = function resultsToString(useAlias) {
|
|||
""));
|
||||
});
|
||||
} else {
|
||||
if (!ruleNameToRule) {
|
||||
ruleNameToRule = {};
|
||||
rules.forEach(function forRule(rule) {
|
||||
var ruleName = rule.names[0].toUpperCase();
|
||||
ruleNameToRule[ruleName] = rule;
|
||||
});
|
||||
}
|
||||
Object.keys(fileResults).forEach(function forRule(ruleName) {
|
||||
var rule = ruleNameToRule[ruleName];
|
||||
var ruleResults = fileResults[ruleName];
|
||||
|
|
@ -163,7 +166,7 @@ function lintContent(
|
|||
var ruleDefault = (defaultKey.length === 0) || !!config[defaultKey[0]];
|
||||
var mergedRules = {};
|
||||
rules.forEach(function forRule(rule) {
|
||||
var ruleName = rule.names[0];
|
||||
var ruleName = rule.names[0].toUpperCase();
|
||||
mergedRules[ruleName] = ruleDefault;
|
||||
});
|
||||
Object.keys(config).forEach(function forKey(key) {
|
||||
|
|
@ -176,18 +179,16 @@ function lintContent(
|
|||
value = false;
|
||||
}
|
||||
var keyUpper = key.toUpperCase();
|
||||
if (ruleNameToRule[keyUpper]) {
|
||||
mergedRules[keyUpper] = value;
|
||||
} else if (idUpperToRuleNames[keyUpper]) {
|
||||
idUpperToRuleNames[keyUpper].forEach(function forRule(ruleName) {
|
||||
mergedRules[ruleName] = value;
|
||||
});
|
||||
}
|
||||
(aliasToRuleNames[keyUpper] || []).forEach(function forRule(ruleName) {
|
||||
mergedRules[ruleName] = value;
|
||||
});
|
||||
});
|
||||
// Create mapping of enabled rules per line
|
||||
var enabledRules = {};
|
||||
var allRuleNames = [];
|
||||
rules.forEach(function forRule(rule) {
|
||||
var ruleName = rule.names[0];
|
||||
var ruleName = rule.names[0].toUpperCase();
|
||||
allRuleNames.push(ruleName);
|
||||
enabledRules[ruleName] = !!mergedRules[ruleName];
|
||||
});
|
||||
function forMatch(match) {
|
||||
|
|
@ -196,13 +197,9 @@ function lintContent(
|
|||
match[2].trim().toUpperCase().split(/\s+/) :
|
||||
allRuleNames;
|
||||
items.forEach(function forItem(nameUpper) {
|
||||
if (ruleNameToRule[nameUpper]) {
|
||||
enabledRules[nameUpper] = enabled;
|
||||
} else if (idUpperToRuleNames[nameUpper]) {
|
||||
idUpperToRuleNames[nameUpper].forEach(function forRule(ruleName) {
|
||||
enabledRules[ruleName] = enabled;
|
||||
});
|
||||
}
|
||||
(aliasToRuleNames[nameUpper] || []).forEach(function forRule(ruleName) {
|
||||
enabledRules[ruleName] = enabled;
|
||||
});
|
||||
});
|
||||
}
|
||||
var enabledRulesPerLineNumber = new Array(1 + frontMatterLines.length);
|
||||
|
|
@ -230,7 +227,7 @@ function lintContent(
|
|||
var result = (resultVersion === 0) ? {} : [];
|
||||
rules.forEach(function forRule(rule) {
|
||||
// Configure rule
|
||||
var ruleName = rule.names[0];
|
||||
var ruleName = rule.names[0].toUpperCase();
|
||||
params.config = mergedRules[ruleName];
|
||||
var errors = [];
|
||||
function onError(errorInfo) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue