Improve highlighting for MD037/no-space-in-emphasis, add more tests.

This commit is contained in:
David Anson 2017-11-02 22:25:56 -07:00
parent 5fee0a921d
commit 4a27c3d100
3 changed files with 66 additions and 9 deletions

View file

@ -15,7 +15,6 @@ var listItemMarkerInterruptsRe = /^[\s>]*(?:[*+-]|1\.)\s+/;
var reversedLinkRe = /\([^)]+\)\[[^\]^][^\]]*]/; var reversedLinkRe = /\([^)]+\)\[[^\]^][^\]]*]/;
var spaceAfterBlockQuote = /^\s*(?:>\s+)+\S/; var spaceAfterBlockQuote = /^\s*(?:>\s+)+\S/;
var spaceBeforeHeaderRe = /^\s+\S/; var spaceBeforeHeaderRe = /^\s+\S/;
var spaceInsideEmphasisRe = /(\*\*?|__?)(?:(?:\s.+)|(?:.+\s))\1/;
var spaceInsideLinkRe = /\[(?:(?:\s[^\]]*)|(?:[^\]]*\s))](?=\(\S*\))/; var spaceInsideLinkRe = /\[(?:(?:\s[^\]]*)|(?:[^\]]*\s))](?=\(\S*\))/;
var tabRe = /\t+/; var tabRe = /\t+/;
var trailingPunctuationRe = /.$/; var trailingPunctuationRe = /.$/;
@ -118,7 +117,7 @@ function forEachInlineChild(params, type, callback) {
filterTokens(params, "inline", function forToken(token) { filterTokens(params, "inline", function forToken(token) {
token.children.forEach(function forChild(child) { token.children.forEach(function forChild(child) {
if (child.type === type) { if (child.type === type) {
callback(child, token); callback(child);
} }
}); });
}); });
@ -962,15 +961,22 @@ module.exports = [
"desc": "Spaces inside emphasis markers", "desc": "Spaces inside emphasis markers",
"tags": [ "whitespace", "emphasis" ], "tags": [ "whitespace", "emphasis" ],
"aliases": [ "no-space-in-emphasis" ], "aliases": [ "no-space-in-emphasis" ],
"regexp": spaceInsideEmphasisRe, "regexp": null,
"func": function MD037(params, errors) { "func": function MD037(params, errors) {
forEachInlineChild(params, "text", function forToken(token) { forEachInlineChild(params, "text", function forToken(token) {
var left = /\s(\*\*?|__?)\s.+\1/.exec(token.content); var left = true;
var right = /(\*\*?|__?).+\s\1\s/.exec(token.content); var match = /\s(\*\*?|__?)\s.+\1/.exec(token.content);
if (left) { if (!match) {
errors.addContext(token.lineNumber, left[0].trim()); left = false;
} else if (right) { match = /(\*\*?|__?).+\s\1\s/.exec(token.content);
errors.addContext(token.lineNumber, right[0].trim(), false, true); }
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 ]);
} }
}); });
} }

View file

@ -27,3 +27,9 @@ space `inside` of ` code` elements
space ``inside`` of `` code`` elements space ``inside`` of `` code`` elements
`` ` embedded backtick`` `` ` embedded backtick``
``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

View file

@ -62,6 +62,51 @@
"errorContext": "* inside *", "errorContext": "* inside *",
"errorRange": [7, 10] "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, "lineNumber": 17,
"ruleName": "MD038", "ruleName": "MD038",