diff --git a/demo/markdownlint-browser.js b/demo/markdownlint-browser.js
index 5baa9821..0a10b417 100644
--- a/demo/markdownlint-browser.js
+++ b/demo/markdownlint-browser.js
@@ -3705,6 +3705,8 @@ module.exports = {
// @ts-check
const { addErrorContext, bareUrlRe, filterTokens } = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js");
+const htmlLinkOpenRe = /^]/i;
+const htmlLinkCloseRe = /^<\/a[\s>]/i;
module.exports = {
"names": ["MD034", "no-bare-urls"],
"description": "Bare URL used",
@@ -3712,6 +3714,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;
@@ -3721,14 +3724,19 @@ module.exports = {
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 (!((leftChar === "[") && (rightChar === "]")) &&
diff --git a/lib/md034.js b/lib/md034.js
index fd721a45..2c82cde9 100644
--- a/lib/md034.js
+++ b/lib/md034.js
@@ -4,6 +4,9 @@
const { addErrorContext, bareUrlRe, filterTokens } = require("../helpers");
+const htmlLinkOpenRe = /^]/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 (
diff --git a/test/bare-urls.md b/test/bare-urls.md
index 6938511d..dd65041b 100644
--- a/test/bare-urls.md
+++ b/test/bare-urls.md
@@ -11,3 +11,21 @@ For more, see https://example.com/info.htm. {MD034}
Visit https://example.com, then refresh. {MD034}
The site (https://example.com) is down. {MD034}
+
+
+
+Some documents use to link.
+
+Or to link.
+
+Or repeat the URL https://example.com.
+
+Or https://example.com/info.htm.
+
+This is allowed to avoid embedding angle brackets in HTML Text https://example.com.
+
+As is https://example.com/info.htm text.
+
+
Another violation: https://example.com. {MD034}
+
+
Another violation: https://example.com. {MD034}
diff --git a/test/snapshots/markdownlint-test-scenarios.js.md b/test/snapshots/markdownlint-test-scenarios.js.md
index ef99d205..0ccdf5fe 100644
--- a/test/snapshots/markdownlint-test-scenarios.js.md
+++ b/test/snapshots/markdownlint-test-scenarios.js.md
@@ -2926,6 +2926,46 @@ Generated by [AVA](https://avajs.dev).
'no-bare-urls',
],
},
+ {
+ errorContext: 'https://example.com',
+ errorDetail: null,
+ errorRange: [
+ 25,
+ 19,
+ ],
+ fixInfo: {
+ deleteCount: 19,
+ editColumn: 25,
+ insertText: '',
+ },
+ lineNumber: 29,
+ ruleDescription: 'Bare URL used',
+ ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md034.md',
+ ruleNames: [
+ 'MD034',
+ 'no-bare-urls',
+ ],
+ },
+ {
+ errorContext: 'https://example.com',
+ errorDetail: null,
+ errorRange: [
+ 26,
+ 19,
+ ],
+ fixInfo: {
+ deleteCount: 19,
+ editColumn: 26,
+ insertText: '',
+ },
+ lineNumber: 31,
+ ruleDescription: 'Bare URL used',
+ ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md034.md',
+ ruleNames: [
+ 'MD034',
+ 'no-bare-urls',
+ ],
+ },
],
fixed: `# Detailed Results Bare URLs␊
␊
@@ -2940,6 +2980,24 @@ Generated by [AVA](https://avajs.dev).
Visit , then refresh. {MD034}␊
␊
The site () is down. {MD034}␊
+ ␊
+ ␊
+ ␊
+ Some documents use to link.␊
+ ␊
+ Or to link.␊
+ ␊
+ Or repeat the URL https://example.com.␊
+ ␊
+ Or https://example.com/info.htm.␊
+ ␊
+ This is allowed to avoid embedding angle brackets in HTML Text https://example.com.␊
+ ␊
+ As is https://example.com/info.htm text.␊
+ ␊
+
Another violation: . {MD034}
␊
+ ␊
+
Another violation: . {MD034}
␊
`,
}
diff --git a/test/snapshots/markdownlint-test-scenarios.js.snap b/test/snapshots/markdownlint-test-scenarios.js.snap
index c567eb91..8ad7d68a 100644
Binary files a/test/snapshots/markdownlint-test-scenarios.js.snap and b/test/snapshots/markdownlint-test-scenarios.js.snap differ