Update MD038/no-space-in-code to allow the "single leading and trailing space" scenario (fixes #271).

This commit is contained in:
David Anson 2020-04-06 20:43:38 -07:00
parent 6ce426cf88
commit 65b19b703b
8 changed files with 102 additions and 79 deletions

View file

@ -1401,23 +1401,28 @@ Tags: whitespace, code
Aliases: no-space-in-code Aliases: no-space-in-code
This rule is triggered on code span elements that have spaces right inside the This rule is triggered for code span elements that have spaces adjacent to the
backticks: backticks:
```markdown ```markdown
` some text `
`some text ` `some text `
` some text` ` some text`
``` ```
To fix this, remove the spaces inside the codespan markers: To fix this, remove any spaces adjacent to the backticks:
```markdown ```markdown
`some text` `some text`
``` ```
Note: A single leading and trailing space is allowed by the specification and
automatically trimmed (to allow for embedded backticks):
```markdown
`` `backticks` ``
```
Note: A single leading or trailing space is allowed if used to separate codespan Note: A single leading or trailing space is allowed if used to separate codespan
markers from an embedded backtick: markers from an embedded backtick:

View file

@ -7,6 +7,7 @@ const { addErrorContext, filterTokens, forEachInlineCodeSpan, newLineRe } =
const leftSpaceRe = /^\s([^`]|$)/; const leftSpaceRe = /^\s([^`]|$)/;
const rightSpaceRe = /[^`]\s$/; const rightSpaceRe = /[^`]\s$/;
const singleLeftRightSpaceRe = /^\s\S+\s$/;
module.exports = { module.exports = {
"names": [ "MD038", "no-space-in-code" ], "names": [ "MD038", "no-space-in-code" ],
@ -32,7 +33,8 @@ module.exports = {
rangeLineOffset = codeLines.length - 1; rangeLineOffset = codeLines.length - 1;
fixIndex = 0; fixIndex = 0;
} }
if (left || right) { const allowed = singleLeftRightSpaceRe.test(code);
if ((left || right) && !allowed) {
const codeLinesRange = codeLines[rangeLineOffset]; const codeLinesRange = codeLines[rangeLineOffset];
if (codeLines.length > 1) { if (codeLines.length > 1) {
rangeLength = codeLinesRange.length + tickCount; rangeLength = codeLinesRange.length + tickCount;

View file

@ -14,14 +14,14 @@ Bare https://example.com link
Space * inside * emphasis Space * inside * emphasis
Space ` inside ` code span Space ` inside` code span
Space [ inside ](link) text Space [ inside ](link) text
``` ```
``` ```
space `` inside `` code space `` inside`` code
space `inside` of ` code` elements space `inside` of ` code` elements
`space` inside `of` code ` elements` `space` inside `of` code ` elements`
space ``inside`` of `` code`` elements space ``inside`` of `` code`` elements

View file

@ -122,8 +122,8 @@
"ruleDescription": "Spaces inside code span elements", "ruleDescription": "Spaces inside code span elements",
"ruleInformation": "https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md038", "ruleInformation": "https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md038",
"errorDetail": null, "errorDetail": null,
"errorContext": "` inside `", "errorContext": "` inside`",
"errorRange": [ 7, 10 ] "errorRange": [ 7, 9 ]
}, },
{ {
"lineNumber": 24, "lineNumber": 24,
@ -131,8 +131,8 @@
"ruleDescription": "Spaces inside code span elements", "ruleDescription": "Spaces inside code span elements",
"ruleInformation": "https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md038", "ruleInformation": "https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md038",
"errorDetail": null, "errorDetail": null,
"errorContext": "`` inside ``", "errorContext": "`` inside``",
"errorRange": [ 7, 12 ] "errorRange": [ 7, 11 ]
}, },
{ {
"lineNumber": 25, "lineNumber": 25,

View file

@ -1,118 +1,118 @@
# Inline Capture/Restore # Inline Capture/Restore
hard tab hard tab
space * in * emphasis {MD037} space *in * emphasis {MD037}
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
hard tab hard tab
space * in * emphasis space *in * emphasis
space ` in ` code space `in ` code
<!-- markdownlint-restore --> <!-- markdownlint-restore -->
hard tab hard tab
space * in * emphasis {MD037} space *in * emphasis {MD037}
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-disable no-space-in-emphasis --> <!-- markdownlint-disable no-space-in-emphasis -->
hard tab hard tab
space * in * emphasis space *in * emphasis
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
hard tab hard tab
space * in * emphasis space *in * emphasis
space ` in ` code space `in ` code
<!-- markdownlint-restore --> <!-- markdownlint-restore -->
hard tab hard tab
space * in * emphasis {MD037} space *in * emphasis {MD037}
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-disable no-space-in-emphasis --> <!-- markdownlint-disable no-space-in-emphasis -->
hard tab hard tab
space * in * emphasis space *in * emphasis
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-capture --> <!-- markdownlint-capture -->
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
hard tab hard tab
space * in * emphasis space *in * emphasis
space ` in ` code space `in ` code
<!-- markdownlint-restore --> <!-- markdownlint-restore -->
hard tab hard tab
space * in * emphasis space *in * emphasis
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-enable no-hard-tabs --> <!-- markdownlint-enable no-hard-tabs -->
hard tab {MD010} hard tab {MD010}
space * in * emphasis space *in * emphasis
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-restore --> <!-- markdownlint-restore -->
hard tab hard tab
space * in * emphasis space *in * emphasis
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-enable no-hard-tabs --> <!-- markdownlint-enable no-hard-tabs -->
hard tab {MD010} hard tab {MD010}
space * in * emphasis space *in * emphasis
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-capture --> <!-- markdownlint-capture -->
hard tab {MD010} hard tab {MD010}
space * in * emphasis space *in * emphasis
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-restore --> <!-- markdownlint-restore -->
hard tab {MD010} hard tab {MD010}
space * in * emphasis space *in * emphasis
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-enable --> <!-- markdownlint-enable -->
hard tab {MD010} hard tab {MD010}
space * in * emphasis {MD037} space *in * emphasis {MD037}
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-restore --> <!-- markdownlint-restore -->
hard tab {MD010} hard tab {MD010}
space * in * emphasis space *in * emphasis
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-disable no-space-in-code --> <!-- markdownlint-disable no-space-in-code -->
hard tab {MD010} hard tab {MD010}
space * in * emphasis space *in * emphasis
space ` in ` code space `in ` code
<!-- markdownlint-capture --><!-- markdownlint-disable --> <!-- markdownlint-capture --><!-- markdownlint-disable -->
hard tab hard tab
space * in * emphasis space *in * emphasis
space ` in ` code space `in ` code
<!-- markdownlint-restore --> <!-- markdownlint-restore -->
hard tab {MD010} hard tab {MD010}
space * in * emphasis space *in * emphasis
space ` in ` code space `in ` code
<!-- markdownlint-disable no-hard-tabs --> <!-- markdownlint-disable no-hard-tabs -->
hard tab hard tab
space * in * emphasis space *in * emphasis
space ` in ` code space `in ` code
<!-- markdownlint-restore --> <!-- markdownlint-enable no-space-in-emphasis --> <!-- markdownlint-restore --> <!-- markdownlint-enable no-space-in-emphasis -->
hard tab {MD010} hard tab {MD010}
space * in * emphasis {MD037} space *in * emphasis {MD037}
space ` in ` code space `in ` code

View file

@ -2,31 +2,31 @@
hard tab {MD010} hard tab {MD010}
space * in * emphasis {MD037} space *in * emphasis {MD037}
space ` in ` code space `in ` code
<!-- markdownlint-disable no-hard-tabs --> <!-- markdownlint-disable no-hard-tabs -->
hard tab hard tab
space * in * emphasis {MD037} space *in * emphasis {MD037}
space ` in ` code space `in ` code
<!-- markdownlint-enable no-space-in-code --> <!-- markdownlint-enable no-space-in-code -->
hard tab hard tab
space * in * emphasis {MD037} space *in * emphasis {MD037}
space ` in ` code {MD038} space `in ` code {MD038}
<!-- markdownlint-enable-file no-hard-tabs --> <!-- markdownlint-enable-file no-hard-tabs -->
<!-- markdownlint-disable-file no-space-in-code --> <!-- markdownlint-disable-file no-space-in-code -->
hard tab hard tab
space * in * emphasis {MD037} space *in * emphasis {MD037}
space ` in ` code {MD038} space `in ` code {MD038}

View file

@ -1,69 +1,69 @@
# Heading # Heading
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-disable--> <!-- markdownlint-disable-->
hard tab / space * in * emphasis / space ` in ` code hard tab / space *in * emphasis / space `in ` code
<!--MARKDOWNLINT-ENABLE --> <!--MARKDOWNLINT-ENABLE -->
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-disable MD010--> <!-- markdownlint-disable MD010-->
hard tab / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-ENABLE MD010 --> <!-- markdownlint-ENABLE MD010 -->
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-disable MD010 MD038 --> <!-- markdownlint-disable MD010 MD038 -->
hard tab / space * in * emphasis {MD037} / space ` in ` code hard tab / space *in * emphasis {MD037} / space `in ` code
<!-- MARKDOWNLINT-enable MD010 MD038 --> <!-- MARKDOWNLINT-enable MD010 MD038 -->
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
before <!-- markdownlint-disable MD010 --> <!-- markdownlint-disable MD038 --> after before <!-- markdownlint-disable MD010 --> <!-- markdownlint-disable MD038 --> after
hard tab / space * in * emphasis {MD037} / space ` in ` code hard tab / space *in * emphasis {MD037} / space `in ` code
before<!-- markdownlint-enable MD010 --><!-- markdownlint-enable MD038 -->after before<!-- markdownlint-enable MD010 --><!-- markdownlint-enable MD038 -->after
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-disable hard_tab code --> <!-- markdownlint-disable hard_tab code -->
hard tab / space * in * emphasis {MD037} / space ` in ` code hard tab / space *in * emphasis {MD037} / space `in ` code
<!-- markdownlint-enable whitespace --> <!-- markdownlint-enable whitespace -->
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
hard tab {MD010} <!-- markdownlint-disable --> <!-- markdownlint-enable --> hard tab {MD010} <!-- markdownlint-disable --> <!-- markdownlint-enable -->
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
hard tab <!-- markdownlint-disable md010 --> hard tab <!-- markdownlint-disable md010 -->
<!-- markdownlint-enable md010 --> <!-- markdownlint-enable md010 -->
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-enable --> <!-- markdownlint-enable -->
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
<!-- markdownlint-disable --> <!-- markdownlint-disable -->
hard tab / space * in * emphasis / space ` in ` code hard tab / space *in * emphasis / space `in ` code
<!-- markdownlint-enable --> <!-- markdownlint-enable -->
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
<!-- markdownlint-disable NotATag no-space-in-code --> <!-- markdownlint-disable NotATag no-space-in-code -->
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code
<!-- markdownlint-enable NotATag nO-sPaCe-In-CoDe --> <!-- markdownlint-enable NotATag nO-sPaCe-In-CoDe -->
hard tab {MD010} / space * in * emphasis {MD037} / space ` in ` code {MD038} hard tab {MD010} / space *in * emphasis {MD037} / space `in ` code {MD038}
embedded <b>{MD033}</b> HTML embedded <b>{MD033}</b> HTML

View file

@ -95,3 +95,19 @@ Text [link](#link(link`link) text `code`. {MD038}
Text [`link`](xref:custom.link`1) text `code`. Text [`link`](xref:custom.link`1) text `code`.
Text ``code [link](#link`link) code`` text `code`. Text ``code [link](#link`link) code`` text `code`.
No space, start or end: `code`
Start space, no end space: ` code` {MD038}
No start space, end space: `code ` {MD038}
Single start and end space: ` code ` (explicitly allowed/trimmed by the specification)
All spaces: ` ` {MD038}
Double start and single end space: ` code ` {MD038}
Single start and double end spaces: ` code ` {MD038}
Double start and end spaces: ` code ` {MD038}