diff --git a/lib/rules.js b/lib/rules.js index 053daf8b..f77e0b8e 100644 --- a/lib/rules.js +++ b/lib/rules.js @@ -56,7 +56,7 @@ function unorderedListStyleFor(token) { return "dash"; case "+": return "plus"; - case "*": + // case "*": default: return "asterisk"; } @@ -435,14 +435,25 @@ module.exports = [ headerLineNumbers.push(heading.lineNumber); }); } - var re = longLineReFunc(params.options); + var linkOnlyLineNumbers = []; + filterTokens(params, "inline", function forToken(token) { + if (((token.children.length === 2) || (token.children.length === 3)) && + (token.children[0].type === "link_open") && + (token.children[token.children.length - 1].type === "link_close")) { + linkOnlyLineNumbers.push(token.lineNumber); + } + }); + var longLineRe = longLineReFunc(params.options); + var labelRe = /^\s*\[.*[^\\]]:/; forEachLine(params, function forLine(line, lineIndex, inCode, onFence, inTable) { var lineNumber = lineIndex + 1; if ((includeCodeBlocks || !inCode) && (includeTables || !inTable) && (includeHeaders || (headerLineNumbers.indexOf(lineNumber)) < 0) && - re.test(line)) { + (linkOnlyLineNumbers.indexOf(lineNumber) < 0) && + longLineRe.test(line) && + !labelRe.test(line)) { errors.addDetailIf(lineNumber, lineLength, line.length); } }); diff --git a/test/long_lines.md b/test/long_lines.md index 875c8c69..94ae56af 100644 --- a/test/long_lines.md +++ b/test/long_lines.md @@ -1,3 +1,23 @@ This is a very very very very very very very very very very very very very very long line {MD013} -This line however, while very long, doesn't have whitespace after the 80th columnwhichallowsforURLsandotherlongthings. \ No newline at end of file +This line however, while very long, doesn't have whitespace after the 80th columnwhichallowsforURLsandotherlongthings. + +[This long line is comprised entirely of a link](http://example.com "This is the long link's title") + +> [This long line is comprised entirely of a link](http://example.com "This is the long link's title") + + [This long line is comprised entirely of a link](http://example.com "But is inside a code block") {MD013} + +This [long line is comprised mostly of a link](http://example.com "This is the long link's title") {MD013} + +[This long line is comprised mostly of a link](http://example.com "This is the long link's title") text {MD013} + +This long line includes a simple [reference][label] link and is long enough to violate the rule. {MD013} + +[This long line is comprised entirely of a reference link and is long enough to violate the rule][label] + +[label]: http://example.org "Title for a link reference that is itself long enough to violate the rule" + +[Link to broken label][notlabel] + +[notlabel\]: notlink "Invalid syntax for a link label because the right bracket is backslash-escaped {MD013}"