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