Fix broken MD020/MD021/MD038 scenarios.

This commit is contained in:
David Anson 2019-09-19 21:39:59 -07:00
parent 677255a484
commit 33e3797084
5 changed files with 32 additions and 28 deletions

View file

@ -12,7 +12,8 @@ module.exports = {
"function": function MD020(params, onError) { "function": function MD020(params, onError) {
forEachLine(lineMetadata(), (line, lineIndex, inCode) => { forEachLine(lineMetadata(), (line, lineIndex, inCode) => {
if (!inCode) { if (!inCode) {
const match = /^(#+)(\s*)([^#]+?)(\s*)(\\?)(#+)(\s*)$/.exec(line); const match =
/^(#+)(\s*)([^#]+?[^#\\])(\s*)((?:\\#)?)(#+)(\s*)$/.exec(line);
if (match) { if (match) {
const [ const [
, ,
@ -27,9 +28,8 @@ module.exports = {
const leftHashLength = leftHash.length; const leftHashLength = leftHash.length;
const rightHashLength = rightHash.length; const rightHashLength = rightHash.length;
const left = !leftSpaceLength; const left = !leftSpaceLength;
const right = const right = !rightSpaceLength || rightEscape;
(!rightSpaceLength && (!rightEscape || (rightHashLength > 1))) || const rightEscapeReplacement = rightEscape ? `${rightEscape} ` : "";
(rightEscape && (rightHashLength > 1));
if (left || right) { if (left || right) {
const range = left ? const range = left ?
[ [
@ -49,9 +49,9 @@ module.exports = {
range, range,
{ {
"editColumn": 1, "editColumn": 1,
"deleteLength": line.length, "deleteCount": line.length,
"insertText": "insertText":
`${leftHash} ${content} ${rightEscape}${rightHash}` `${leftHash} ${content} ${rightEscapeReplacement}${rightHash}`
} }
); );
} }

View file

@ -48,7 +48,7 @@ module.exports = {
range, range,
{ {
"editColumn": 1, "editColumn": 1,
"deleteLength": length, "deleteCount": length,
"insertText": `${leftHash} ${content} ${rightHash}` "insertText": `${leftHash} ${content} ${rightHash}`
} }
); );

View file

@ -22,19 +22,29 @@ module.exports = {
let rangeIndex = columnIndex - tickCount; let rangeIndex = columnIndex - tickCount;
let rangeLength = code.length + (2 * tickCount); let rangeLength = code.length + (2 * tickCount);
let rangeLineOffset = 0; let rangeLineOffset = 0;
let fixIndex = columnIndex;
let fixLength = code.length;
const codeLines = code.split(newLineRe); const codeLines = code.split(newLineRe);
const left = leftSpaceRe.test(code); const left = leftSpaceRe.test(code);
const right = !left && rightSpaceRe.test(code); const right = !left && rightSpaceRe.test(code);
if (right && (codeLines.length > 1)) { if (right && (codeLines.length > 1)) {
rangeIndex = 0; rangeIndex = 0;
rangeLineOffset = codeLines.length - 1; rangeLineOffset = codeLines.length - 1;
fixIndex = 0;
} }
if (left || right) { if (left || right) {
const codeLinesRange = codeLines[rangeLineOffset];
if (codeLines.length > 1) { if (codeLines.length > 1) {
rangeLength = codeLines[rangeLineOffset].length + tickCount; rangeLength = codeLinesRange.length + tickCount;
fixLength = codeLinesRange.length;
} }
const context = tokenLines[lineIndex + rangeLineOffset] const context = tokenLines[lineIndex + rangeLineOffset]
.substring(rangeIndex, rangeIndex + rangeLength); .substring(rangeIndex, rangeIndex + rangeLength);
const codeLinesRangeTrim = codeLinesRange.trim();
const fixText =
(codeLinesRangeTrim.startsWith("`") ? " " : "") +
codeLinesRangeTrim +
(codeLinesRangeTrim.endsWith("`") ? " " : "");
addErrorContext( addErrorContext(
onError, onError,
token.lineNumber + lineIndex + rangeLineOffset, token.lineNumber + lineIndex + rangeLineOffset,
@ -43,9 +53,9 @@ module.exports = {
right, right,
[ rangeIndex + 1, rangeLength ], [ rangeIndex + 1, rangeLength ],
{ {
"editColumn": rangeIndex + (left ? tickCount : 0) + 1, "editColumn": fixIndex + 1,
"deleteCount": rangeLength - (right ? tickCount : 0), "deleteCount": fixLength,
"insertText": code.trim() "insertText": fixText
} }
); );
} }

View file

@ -14,10 +14,10 @@ A [reversed](link) example.
## Multiple spaces B ## Multiple spaces B
## No space C ####No space C ## ## No space C ##
## No space D #### No space D## ## No space D ##
## Multiple spaces E #### Multiple spaces E ## ## Multiple spaces E ##
## Multiple spaces F #### Multiple spaces F ## ## Multiple spaces F ##

View file

@ -15,19 +15,19 @@ Bare <https://example.com> link
Space *inside* emphasis Space *inside* emphasis
Space `insidecode span Space `inside` code span
Space [inside](link) text Space [inside](link) text
``` ```
``` ```
space ``insideode space ``inside`` code
space `inside` of `codeelements space `inside` of `code` elements
`space` inside `of` code `elements `space` inside `of` code `elements`
space ``inside`` of ``codelements 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
@ -37,13 +37,11 @@ some __space__ in __some__ emphasis
Text Text
text `code text `code
span
span` text span` text
text. text.
Text Text
text `code text `code
code
span` text span` text
text. text.
@ -54,13 +52,9 @@ text.
Text Text
text ```code text ```code
span code span code
code
span code
span code``` text span code``` text
text text
text text ````code text text ````code
span code span code
span
span code
span```` text span```` text
text. text.