Update MD038/no-space-in-code to avoid a possible range error for indented code fences.

This commit is contained in:
David Anson 2023-12-06 21:22:29 -08:00
parent 0e80fa5720
commit 9f87e7dc60
5 changed files with 82 additions and 20 deletions

View file

@ -5429,7 +5429,7 @@ module.exports = {
var endData = tokenIfType(children[last - 1], "codeTextData") || tokenIfType(children[last - 2], "codeTextData"); var endData = tokenIfType(children[last - 1], "codeTextData") || tokenIfType(children[last - 2], "codeTextData");
if (startSequence && endSequence && startData && endData) { if (startSequence && endSequence && startData && endData) {
var spaceLeft = leftSpaceRe.test(startData.text); var spaceLeft = leftSpaceRe.test(startData.text);
var spaceRight = !spaceLeft && rightSpaceRe.test(endData.text); var spaceRight = rightSpaceRe.test(endData.text);
if (spaceLeft || spaceRight) { if (spaceLeft || spaceRight) {
var lineNumber = startSequence.startLine; var lineNumber = startSequence.startLine;
var range = null; var range = null;
@ -5441,14 +5441,14 @@ module.exports = {
"deleteCount": endSequence.startColumn - startSequence.endColumn, "deleteCount": endSequence.startColumn - startSequence.endColumn,
"insertText": trimCodeText(startData.text, true, true) "insertText": trimCodeText(startData.text, true, true)
}; };
} else if (spaceLeft) { } else if (spaceLeft && startSequence.endLine === startData.startLine) {
range = [startSequence.startColumn, startData.endColumn - startSequence.startColumn]; range = [startSequence.startColumn, startData.endColumn - startSequence.startColumn];
fixInfo = { fixInfo = {
"editColumn": startSequence.endColumn, "editColumn": startSequence.endColumn,
"deleteCount": startData.endColumn - startData.startColumn, "deleteCount": startData.endColumn - startData.startColumn,
"insertText": trimCodeText(startData.text, true, false) "insertText": trimCodeText(startData.text, true, false)
}; };
} else { } else if (spaceRight && endData.text.trim().length > 0) {
lineNumber = endSequence.endLine; lineNumber = endSequence.endLine;
range = [endData.startColumn, endSequence.endColumn - endData.startColumn]; range = [endData.startColumn, endSequence.endColumn - endData.startColumn];
fixInfo = { fixInfo = {
@ -5457,8 +5457,10 @@ module.exports = {
"insertText": trimCodeText(endData.text, false, true) "insertText": trimCodeText(endData.text, false, true)
}; };
} }
var context = params.lines[lineNumber - 1].substring(range[0] - 1, range[0] - 1 + range[1]); if (range) {
addErrorContext(onError, lineNumber, context, spaceLeft, spaceRight, range, fixInfo); var context = params.lines[lineNumber - 1].substring(range[0] - 1, range[0] - 1 + range[1]);
addErrorContext(onError, lineNumber, context, spaceLeft, spaceRight, range, fixInfo);
}
} }
} }
} }

View file

@ -41,7 +41,7 @@ module.exports = {
tokenIfType(children[last - 2], "codeTextData"); tokenIfType(children[last - 2], "codeTextData");
if (startSequence && endSequence && startData && endData) { if (startSequence && endSequence && startData && endData) {
const spaceLeft = leftSpaceRe.test(startData.text); const spaceLeft = leftSpaceRe.test(startData.text);
const spaceRight = !spaceLeft && rightSpaceRe.test(endData.text); const spaceRight = rightSpaceRe.test(endData.text);
if (spaceLeft || spaceRight) { if (spaceLeft || spaceRight) {
let lineNumber = startSequence.startLine; let lineNumber = startSequence.startLine;
let range = null; let range = null;
@ -56,7 +56,7 @@ module.exports = {
"deleteCount": endSequence.startColumn - startSequence.endColumn, "deleteCount": endSequence.startColumn - startSequence.endColumn,
"insertText": trimCodeText(startData.text, true, true) "insertText": trimCodeText(startData.text, true, true)
}; };
} else if (spaceLeft) { } else if (spaceLeft && (startSequence.endLine === startData.startLine)) {
range = [ range = [
startSequence.startColumn, startSequence.startColumn,
startData.endColumn - startSequence.startColumn startData.endColumn - startSequence.startColumn
@ -66,7 +66,7 @@ module.exports = {
"deleteCount": startData.endColumn - startData.startColumn, "deleteCount": startData.endColumn - startData.startColumn,
"insertText": trimCodeText(startData.text, true, false) "insertText": trimCodeText(startData.text, true, false)
}; };
} else { } else if (spaceRight && (endData.text.trim().length > 0)) {
lineNumber = endSequence.endLine; lineNumber = endSequence.endLine;
range = [ range = [
endData.startColumn, endData.startColumn,
@ -78,18 +78,20 @@ module.exports = {
"insertText": trimCodeText(endData.text, false, true) "insertText": trimCodeText(endData.text, false, true)
}; };
} }
const context = params if (range) {
.lines[lineNumber - 1] const context = params
.substring(range[0] - 1, range[0] - 1 + range[1]); .lines[lineNumber - 1]
addErrorContext( .substring(range[0] - 1, range[0] - 1 + range[1]);
onError, addErrorContext(
lineNumber, onError,
context, lineNumber,
spaceLeft, context,
spaceRight, spaceLeft,
range, spaceRight,
fixInfo range,
); fixInfo
);
}
} }
} }
} }

View file

@ -47853,6 +47853,35 @@ Generated by [AVA](https://avajs.dev).
text \`\` \` leading and trailing␊ text \`\` \` leading and trailing␊
space allowed for backtick \` \`\` text␊ space allowed for backtick \` \`\` text␊
<!-- markdownlint-disable blanks-around-fences fenced-code-language -->
Text␊
\`\`\`␊
Code␊
\`\`\`␊
Text␊
\`\`\`␊
Code␊
\`\`\`␊
Text␊
\`\`\`␊
Code␊
\`\`\`␊
Text␊
\`\`\`␊
Code␊
\`\`\`␊
Text␊
Text␊
\`\`\`␊
Code␊
\`\`\`␊
Text␊
`, `,
} }

View file

@ -137,3 +137,32 @@ not allowed ` `` text {MD038}
text `` ` leading and trailing text `` ` leading and trailing
space allowed for backtick ` `` text space allowed for backtick ` `` text
<!-- markdownlint-disable blanks-around-fences fenced-code-language -->
Text
```
Code
```
Text
```
Code
```
Text
```
Code
```
Text
```
Code
```
Text
Text
```
Code
```
Text