From 4a27c3d100bfb552e85c65cb4e0942f4ab04d62f Mon Sep 17 00:00:00 2001 From: David Anson Date: Thu, 2 Nov 2017 22:25:56 -0700 Subject: [PATCH] Improve highlighting for MD037/no-space-in-emphasis, add more tests. --- lib/rules.js | 24 ++++++---- test/detailed-results-MD031-MD040.md | 6 +++ .../detailed-results-MD031-MD040.results.json | 45 +++++++++++++++++++ 3 files changed, 66 insertions(+), 9 deletions(-) diff --git a/lib/rules.js b/lib/rules.js index 4ea66f6b..442af762 100644 --- a/lib/rules.js +++ b/lib/rules.js @@ -15,7 +15,6 @@ var listItemMarkerInterruptsRe = /^[\s>]*(?:[*+-]|1\.)\s+/; var reversedLinkRe = /\([^)]+\)\[[^\]^][^\]]*]/; var spaceAfterBlockQuote = /^\s*(?:>\s+)+\S/; var spaceBeforeHeaderRe = /^\s+\S/; -var spaceInsideEmphasisRe = /(\*\*?|__?)(?:(?:\s.+)|(?:.+\s))\1/; var spaceInsideLinkRe = /\[(?:(?:\s[^\]]*)|(?:[^\]]*\s))](?=\(\S*\))/; var tabRe = /\t+/; var trailingPunctuationRe = /.$/; @@ -118,7 +117,7 @@ function forEachInlineChild(params, type, callback) { filterTokens(params, "inline", function forToken(token) { token.children.forEach(function forChild(child) { if (child.type === type) { - callback(child, token); + callback(child); } }); }); @@ -962,15 +961,22 @@ module.exports = [ "desc": "Spaces inside emphasis markers", "tags": [ "whitespace", "emphasis" ], "aliases": [ "no-space-in-emphasis" ], - "regexp": spaceInsideEmphasisRe, + "regexp": null, "func": function MD037(params, errors) { forEachInlineChild(params, "text", function forToken(token) { - var left = /\s(\*\*?|__?)\s.+\1/.exec(token.content); - var right = /(\*\*?|__?).+\s\1\s/.exec(token.content); - if (left) { - errors.addContext(token.lineNumber, left[0].trim()); - } else if (right) { - errors.addContext(token.lineNumber, right[0].trim(), false, true); + var left = true; + var match = /\s(\*\*?|__?)\s.+\1/.exec(token.content); + if (!match) { + left = false; + match = /(\*\*?|__?).+\s\1\s/.exec(token.content); + } + if (match) { + var text = match[0].trim(); + var line = params.lines[token.lineNumber - 1]; + var column = line.indexOf(text) + 1; + var length = text.length; + errors.addContext( + token.lineNumber, text, left, !left, [ column, length ]); } }); } diff --git a/test/detailed-results-MD031-MD040.md b/test/detailed-results-MD031-MD040.md index 2ed5583c..c616f484 100644 --- a/test/detailed-results-MD031-MD040.md +++ b/test/detailed-results-MD031-MD040.md @@ -27,3 +27,9 @@ space `inside` of ` code` elements space ``inside`` of `` code`` elements `` ` embedded backtick`` ``embedded backtick` `` + +some *space* in * some* emphasis +some *space* in *some * emphasis +some *space* in **some ** emphasis +some _space_ in _ some_ emphasis +some __space__ in __ some __ emphasis diff --git a/test/detailed-results-MD031-MD040.results.json b/test/detailed-results-MD031-MD040.results.json index 854c00d6..f0288e0f 100644 --- a/test/detailed-results-MD031-MD040.results.json +++ b/test/detailed-results-MD031-MD040.results.json @@ -62,6 +62,51 @@ "errorContext": "* inside *", "errorRange": [7, 10] }, + { + "lineNumber": 31, + "ruleName": "MD037", + "ruleAlias": "no-space-in-emphasis", + "ruleDescription": "Spaces inside emphasis markers", + "errorDetail": null, + "errorContext": "* some*", + "errorRange": [ 17, 7 ] + }, + { + "lineNumber": 32, + "ruleName": "MD037", + "ruleAlias": "no-space-in-emphasis", + "ruleDescription": "Spaces inside emphasis markers", + "errorDetail": null, + "errorContext": "*some *", + "errorRange": [ 17, 7 ] + }, + { + "lineNumber": 33, + "ruleName": "MD037", + "ruleAlias": "no-space-in-emphasis", + "ruleDescription": "Spaces inside emphasis markers", + "errorDetail": null, + "errorContext": "**some **", + "errorRange": [ 17, 9 ] + }, + { + "lineNumber": 34, + "ruleName": "MD037", + "ruleAlias": "no-space-in-emphasis", + "ruleDescription": "Spaces inside emphasis markers", + "errorDetail": null, + "errorContext": "_ some_", + "errorRange": [ 17, 7 ] + }, + { + "lineNumber": 35, + "ruleName": "MD037", + "ruleAlias": "no-space-in-emphasis", + "ruleDescription": "Spaces inside emphasis markers", + "errorDetail": null, + "errorContext": "__ some __", + "errorRange": [ 19, 10 ] + }, { "lineNumber": 17, "ruleName": "MD038",