mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-12-16 14:00:13 +01:00
Update MD011/no-reversed-links to ignore content of math blocks and spans (fixes #1864).
Some checks are pending
Checkers / linkcheck (push) Waiting to run
Checkers / spellcheck (push) Waiting to run
CI / build (20, macos-latest) (push) Waiting to run
CI / build (20, ubuntu-latest) (push) Waiting to run
CI / build (20, windows-latest) (push) Waiting to run
CI / build (22, macos-latest) (push) Waiting to run
CI / build (22, ubuntu-latest) (push) Waiting to run
CI / build (22, windows-latest) (push) Waiting to run
CI / build (24, macos-latest) (push) Waiting to run
CI / build (24, ubuntu-latest) (push) Waiting to run
CI / build (24, windows-latest) (push) Waiting to run
CI / pnpm (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
TestRepos / build (latest, ubuntu-latest) (push) Waiting to run
UpdateTestRepos / update (push) Waiting to run
Some checks are pending
Checkers / linkcheck (push) Waiting to run
Checkers / spellcheck (push) Waiting to run
CI / build (20, macos-latest) (push) Waiting to run
CI / build (20, ubuntu-latest) (push) Waiting to run
CI / build (20, windows-latest) (push) Waiting to run
CI / build (22, macos-latest) (push) Waiting to run
CI / build (22, ubuntu-latest) (push) Waiting to run
CI / build (22, windows-latest) (push) Waiting to run
CI / build (24, macos-latest) (push) Waiting to run
CI / build (24, ubuntu-latest) (push) Waiting to run
CI / build (24, windows-latest) (push) Waiting to run
CI / pnpm (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
TestRepos / build (latest, ubuntu-latest) (push) Waiting to run
UpdateTestRepos / update (push) Waiting to run
This commit is contained in:
parent
e88a71e7c8
commit
7668b0a263
5 changed files with 69 additions and 7 deletions
|
|
@ -4,6 +4,8 @@ import { addError, hasOverlap } from "../helpers/helpers.cjs";
|
||||||
import { addRangeToSet } from "../helpers/micromark-helpers.cjs";
|
import { addRangeToSet } from "../helpers/micromark-helpers.cjs";
|
||||||
import { filterByTypesCached } from "./cache.mjs";
|
import { filterByTypesCached } from "./cache.mjs";
|
||||||
|
|
||||||
|
/** @typedef {import("micromark-extension-math")} */
|
||||||
|
|
||||||
const reversedLinkRe = /(^|[^\\])\(([^()]+)\)\[([^\]^][^\]]*)\](?!\()/g;
|
const reversedLinkRe = /(^|[^\\])\(([^()]+)\)\[([^\]^][^\]]*)\](?!\()/g;
|
||||||
|
|
||||||
/** @type {import("markdownlint").Rule} */
|
/** @type {import("markdownlint").Rule} */
|
||||||
|
|
@ -13,14 +15,14 @@ export default {
|
||||||
"tags": [ "links" ],
|
"tags": [ "links" ],
|
||||||
"parser": "micromark",
|
"parser": "micromark",
|
||||||
"function": function MD011(params, onError) {
|
"function": function MD011(params, onError) {
|
||||||
const codeBlockLineNumbers = new Set();
|
const ignoreBlockLineNumbers = new Set();
|
||||||
for (const codeBlock of filterByTypesCached([ "codeFenced", "codeIndented" ])) {
|
for (const ignoreBlock of filterByTypesCached([ "codeFenced", "codeIndented", "mathFlow" ])) {
|
||||||
addRangeToSet(codeBlockLineNumbers, codeBlock.startLine, codeBlock.endLine);
|
addRangeToSet(ignoreBlockLineNumbers, ignoreBlock.startLine, ignoreBlock.endLine);
|
||||||
}
|
}
|
||||||
const codeTexts = filterByTypesCached([ "codeText" ]);
|
const ignoreTexts = filterByTypesCached([ "codeText", "mathText" ]);
|
||||||
for (const [ lineIndex, line ] of params.lines.entries()) {
|
for (const [ lineIndex, line ] of params.lines.entries()) {
|
||||||
const lineNumber = lineIndex + 1;
|
const lineNumber = lineIndex + 1;
|
||||||
if (!codeBlockLineNumbers.has(lineNumber)) {
|
if (!ignoreBlockLineNumbers.has(lineNumber)) {
|
||||||
let match = null;
|
let match = null;
|
||||||
while ((match = reversedLinkRe.exec(line)) !== null) {
|
while ((match = reversedLinkRe.exec(line)) !== null) {
|
||||||
const [ reversedLink, preChar, linkText, linkDestination ] = match;
|
const [ reversedLink, preChar, linkText, linkDestination ] = match;
|
||||||
|
|
@ -32,7 +34,7 @@ export default {
|
||||||
const length = match[0].length - preChar.length;
|
const length = match[0].length - preChar.length;
|
||||||
/** @type {import("../helpers/helpers.cjs").FileRange} */
|
/** @type {import("../helpers/helpers.cjs").FileRange} */
|
||||||
const range = { "startLine": lineNumber, "startColumn": column, "endLine": lineNumber, "endColumn": column + length - 1 };
|
const range = { "startLine": lineNumber, "startColumn": column, "endLine": lineNumber, "endColumn": column + length - 1 };
|
||||||
if (!codeTexts.some((codeText) => hasOverlap(codeText, range))) {
|
if (!ignoreTexts.some((ignoreText) => hasOverlap(ignoreText, range))) {
|
||||||
addError(
|
addError(
|
||||||
onError,
|
onError,
|
||||||
lineNumber,
|
lineNumber,
|
||||||
|
|
|
||||||
|
|
@ -1101,7 +1101,7 @@ test("readme", async(t) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
test("validateJsonUsingConfigSchemaStrict", async(t) => {
|
test("validateJsonUsingConfigSchemaStrict", async(t) => {
|
||||||
t.plan(218);
|
t.plan(219);
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
const ajv = new Ajv(ajvOptions);
|
const ajv = new Ajv(ajvOptions);
|
||||||
const validateSchemaStrict = ajv.compile(configSchemaStrict);
|
const validateSchemaStrict = ajv.compile(configSchemaStrict);
|
||||||
|
|
|
||||||
|
|
@ -75717,6 +75717,36 @@ Generated by [AVA](https://avajs.dev).
|
||||||
$$␊
|
$$␊
|
||||||
x * y = x * y␊
|
x * y = x * y␊
|
||||||
$$␊
|
$$␊
|
||||||
|
␊
|
||||||
|
## Content␊
|
||||||
|
␊
|
||||||
|
$$␊
|
||||||
|
␊
|
||||||
|
Text (reversed)[link] text␊
|
||||||
|
␊
|
||||||
|
Text [invalid](#link) text␊
|
||||||
|
␊
|
||||||
|
Text [link](not-descriptive-link-text) text␊
|
||||||
|
␊
|
||||||
|
Text javascript text␊
|
||||||
|
␊
|
||||||
|
$$␊
|
||||||
|
␊
|
||||||
|
Text $ (reversed)[link] $ text␊
|
||||||
|
␊
|
||||||
|
Text $ [invalid](#link) $ text␊
|
||||||
|
␊
|
||||||
|
Text $ [link](not-descriptive-link-text) $ text␊
|
||||||
|
␊
|
||||||
|
Text $ javascript $ text␊
|
||||||
|
␊
|
||||||
|
<!-- markdownlint-configure-file {␊
|
||||||
|
"proper-names": {␊
|
||||||
|
"names": [␊
|
||||||
|
"JavaScript"␊
|
||||||
|
]␊
|
||||||
|
}␊
|
||||||
|
} -->␊
|
||||||
`,
|
`,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -17,3 +17,33 @@ text
|
||||||
$$
|
$$
|
||||||
x * y = x * y
|
x * y = x * y
|
||||||
$$
|
$$
|
||||||
|
|
||||||
|
## Content
|
||||||
|
|
||||||
|
$$
|
||||||
|
|
||||||
|
Text (reversed)[link] text
|
||||||
|
|
||||||
|
Text [invalid](#link) text
|
||||||
|
|
||||||
|
Text [link](not-descriptive-link-text) text
|
||||||
|
|
||||||
|
Text javascript text
|
||||||
|
|
||||||
|
$$
|
||||||
|
|
||||||
|
Text $ (reversed)[link] $ text
|
||||||
|
|
||||||
|
Text $ [invalid](#link) $ text
|
||||||
|
|
||||||
|
Text $ [link](not-descriptive-link-text) $ text
|
||||||
|
|
||||||
|
Text $ javascript $ text
|
||||||
|
|
||||||
|
<!-- markdownlint-configure-file {
|
||||||
|
"proper-names": {
|
||||||
|
"names": [
|
||||||
|
"JavaScript"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
} -->
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue