Skip to content

Commit

Permalink
Update to only invoke rules that are used at least once by the content.
Browse files Browse the repository at this point in the history
  • Loading branch information
DavidAnson committed Aug 23, 2024
1 parent 6870a48 commit 85e704f
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 10 deletions.
18 changes: 13 additions & 5 deletions demo/markdownlint-browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -2063,10 +2063,18 @@ function getEnabledRulesPerLineNumber(
handleInlineConfig(lines, enableDisableFile);
handleInlineConfig(lines, captureRestoreEnableDisable, updateLineState);
handleInlineConfig(lines, disableLineNextLine);
// Create the list of rules that are used at least once
const enabledRuleList = [];
for (const [ index, ruleName ] of allRuleNames.entries()) {
if (enabledRulesPerLineNumber.some((enabledRulesForLine) => enabledRulesForLine[ruleName])) {
enabledRuleList.push(ruleList[index]);
}
}
// Return results
return {
effectiveConfig,
enabledRulesPerLineNumber
enabledRulesPerLineNumber,
enabledRuleList
};
}

Expand Down Expand Up @@ -2108,7 +2116,7 @@ function lintContent(
const { frontMatterLines } = removeFrontMatterResult;
content = removeFrontMatterResult.content;
// Get enabled rules per line (with HTML comments present)
const { effectiveConfig, enabledRulesPerLineNumber } =
const { effectiveConfig, enabledRulesPerLineNumber, enabledRuleList } =
getEnabledRulesPerLineNumber(
ruleList,
content.split(helpers.newLineRe),
Expand All @@ -2118,7 +2126,7 @@ function lintContent(
configParsers,
aliasToRuleNames
);
const needMarkdownItTokens = ruleList.some(
const needMarkdownItTokens = enabledRuleList.some(
(rule) => (rule.parser === "markdownit") || (rule.parser === undefined)
);
// Parse content into parser tokens
Expand Down Expand Up @@ -2350,8 +2358,8 @@ function lintContent(
return results;
}
// Run all rules
const ruleListAsync = ruleList.filter((rule) => rule.asynchronous);
const ruleListSync = ruleList.filter((rule) => !rule.asynchronous);
const ruleListAsync = enabledRuleList.filter((rule) => rule.asynchronous);
const ruleListSync = enabledRuleList.filter((rule) => !rule.asynchronous);
const ruleListAsyncFirst = [
...ruleListAsync,
...ruleListSync
Expand Down
18 changes: 13 additions & 5 deletions lib/markdownlint.js
Original file line number Diff line number Diff line change
Expand Up @@ -510,10 +510,18 @@ function getEnabledRulesPerLineNumber(
handleInlineConfig(lines, enableDisableFile);
handleInlineConfig(lines, captureRestoreEnableDisable, updateLineState);
handleInlineConfig(lines, disableLineNextLine);
// Create the list of rules that are used at least once
const enabledRuleList = [];
for (const [ index, ruleName ] of allRuleNames.entries()) {
if (enabledRulesPerLineNumber.some((enabledRulesForLine) => enabledRulesForLine[ruleName])) {
enabledRuleList.push(ruleList[index]);
}
}
// Return results
return {
effectiveConfig,
enabledRulesPerLineNumber
enabledRulesPerLineNumber,
enabledRuleList
};
}

Expand Down Expand Up @@ -555,7 +563,7 @@ function lintContent(
const { frontMatterLines } = removeFrontMatterResult;
content = removeFrontMatterResult.content;
// Get enabled rules per line (with HTML comments present)
const { effectiveConfig, enabledRulesPerLineNumber } =
const { effectiveConfig, enabledRulesPerLineNumber, enabledRuleList } =
getEnabledRulesPerLineNumber(
ruleList,
content.split(helpers.newLineRe),
Expand All @@ -565,7 +573,7 @@ function lintContent(
configParsers,
aliasToRuleNames
);
const needMarkdownItTokens = ruleList.some(
const needMarkdownItTokens = enabledRuleList.some(
(rule) => (rule.parser === "markdownit") || (rule.parser === undefined)
);
// Parse content into parser tokens
Expand Down Expand Up @@ -797,8 +805,8 @@ function lintContent(
return results;
}
// Run all rules
const ruleListAsync = ruleList.filter((rule) => rule.asynchronous);
const ruleListSync = ruleList.filter((rule) => !rule.asynchronous);
const ruleListAsync = enabledRuleList.filter((rule) => rule.asynchronous);
const ruleListSync = enabledRuleList.filter((rule) => !rule.asynchronous);
const ruleListAsyncFirst = [
...ruleListAsync,
...ruleListSync
Expand Down
22 changes: 22 additions & 0 deletions test/markdownlint-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1161,6 +1161,28 @@ test("markdownItPluginsNoMarkdownIt", (t) => new Promise((resolve) => {
});
}));

test("markdownItPluginsUnusedUncalled", (t) => new Promise((resolve) => {
t.plan(2);
markdownlint({
"config": {
"default": false
},
"strings": {
"string": "# Heading\n\nText\n"
},
// Use a markdown-it custom rule so the markdown-it plugin will be run
"customRules": customRules.anyBlockquote,
"markdownItPlugins": [
[ pluginInline, "check_text_plugin", "text", () => t.fail() ]
]
}, function callback(err, actual) {
t.falsy(err);
const expected = { "string": [] };
t.deepEqual(actual, expected, "Unexpected issues.");
resolve();
});
}));

test("Pandoc footnote", (t) => new Promise((resolve) => {
t.plan(2);
markdownlint({
Expand Down

0 comments on commit 85e704f

Please sign in to comment.