mirror of
https://github.com/DavidAnson/markdownlint.git
synced 2025-09-22 05:40:48 +02:00
Improve highlighting for MD037/no-space-in-emphasis, add more tests.
This commit is contained in:
parent
5fee0a921d
commit
4a27c3d100
3 changed files with 66 additions and 9 deletions
24
lib/rules.js
24
lib/rules.js
|
@ -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 ]);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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",
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue