From debc08bca178434f9b1e26cf3f63949a5f2747ce Mon Sep 17 00:00:00 2001 From: David Anson Date: Thu, 21 Mar 2019 21:42:24 -0700 Subject: [PATCH] Re-implement MD022/blanks-around-headings to ignore comments and blockquotes. --- lib/md022.js | 30 ++++--------------- lib/md031.js | 5 ++-- test/blanks-around.md | 4 +-- test/blockquote-headings.md | 8 ++--- test/headings_with_spaces_at_the_beginning.md | 4 +-- 5 files changed, 16 insertions(+), 35 deletions(-) diff --git a/lib/md022.js b/lib/md022.js index 53abd9f4..c341281f 100644 --- a/lib/md022.js +++ b/lib/md022.js @@ -3,36 +3,18 @@ "use strict"; const shared = require("./shared"); +const { addErrorContext, filterTokens, isBlankLine } = shared; module.exports = { "names": [ "MD022", "blanks-around-headings", "blanks-around-headers" ], "description": "Headings should be surrounded by blank lines", "tags": [ "headings", "headers", "blank_lines" ], "function": function MD022(params, onError) { - let prevHeadingLineNumber = 0; - let prevMaxLineIndex = -1; - let needBlankLine = false; - params.tokens.forEach(function forToken(token) { - if (token.type === "heading_open") { - if ((token.map[0] - prevMaxLineIndex) === 0) { - shared.addErrorContext(onError, token.lineNumber, - token.line.trim()); - } - } else if (token.type === "heading_close") { - needBlankLine = true; - } - if (token.map) { - if (needBlankLine) { - if ((token.map[0] - prevMaxLineIndex) === 0) { - shared.addErrorContext(onError, prevHeadingLineNumber, - params.lines[prevHeadingLineNumber - 1].trim()); - } - needBlankLine = false; - } - prevMaxLineIndex = Math.max(prevMaxLineIndex, token.map[1]); - } - if (token.type === "heading_open") { - prevHeadingLineNumber = token.lineNumber; + const { lines } = params; + filterTokens(params, "heading_open", (token) => { + const [ topIndex, nextIndex ] = token.map; + if (!isBlankLine(lines[topIndex - 1]) || !isBlankLine(lines[nextIndex])) { + addErrorContext(onError, topIndex + 1, lines[topIndex].trim()); } }); } diff --git a/lib/md031.js b/lib/md031.js index eab64c6c..073a4d80 100644 --- a/lib/md031.js +++ b/lib/md031.js @@ -11,10 +11,9 @@ module.exports = { "tags": [ "code", "blank_lines" ], "function": function MD031(params, onError) { const { lines } = params; - const { length } = lines; forEachLine(function forLine(line, i, inCode, onFence) { - if (((onFence > 0) && (i - 1 >= 0) && !isBlankLine(lines[i - 1])) || - ((onFence < 0) && (i + 1 < length) && !isBlankLine(lines[i + 1]))) { + if (((onFence > 0) && !isBlankLine(lines[i - 1])) || + ((onFence < 0) && !isBlankLine(lines[i + 1]))) { addErrorContext(onError, i + 1, lines[i].trim()); } }); diff --git a/test/blanks-around.md b/test/blanks-around.md index 33570102..88dc8b30 100644 --- a/test/blanks-around.md +++ b/test/blanks-around.md @@ -5,11 +5,11 @@ ## MD022/blanks-around-headings > -### Alpha {MD022} +### Alpha > > -### Beta {MD022} +### Beta > Text diff --git a/test/blockquote-headings.md b/test/blockquote-headings.md index b1fc9e29..211f5aaf 100644 --- a/test/blockquote-headings.md +++ b/test/blockquote-headings.md @@ -20,17 +20,17 @@ Text - Item item - > # Quoted heading in list {MD025} + > # Quoted heading in list {MD022} {MD025} - Item item - > > # Double-quoted heading in list {MD025} + > > # Double-quoted heading in list {MD022} {MD025} - Item item - > ## Quoted sub-heading in list + > ## Quoted sub-heading in list {MD022} - Item - Item item - > ## Quoted indented sub-heading in list {MD023} + > ## Quoted indented sub-heading in list {MD022} {MD023} - Item Text diff --git a/test/headings_with_spaces_at_the_beginning.md b/test/headings_with_spaces_at_the_beginning.md index 4ab2808b..ac434375 100644 --- a/test/headings_with_spaces_at_the_beginning.md +++ b/test/headings_with_spaces_at_the_beginning.md @@ -16,5 +16,5 @@ Some text ``` * This is another case where MD023 shouldn't be triggered - # Test {MD023} Valid heading for CommonMark (see section 5.2) - # Test {MD023} Also valid heading for CommonMark + # Test {MD022} {MD023} Valid heading for CommonMark (see section 5.2) + # Test {MD022} {MD023} Also valid heading for CommonMark