From 33e379708421b5aa1f65fdc79e0053e14142c43e Mon Sep 17 00:00:00 2001 From: David Anson Date: Thu, 19 Sep 2019 21:39:59 -0700 Subject: [PATCH] Fix broken MD020/MD021/MD038 scenarios. --- lib/md020.js | 12 ++++++------ lib/md021.js | 2 +- lib/md038.js | 18 ++++++++++++++---- test/detailed-results-MD011-MD021.md.fixed | 8 ++++---- test/detailed-results-MD031-MD040.md.fixed | 20 +++++++------------- 5 files changed, 32 insertions(+), 28 deletions(-) diff --git a/lib/md020.js b/lib/md020.js index 03d6661f..db69c68f 100644 --- a/lib/md020.js +++ b/lib/md020.js @@ -12,7 +12,8 @@ module.exports = { "function": function MD020(params, onError) { forEachLine(lineMetadata(), (line, lineIndex, inCode) => { if (!inCode) { - const match = /^(#+)(\s*)([^#]+?)(\s*)(\\?)(#+)(\s*)$/.exec(line); + const match = + /^(#+)(\s*)([^#]+?[^#\\])(\s*)((?:\\#)?)(#+)(\s*)$/.exec(line); if (match) { const [ , @@ -27,9 +28,8 @@ module.exports = { const leftHashLength = leftHash.length; const rightHashLength = rightHash.length; const left = !leftSpaceLength; - const right = - (!rightSpaceLength && (!rightEscape || (rightHashLength > 1))) || - (rightEscape && (rightHashLength > 1)); + const right = !rightSpaceLength || rightEscape; + const rightEscapeReplacement = rightEscape ? `${rightEscape} ` : ""; if (left || right) { const range = left ? [ @@ -49,9 +49,9 @@ module.exports = { range, { "editColumn": 1, - "deleteLength": line.length, + "deleteCount": line.length, "insertText": - `${leftHash} ${content} ${rightEscape}${rightHash}` + `${leftHash} ${content} ${rightEscapeReplacement}${rightHash}` } ); } diff --git a/lib/md021.js b/lib/md021.js index fcb30a12..5fa972c7 100644 --- a/lib/md021.js +++ b/lib/md021.js @@ -48,7 +48,7 @@ module.exports = { range, { "editColumn": 1, - "deleteLength": length, + "deleteCount": length, "insertText": `${leftHash} ${content} ${rightHash}` } ); diff --git a/lib/md038.js b/lib/md038.js index 424623a2..dd8bac28 100644 --- a/lib/md038.js +++ b/lib/md038.js @@ -22,19 +22,29 @@ module.exports = { let rangeIndex = columnIndex - tickCount; let rangeLength = code.length + (2 * tickCount); let rangeLineOffset = 0; + let fixIndex = columnIndex; + let fixLength = code.length; const codeLines = code.split(newLineRe); const left = leftSpaceRe.test(code); const right = !left && rightSpaceRe.test(code); if (right && (codeLines.length > 1)) { rangeIndex = 0; rangeLineOffset = codeLines.length - 1; + fixIndex = 0; } if (left || right) { + const codeLinesRange = codeLines[rangeLineOffset]; if (codeLines.length > 1) { - rangeLength = codeLines[rangeLineOffset].length + tickCount; + rangeLength = codeLinesRange.length + tickCount; + fixLength = codeLinesRange.length; } const context = tokenLines[lineIndex + rangeLineOffset] .substring(rangeIndex, rangeIndex + rangeLength); + const codeLinesRangeTrim = codeLinesRange.trim(); + const fixText = + (codeLinesRangeTrim.startsWith("`") ? " " : "") + + codeLinesRangeTrim + + (codeLinesRangeTrim.endsWith("`") ? " " : ""); addErrorContext( onError, token.lineNumber + lineIndex + rangeLineOffset, @@ -43,9 +53,9 @@ module.exports = { right, [ rangeIndex + 1, rangeLength ], { - "editColumn": rangeIndex + (left ? tickCount : 0) + 1, - "deleteCount": rangeLength - (right ? tickCount : 0), - "insertText": code.trim() + "editColumn": fixIndex + 1, + "deleteCount": fixLength, + "insertText": fixText } ); } diff --git a/test/detailed-results-MD011-MD021.md.fixed b/test/detailed-results-MD011-MD021.md.fixed index 04a11e86..dfe511a3 100644 --- a/test/detailed-results-MD011-MD021.md.fixed +++ b/test/detailed-results-MD011-MD021.md.fixed @@ -14,10 +14,10 @@ A [reversed](link) example. ## 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 ## diff --git a/test/detailed-results-MD031-MD040.md.fixed b/test/detailed-results-MD031-MD040.md.fixed index 5effe1cf..a28211ef 100644 --- a/test/detailed-results-MD031-MD040.md.fixed +++ b/test/detailed-results-MD031-MD040.md.fixed @@ -15,19 +15,19 @@ Bare link Space *inside* emphasis -Space `insidecode span +Space `inside` code span Space [inside](link) text ``` ``` -space ``insideode -space `inside` of `codeelements -`space` inside `of` code `elements -space ``inside`` of ``codelements -``` embedded backtick -embedded backtick``` +space ``inside`` code +space `inside` of `code` elements +`space` inside `of` code `elements` +space ``inside`` of ``code`` elements +`` ` embedded backtick`` +``embedded backtick` `` some *space* in *some* emphasis some *space* in *some* emphasis @@ -37,13 +37,11 @@ some __space__ in __some__ emphasis Text text `code -span span` text text. Text text `code -code span` text text. @@ -54,13 +52,9 @@ text. Text text ```code span code -code -span code span code``` text text text text ````code span code -span -span code span```` text text.