Cache results of inlineCodeSpanRanges for use by MD011/MD044.

This commit is contained in:
David Anson 2021-06-17 22:01:27 -07:00
parent 706f48bd25
commit 7d40926367
6 changed files with 56 additions and 39 deletions

View file

@ -303,14 +303,14 @@ module.exports.forEachLine = function forEachLine(lineMetadata, handler) {
}); });
}; };
// Returns (nested) lists as a flat array (in order) // Returns (nested) lists as a flat array (in order)
module.exports.flattenLists = function flattenLists(params) { module.exports.flattenLists = function flattenLists(tokens) {
var flattenedLists = []; var flattenedLists = [];
var stack = []; var stack = [];
var current = null; var current = null;
var nesting = 0; var nesting = 0;
var nestingStack = []; var nestingStack = [];
var lastWithMap = { "map": [0, 1] }; var lastWithMap = { "map": [0, 1] };
params.tokens.forEach(function (token) { tokens.forEach(function (token) {
if (isMathBlock(token) && token.map[1]) { if (isMathBlock(token) && token.map[1]) {
// markdown-it-texmath plugin does not account for math_block_end // markdown-it-texmath plugin does not account for math_block_end
token.map[1]++; token.map[1]++;
@ -760,13 +760,6 @@ module.exports.applyFixes = function applyFixes(input, errors) {
"use strict"; "use strict";
// @ts-check // @ts-check
var lineMetadata = null;
module.exports.lineMetadata = function (value) {
if (value) {
lineMetadata = value;
}
return lineMetadata;
};
var flattenedLists = null; var flattenedLists = null;
module.exports.flattenedLists = function (value) { module.exports.flattenedLists = function (value) {
if (value) { if (value) {
@ -774,9 +767,24 @@ module.exports.flattenedLists = function (value) {
} }
return flattenedLists; return flattenedLists;
}; };
var inlineCodeSpanRanges = null;
module.exports.inlineCodeSpanRanges = function (value) {
if (value) {
inlineCodeSpanRanges = value;
}
return inlineCodeSpanRanges;
};
var lineMetadata = null;
module.exports.lineMetadata = function (value) {
if (value) {
lineMetadata = value;
}
return lineMetadata;
};
module.exports.clear = function () { module.exports.clear = function () {
lineMetadata = null;
flattenedLists = null; flattenedLists = null;
inlineCodeSpanRanges = null;
lineMetadata = null;
}; };
@ -1268,7 +1276,8 @@ function lintContent(ruleList, name, content, md, config, frontMatter, handleRul
frontMatterLines: frontMatterLines frontMatterLines: frontMatterLines
}; };
cache.lineMetadata(helpers.getLineMetadata(params)); cache.lineMetadata(helpers.getLineMetadata(params));
cache.flattenedLists(helpers.flattenLists(params)); cache.flattenedLists(helpers.flattenLists(params.tokens));
cache.inlineCodeSpanRanges(helpers.inlineCodeSpanRanges(params.lines));
// Function to run for each rule // Function to run for each rule
var result = (resultVersion === 0) ? {} : []; var result = (resultVersion === 0) ? {} : [];
// eslint-disable-next-line jsdoc/require-jsdoc // eslint-disable-next-line jsdoc/require-jsdoc
@ -2207,15 +2216,15 @@ module.exports = {
"use strict"; "use strict";
// @ts-check // @ts-check
var _a = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"), addError = _a.addError, forEachLine = _a.forEachLine, inlineCodeSpanRanges = _a.inlineCodeSpanRanges, overlapsAnyRange = _a.overlapsAnyRange; var _a = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"), addError = _a.addError, forEachLine = _a.forEachLine, overlapsAnyRange = _a.overlapsAnyRange;
var lineMetadata = __webpack_require__(/*! ./cache */ "../lib/cache.js").lineMetadata; var _b = __webpack_require__(/*! ./cache */ "../lib/cache.js"), inlineCodeSpanRanges = _b.inlineCodeSpanRanges, lineMetadata = _b.lineMetadata;
var reversedLinkRe = /(?<![\\\]])\(([^)]+)(?<!\\)\)\[([^\]^][^\]]*)(?<!\\)](?!\()/g; var reversedLinkRe = /(?<![\\\]])\(([^)]+)(?<!\\)\)\[([^\]^][^\]]*)(?<!\\)](?!\()/g;
module.exports = { module.exports = {
"names": ["MD011", "no-reversed-links"], "names": ["MD011", "no-reversed-links"],
"description": "Reversed link syntax", "description": "Reversed link syntax",
"tags": ["links"], "tags": ["links"],
"function": function MD011(params, onError) { "function": function MD011(params, onError) {
var exclusions = inlineCodeSpanRanges(params.lines); var exclusions = inlineCodeSpanRanges();
forEachLine(lineMetadata(), function (line, lineIndex, inCode, onFence) { forEachLine(lineMetadata(), function (line, lineIndex, inCode, onFence) {
if (!inCode && !onFence) { if (!inCode && !onFence) {
var match = null; var match = null;
@ -3778,8 +3787,8 @@ module.exports = {
"use strict"; "use strict";
// @ts-check // @ts-check
var _a = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"), addErrorDetailIf = _a.addErrorDetailIf, bareUrlRe = _a.bareUrlRe, escapeForRegExp = _a.escapeForRegExp, forEachLine = _a.forEachLine, inlineCodeSpanRanges = _a.inlineCodeSpanRanges, overlapsAnyRange = _a.overlapsAnyRange, linkRe = _a.linkRe, linkReferenceRe = _a.linkReferenceRe; var _a = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"), addErrorDetailIf = _a.addErrorDetailIf, bareUrlRe = _a.bareUrlRe, escapeForRegExp = _a.escapeForRegExp, forEachLine = _a.forEachLine, overlapsAnyRange = _a.overlapsAnyRange, linkRe = _a.linkRe, linkReferenceRe = _a.linkReferenceRe;
var lineMetadata = __webpack_require__(/*! ./cache */ "../lib/cache.js").lineMetadata; var _b = __webpack_require__(/*! ./cache */ "../lib/cache.js"), inlineCodeSpanRanges = _b.inlineCodeSpanRanges, lineMetadata = _b.lineMetadata;
module.exports = { module.exports = {
"names": ["MD044", "proper-names"], "names": ["MD044", "proper-names"],
"description": "Proper names should have the correct capitalization", "description": "Proper names should have the correct capitalization",
@ -3809,7 +3818,7 @@ module.exports = {
} }
}); });
if (!includeCodeBlocks) { if (!includeCodeBlocks) {
exclusions.push.apply(exclusions, inlineCodeSpanRanges(params.lines)); exclusions.push.apply(exclusions, inlineCodeSpanRanges());
} }
var _loop_1 = function (name_1) { var _loop_1 = function (name_1) {
var escapedName = escapeForRegExp(name_1); var escapedName = escapeForRegExp(name_1);

View file

@ -306,14 +306,14 @@ module.exports.forEachLine = function forEachLine(lineMetadata, handler) {
}; };
// Returns (nested) lists as a flat array (in order) // Returns (nested) lists as a flat array (in order)
module.exports.flattenLists = function flattenLists(params) { module.exports.flattenLists = function flattenLists(tokens) {
const flattenedLists = []; const flattenedLists = [];
const stack = []; const stack = [];
let current = null; let current = null;
let nesting = 0; let nesting = 0;
const nestingStack = []; const nestingStack = [];
let lastWithMap = { "map": [ 0, 1 ] }; let lastWithMap = { "map": [ 0, 1 ] };
params.tokens.forEach((token) => { tokens.forEach((token) => {
if (isMathBlock(token) && token.map[1]) { if (isMathBlock(token) && token.map[1]) {
// markdown-it-texmath plugin does not account for math_block_end // markdown-it-texmath plugin does not account for math_block_end
token.map[1]++; token.map[1]++;

View file

@ -2,14 +2,6 @@
"use strict"; "use strict";
let lineMetadata = null;
module.exports.lineMetadata = (value) => {
if (value) {
lineMetadata = value;
}
return lineMetadata;
};
let flattenedLists = null; let flattenedLists = null;
module.exports.flattenedLists = (value) => { module.exports.flattenedLists = (value) => {
if (value) { if (value) {
@ -18,7 +10,24 @@ module.exports.flattenedLists = (value) => {
return flattenedLists; return flattenedLists;
}; };
module.exports.clear = () => { let inlineCodeSpanRanges = null;
lineMetadata = null; module.exports.inlineCodeSpanRanges = (value) => {
flattenedLists = null; if (value) {
inlineCodeSpanRanges = value;
}
return inlineCodeSpanRanges;
};
let lineMetadata = null;
module.exports.lineMetadata = (value) => {
if (value) {
lineMetadata = value;
}
return lineMetadata;
};
module.exports.clear = () => {
flattenedLists = null;
inlineCodeSpanRanges = null;
lineMetadata = null;
}; };

View file

@ -516,7 +516,8 @@ function lintContent(
frontMatterLines frontMatterLines
}; };
cache.lineMetadata(helpers.getLineMetadata(params)); cache.lineMetadata(helpers.getLineMetadata(params));
cache.flattenedLists(helpers.flattenLists(params)); cache.flattenedLists(helpers.flattenLists(params.tokens));
cache.inlineCodeSpanRanges(helpers.inlineCodeSpanRanges(params.lines));
// Function to run for each rule // Function to run for each rule
const result = (resultVersion === 0) ? {} : []; const result = (resultVersion === 0) ? {} : [];
// eslint-disable-next-line jsdoc/require-jsdoc // eslint-disable-next-line jsdoc/require-jsdoc

View file

@ -2,9 +2,8 @@
"use strict"; "use strict";
const { addError, forEachLine, inlineCodeSpanRanges, overlapsAnyRange } = const { addError, forEachLine, overlapsAnyRange } = require("../helpers");
require("../helpers"); const { inlineCodeSpanRanges, lineMetadata } = require("./cache");
const { lineMetadata } = require("./cache");
const reversedLinkRe = const reversedLinkRe =
/(?<![\\\]])\(([^)]+)(?<!\\)\)\[([^\]^][^\]]*)(?<!\\)](?!\()/g; /(?<![\\\]])\(([^)]+)(?<!\\)\)\[([^\]^][^\]]*)(?<!\\)](?!\()/g;
@ -14,7 +13,7 @@ module.exports = {
"description": "Reversed link syntax", "description": "Reversed link syntax",
"tags": [ "links" ], "tags": [ "links" ],
"function": function MD011(params, onError) { "function": function MD011(params, onError) {
const exclusions = inlineCodeSpanRanges(params.lines); const exclusions = inlineCodeSpanRanges();
forEachLine(lineMetadata(), (line, lineIndex, inCode, onFence) => { forEachLine(lineMetadata(), (line, lineIndex, inCode, onFence) => {
if (!inCode && !onFence) { if (!inCode && !onFence) {
let match = null; let match = null;

View file

@ -3,9 +3,8 @@
"use strict"; "use strict";
const { addErrorDetailIf, bareUrlRe, escapeForRegExp, forEachLine, const { addErrorDetailIf, bareUrlRe, escapeForRegExp, forEachLine,
inlineCodeSpanRanges, overlapsAnyRange, linkRe, linkReferenceRe } = overlapsAnyRange, linkRe, linkReferenceRe } = require("../helpers");
require("../helpers"); const { inlineCodeSpanRanges, lineMetadata } = require("./cache");
const { lineMetadata } = require("./cache");
module.exports = { module.exports = {
"names": [ "MD044", "proper-names" ], "names": [ "MD044", "proper-names" ],
@ -37,7 +36,7 @@ module.exports = {
} }
}); });
if (!includeCodeBlocks) { if (!includeCodeBlocks) {
exclusions.push(...inlineCodeSpanRanges(params.lines)); exclusions.push(...inlineCodeSpanRanges());
} }
for (const name of names) { for (const name of names) {
const escapedName = escapeForRegExp(name); const escapedName = escapeForRegExp(name);