diff --git a/lib/markdownlint.js b/lib/markdownlint.js index 27aa806b..52a7defa 100644 --- a/lib/markdownlint.js +++ b/lib/markdownlint.js @@ -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) {