mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-12-17 06:20:12 +01:00
Reduce execution time by ~50% by updating getEnabledRulesPerLineNumber to make enabledRules immutable and copy only when changed (also, simplify handleInlineConfig slightly).
This commit is contained in:
parent
7cf9c2d6be
commit
ff8f4ea9fc
2 changed files with 32 additions and 30 deletions
|
|
@ -1239,8 +1239,7 @@ function getEnabledRulesPerLineNumber(ruleList, lines, frontMatterLines, noInlin
|
||||||
var enabledRulesPerLineNumber = new Array(1 + frontMatterLines.length);
|
var enabledRulesPerLineNumber = new Array(1 + frontMatterLines.length);
|
||||||
// Helper functions
|
// Helper functions
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function handleInlineConfig(perLine, forEachMatch, forEachLine) {
|
function handleInlineConfig(input, forEachMatch, forEachLine) {
|
||||||
var input = perLine ? lines : [lines.join("\n")];
|
|
||||||
input.forEach(function (line, lineIndex) {
|
input.forEach(function (line, lineIndex) {
|
||||||
if (!noInlineConfig) {
|
if (!noInlineConfig) {
|
||||||
var match = null;
|
var match = null;
|
||||||
|
|
@ -1269,6 +1268,7 @@ function getEnabledRulesPerLineNumber(ruleList, lines, frontMatterLines, noInlin
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function applyEnableDisable(action, parameter, state) {
|
function applyEnableDisable(action, parameter, state) {
|
||||||
|
state = __assign({}, state);
|
||||||
var enabled = (action.startsWith("ENABLE"));
|
var enabled = (action.startsWith("ENABLE"));
|
||||||
var items = parameter ?
|
var items = parameter ?
|
||||||
parameter.trim().toUpperCase().split(/\s+/) :
|
parameter.trim().toUpperCase().split(/\s+/) :
|
||||||
|
|
@ -1278,38 +1278,39 @@ function getEnabledRulesPerLineNumber(ruleList, lines, frontMatterLines, noInlin
|
||||||
state[ruleName] = enabled;
|
state[ruleName] = enabled;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
return state;
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function enableDisableFile(action, parameter) {
|
function enableDisableFile(action, parameter) {
|
||||||
if ((action === "ENABLE-FILE") || (action === "DISABLE-FILE")) {
|
if ((action === "ENABLE-FILE") || (action === "DISABLE-FILE")) {
|
||||||
applyEnableDisable(action, parameter, enabledRules);
|
enabledRules = applyEnableDisable(action, parameter, enabledRules);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function captureRestoreEnableDisable(action, parameter) {
|
function captureRestoreEnableDisable(action, parameter) {
|
||||||
if (action === "CAPTURE") {
|
if (action === "CAPTURE") {
|
||||||
capturedRules = __assign({}, enabledRules);
|
capturedRules = enabledRules;
|
||||||
}
|
}
|
||||||
else if (action === "RESTORE") {
|
else if (action === "RESTORE") {
|
||||||
enabledRules = __assign({}, capturedRules);
|
enabledRules = capturedRules;
|
||||||
}
|
}
|
||||||
else if ((action === "ENABLE") || (action === "DISABLE")) {
|
else if ((action === "ENABLE") || (action === "DISABLE")) {
|
||||||
enabledRules = __assign({}, enabledRules);
|
enabledRules = applyEnableDisable(action, parameter, enabledRules);
|
||||||
applyEnableDisable(action, parameter, enabledRules);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function updateLineState() {
|
function updateLineState() {
|
||||||
enabledRulesPerLineNumber.push(__assign({}, enabledRules));
|
enabledRulesPerLineNumber.push(enabledRules);
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function disableNextLine(action, parameter, lineNumber) {
|
function disableNextLine(action, parameter, lineNumber) {
|
||||||
if (action === "DISABLE-NEXT-LINE") {
|
if (action === "DISABLE-NEXT-LINE") {
|
||||||
|
enabledRulesPerLineNumber[lineNumber + 1] =
|
||||||
applyEnableDisable(action, parameter, enabledRulesPerLineNumber[lineNumber + 1] || {});
|
applyEnableDisable(action, parameter, enabledRulesPerLineNumber[lineNumber + 1] || {});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Handle inline comments
|
// Handle inline comments
|
||||||
handleInlineConfig(false, configureFile);
|
handleInlineConfig([lines.join("\n")], configureFile);
|
||||||
var effectiveConfig = getEffectiveConfig(ruleList, config, aliasToRuleNames);
|
var effectiveConfig = getEffectiveConfig(ruleList, config, aliasToRuleNames);
|
||||||
ruleList.forEach(function (rule) {
|
ruleList.forEach(function (rule) {
|
||||||
var ruleName = rule.names[0].toUpperCase();
|
var ruleName = rule.names[0].toUpperCase();
|
||||||
|
|
@ -1317,9 +1318,9 @@ function getEnabledRulesPerLineNumber(ruleList, lines, frontMatterLines, noInlin
|
||||||
enabledRules[ruleName] = !!effectiveConfig[ruleName];
|
enabledRules[ruleName] = !!effectiveConfig[ruleName];
|
||||||
});
|
});
|
||||||
capturedRules = enabledRules;
|
capturedRules = enabledRules;
|
||||||
handleInlineConfig(true, enableDisableFile);
|
handleInlineConfig(lines, enableDisableFile);
|
||||||
handleInlineConfig(true, captureRestoreEnableDisable, updateLineState);
|
handleInlineConfig(lines, captureRestoreEnableDisable, updateLineState);
|
||||||
handleInlineConfig(true, disableNextLine);
|
handleInlineConfig(lines, disableNextLine);
|
||||||
// Return results
|
// Return results
|
||||||
return {
|
return {
|
||||||
effectiveConfig: effectiveConfig,
|
effectiveConfig: effectiveConfig,
|
||||||
|
|
|
||||||
|
|
@ -337,8 +337,7 @@ function getEnabledRulesPerLineNumber(
|
||||||
const enabledRulesPerLineNumber = new Array(1 + frontMatterLines.length);
|
const enabledRulesPerLineNumber = new Array(1 + frontMatterLines.length);
|
||||||
// Helper functions
|
// Helper functions
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function handleInlineConfig(perLine, forEachMatch, forEachLine) {
|
function handleInlineConfig(input, forEachMatch, forEachLine) {
|
||||||
const input = perLine ? lines : [ lines.join("\n") ];
|
|
||||||
input.forEach((line, lineIndex) => {
|
input.forEach((line, lineIndex) => {
|
||||||
if (!noInlineConfig) {
|
if (!noInlineConfig) {
|
||||||
let match = null;
|
let match = null;
|
||||||
|
|
@ -369,6 +368,7 @@ function getEnabledRulesPerLineNumber(
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function applyEnableDisable(action, parameter, state) {
|
function applyEnableDisable(action, parameter, state) {
|
||||||
|
state = { ...state };
|
||||||
const enabled = (action.startsWith("ENABLE"));
|
const enabled = (action.startsWith("ENABLE"));
|
||||||
const items = parameter ?
|
const items = parameter ?
|
||||||
parameter.trim().toUpperCase().split(/\s+/) :
|
parameter.trim().toUpperCase().split(/\s+/) :
|
||||||
|
|
@ -378,31 +378,32 @@ function getEnabledRulesPerLineNumber(
|
||||||
state[ruleName] = enabled;
|
state[ruleName] = enabled;
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
return state;
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function enableDisableFile(action, parameter) {
|
function enableDisableFile(action, parameter) {
|
||||||
if ((action === "ENABLE-FILE") || (action === "DISABLE-FILE")) {
|
if ((action === "ENABLE-FILE") || (action === "DISABLE-FILE")) {
|
||||||
applyEnableDisable(action, parameter, enabledRules);
|
enabledRules = applyEnableDisable(action, parameter, enabledRules);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function captureRestoreEnableDisable(action, parameter) {
|
function captureRestoreEnableDisable(action, parameter) {
|
||||||
if (action === "CAPTURE") {
|
if (action === "CAPTURE") {
|
||||||
capturedRules = { ...enabledRules };
|
capturedRules = enabledRules;
|
||||||
} else if (action === "RESTORE") {
|
} else if (action === "RESTORE") {
|
||||||
enabledRules = { ...capturedRules };
|
enabledRules = capturedRules;
|
||||||
} else if ((action === "ENABLE") || (action === "DISABLE")) {
|
} else if ((action === "ENABLE") || (action === "DISABLE")) {
|
||||||
enabledRules = { ...enabledRules };
|
enabledRules = applyEnableDisable(action, parameter, enabledRules);
|
||||||
applyEnableDisable(action, parameter, enabledRules);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function updateLineState() {
|
function updateLineState() {
|
||||||
enabledRulesPerLineNumber.push({ ...enabledRules });
|
enabledRulesPerLineNumber.push(enabledRules);
|
||||||
}
|
}
|
||||||
// eslint-disable-next-line jsdoc/require-jsdoc
|
// eslint-disable-next-line jsdoc/require-jsdoc
|
||||||
function disableNextLine(action, parameter, lineNumber) {
|
function disableNextLine(action, parameter, lineNumber) {
|
||||||
if (action === "DISABLE-NEXT-LINE") {
|
if (action === "DISABLE-NEXT-LINE") {
|
||||||
|
enabledRulesPerLineNumber[lineNumber + 1] =
|
||||||
applyEnableDisable(
|
applyEnableDisable(
|
||||||
action,
|
action,
|
||||||
parameter,
|
parameter,
|
||||||
|
|
@ -411,7 +412,7 @@ function getEnabledRulesPerLineNumber(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Handle inline comments
|
// Handle inline comments
|
||||||
handleInlineConfig(false, configureFile);
|
handleInlineConfig([ lines.join("\n") ], configureFile);
|
||||||
const effectiveConfig = getEffectiveConfig(
|
const effectiveConfig = getEffectiveConfig(
|
||||||
ruleList, config, aliasToRuleNames);
|
ruleList, config, aliasToRuleNames);
|
||||||
ruleList.forEach((rule) => {
|
ruleList.forEach((rule) => {
|
||||||
|
|
@ -420,9 +421,9 @@ function getEnabledRulesPerLineNumber(
|
||||||
enabledRules[ruleName] = !!effectiveConfig[ruleName];
|
enabledRules[ruleName] = !!effectiveConfig[ruleName];
|
||||||
});
|
});
|
||||||
capturedRules = enabledRules;
|
capturedRules = enabledRules;
|
||||||
handleInlineConfig(true, enableDisableFile);
|
handleInlineConfig(lines, enableDisableFile);
|
||||||
handleInlineConfig(true, captureRestoreEnableDisable, updateLineState);
|
handleInlineConfig(lines, captureRestoreEnableDisable, updateLineState);
|
||||||
handleInlineConfig(true, disableNextLine);
|
handleInlineConfig(lines, disableNextLine);
|
||||||
// Return results
|
// Return results
|
||||||
return {
|
return {
|
||||||
effectiveConfig,
|
effectiveConfig,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue