Update MD034/no-bare-urls to allow bare URLs inside the link text of HTML A tags (fixes 615).

This commit is contained in:
David Anson 2022-11-13 21:39:14 -08:00
parent 2e63bf7dd8
commit f84c91d95f
5 changed files with 99 additions and 8 deletions

View file

@ -4,6 +4,9 @@
const { addErrorContext, bareUrlRe, filterTokens } = require("../helpers");
const htmlLinkOpenRe = /^<a[\s>]/i;
const htmlLinkCloseRe = /^<\/a[\s>]/i;
module.exports = {
"names": [ "MD034", "no-bare-urls" ],
"description": "Bare URL used",
@ -11,6 +14,7 @@ module.exports = {
"function": function MD034(params, onError) {
filterTokens(params, "inline", (token) => {
let inLink = false;
let inInline = false;
for (const child of token.children) {
const { content, line, lineNumber, type } = child;
let match = null;
@ -18,14 +22,17 @@ module.exports = {
inLink = true;
} else if (type === "link_close") {
inLink = false;
} else if ((type === "text") && !inLink) {
} else if ((type === "html_inline") && htmlLinkOpenRe.test(content)) {
inInline = true;
} else if ((type === "html_inline") && htmlLinkCloseRe.test(content)) {
inInline = false;
} else if ((type === "text") && !inLink && !inInline) {
while ((match = bareUrlRe.exec(content)) !== null) {
const [ bareUrl ] = match;
const matchIndex = match.index;
const bareUrlLength = bareUrl.length;
// Allow "[https://example.com]" to avoid conflicts with
// MD011/no-reversed-links; allow quoting as another way
// of deliberately including a bare URL
// Allow "[LINK]" to avoid conflicts with MD011/no-reversed-links
// Allow quoting as a way of deliberately including a bare URL
const leftChar = content[matchIndex - 1];
const rightChar = content[matchIndex + bareUrlLength];
if (