diff --git a/demo/markdownlint-browser.js b/demo/markdownlint-browser.js index b7ca1ad6..70f86f47 100644 --- a/demo/markdownlint-browser.js +++ b/demo/markdownlint-browser.js @@ -52,9 +52,6 @@ var emphasisMarkersRe = /[_*]/g; // Regular expression for inline links and shortcut reference links var linkRe = /(\[(?:[^[\]]?(?:\[[^[\]]*\])?)*\])(\([^)]*\)|\[[^\]]*\])?/g; module.exports.linkRe = linkRe; -// Regular expression for empty inline links -module.exports.emptyLinkRe = - /\[(?:[^[\]]?(?:\[[^[\]]*\])?)*\]\((?:|#|<>)\)/; // Regular expression for link reference definition lines module.exports.linkReferenceRe = /^ {0,3}\[[^\]]+]:\s.*$/; // All punctuation characters (normal and full-width) @@ -3917,7 +3914,7 @@ module.exports = { "use strict"; // @ts-check -var _a = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"), addErrorContext = _a.addErrorContext, emptyLinkRe = _a.emptyLinkRe, filterTokens = _a.filterTokens, rangeFromRegExp = _a.rangeFromRegExp; +var _a = __webpack_require__(/*! ../helpers */ "../helpers/helpers.js"), addErrorContext = _a.addErrorContext, escapeForRegExp = _a.escapeForRegExp, filterTokens = _a.filterTokens; module.exports = { "names": ["MD042", "no-empty-links"], "description": "No empty links", @@ -3940,7 +3937,14 @@ module.exports = { else if (child.type === "link_close") { inLink = false; if (emptyLink) { - addErrorContext(onError, child.lineNumber, "[" + linkText + "]()", null, null, rangeFromRegExp(child.line, emptyLinkRe)); + var context = "[".concat(linkText, "]"); + var range = null; + var match = child.line.match(new RegExp("".concat(escapeForRegExp(context), "\\((?:|#|<>)\\)"))); + if (match) { + context = match[0]; + range = [match.index + 1, match[0].length]; + } + addErrorContext(onError, child.lineNumber, context, null, null, range); emptyLink = false; } } diff --git a/helpers/helpers.js b/helpers/helpers.js index 873c978b..da378898 100644 --- a/helpers/helpers.js +++ b/helpers/helpers.js @@ -31,10 +31,6 @@ const linkRe = /(\[(?:[^[\]]?(?:\[[^[\]]*\])?)*\])(\([^)]*\)|\[[^\]]*\])?/g; module.exports.linkRe = linkRe; -// Regular expression for empty inline links -module.exports.emptyLinkRe = - /\[(?:[^[\]]?(?:\[[^[\]]*\])?)*\]\((?:|#|<>)\)/; - // Regular expression for link reference definition lines module.exports.linkReferenceRe = /^ {0,3}\[[^\]]+]:\s.*$/; diff --git a/lib/md042.js b/lib/md042.js index 12c7ea7d..1695542d 100644 --- a/lib/md042.js +++ b/lib/md042.js @@ -2,7 +2,7 @@ "use strict"; -const { addErrorContext, emptyLinkRe, filterTokens, rangeFromRegExp } = +const { addErrorContext, escapeForRegExp, filterTokens } = require("../helpers"); module.exports = { @@ -26,9 +26,18 @@ module.exports = { } else if (child.type === "link_close") { inLink = false; if (emptyLink) { - addErrorContext(onError, child.lineNumber, - "[" + linkText + "]()", null, null, - rangeFromRegExp(child.line, emptyLinkRe)); + let context = `[${linkText}]`; + let range = null; + const match = child.line.match( + new RegExp(`${escapeForRegExp(context)}\\((?:|#|<>)\\)`) + ); + if (match) { + context = match[0]; + range = [ match.index + 1, match[0].length ]; + } + addErrorContext( + onError, child.lineNumber, context, null, null, range + ); emptyLink = false; } } else if (inLink) { diff --git a/test/detailed-results-MD041-MD050.results.json b/test/detailed-results-MD041-MD050.results.json index d9b7b38b..e4c35d34 100644 --- a/test/detailed-results-MD041-MD050.results.json +++ b/test/detailed-results-MD041-MD050.results.json @@ -38,7 +38,7 @@ "ruleDescription": "No empty links", "ruleInformation": "https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md042", "errorDetail": null, - "errorContext": "[empty]()", + "errorContext": "[empty](#)", "errorRange": [ 4, 10 @@ -54,7 +54,7 @@ "ruleDescription": "No empty links", "ruleInformation": "https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md042", "errorDetail": null, - "errorContext": "[empty]()", + "errorContext": "[empty](<>)", "errorRange": [ 4, 11