diff --git a/doc/Rules.md b/doc/Rules.md index 33e65389..a05282ed 100644 --- a/doc/Rules.md +++ b/doc/Rules.md @@ -59,7 +59,8 @@ Tags: headers Aliases: header-style -Parameters: style ("consistent", "atx", "atx_closed", "setext", "setext_with_atx"; default "consistent") +Parameters: style ("consistent", "atx", "atx_closed", "setext", +"setext_with_atx", "setext_with_atx_closed"; default "consistent") This rule is triggered when different header styles (atx, setext, and 'closed' atx) are used in the same document: @@ -77,8 +78,8 @@ Be consistent with the style of header used in a document: ## ATX style H2 -The setext_with_atx doc style allows atx-style headers of level 3 or more in -documents with setext style headers: +The setext_with_atx and settext_with_atx_closed doc styles allow atx-style +headers of level 3 or more in documents with setext style headers: Setext style H1 =============== @@ -89,8 +90,8 @@ documents with setext style headers: ### ATX style H3 Note: the configured header style can be a specific style to use (atx, -atx_closed, setext, setext_with_atx), or simply require that the usage be -consistent within the document. +atx_closed, setext, setext_with_atx, setext_with_atx_closed), or simply require +that the usage be consistent within the document. ## MD004 - Unordered list style diff --git a/lib/rules.js b/lib/rules.js index 6b0f300b..feaf24cc 100644 --- a/lib/rules.js +++ b/lib/rules.js @@ -196,11 +196,20 @@ module.exports = [ if (style === "consistent") { style = styleForToken; } - if ((styleForToken !== style) && - !((style === "setext_with_atx") && - (/h[12]/.test(token.tag) && (styleForToken === "setext")) || - (/h[^12]/.test(token.tag) && (styleForToken === "atx")))) { - errors.push(token.lineNumber); + if (styleForToken !== style) { + var h12 = /h[12]/.test(token.tag); + var hOther = /h[^12]/.test(token.tag); + var setextWithAtx = + (style === "setext_with_atx") && + ((h12 && (styleForToken === "setext")) || + (hOther && (styleForToken === "atx"))); + var setextWithAtxClosed = + (style === "setext_with_atx_closed") && + ((h12 && (styleForToken === "setext")) || + (hOther && (styleForToken === "atx_closed"))); + if (!setextWithAtx && !setextWithAtxClosed) { + errors.push(token.lineNumber); + } } }); } diff --git a/test/headers_good_setext_with_atx.md b/test/headers_good_setext_with_atx.md index 726817f2..f3f276df 100644 --- a/test/headers_good_setext_with_atx.md +++ b/test/headers_good_setext_with_atx.md @@ -5,3 +5,5 @@ Header 2 -------- ### Header 3 + +#### Header 4 {MD003} #### diff --git a/test/headers_good_setext_with_atx_closed.json b/test/headers_good_setext_with_atx_closed.json new file mode 100644 index 00000000..fad19527 --- /dev/null +++ b/test/headers_good_setext_with_atx_closed.json @@ -0,0 +1,6 @@ +{ + "default": true, + "MD003": { + "style": "setext_with_atx_closed" + } +} diff --git a/test/headers_good_setext_with_atx_closed.md b/test/headers_good_setext_with_atx_closed.md new file mode 100644 index 00000000..4cdd532a --- /dev/null +++ b/test/headers_good_setext_with_atx_closed.md @@ -0,0 +1,9 @@ +Header 1 +======== + +Header 2 +-------- + +### Header 3 ### + +#### Header 4 {MD003}