From acd36d5802a79b99525da2d7d3b10e8dc7ad9792 Mon Sep 17 00:00:00 2001 From: David Anson Date: Thu, 23 Feb 2017 22:08:54 -0800 Subject: [PATCH] Update MD041/first-line-h1 to ignore leading HTML comments (fixes #37). --- doc/Rules.md | 4 ---- lib/rules.js | 20 +++++++++---------- ...d041-ignore-leading-comments-combined.json | 4 ++++ .../md041-ignore-leading-comments-combined.md | 11 ++++++++++ ...041-ignore-leading-comments-violation.json | 4 ++++ ...md041-ignore-leading-comments-violation.md | 11 ++++++++++ test/md041-ignore-leading-comments.json | 4 ++++ test/md041-ignore-leading-comments.md | 13 ++++++++++++ 8 files changed, 56 insertions(+), 15 deletions(-) create mode 100644 test/md041-ignore-leading-comments-combined.json create mode 100644 test/md041-ignore-leading-comments-combined.md create mode 100644 test/md041-ignore-leading-comments-violation.json create mode 100644 test/md041-ignore-leading-comments-violation.md create mode 100644 test/md041-ignore-leading-comments.json create mode 100644 test/md041-ignore-leading-comments.md diff --git a/doc/Rules.md b/doc/Rules.md index abb1db06..201606e1 100644 --- a/doc/Rules.md +++ b/doc/Rules.md @@ -1037,17 +1037,13 @@ Parameters: level (number; default 1) This rule is triggered when the first line in the file isn't a top level (h1) header: - ``` This is a file without a header - ``` To fix this, add a header to the top of your file: - ``` # File with header This is a file with a top level header - ``` Note: The `level` parameter can be used to change the top level (ex: to h2) in cases where an h1 is added externally. diff --git a/lib/rules.js b/lib/rules.js index 7059308c..053daf8b 100644 --- a/lib/rules.js +++ b/lib/rules.js @@ -1019,21 +1019,19 @@ module.exports = [ "func": function MD041(params, errors) { var level = params.options.level || 1; var tag = "h" + level; - var firstHeader = null; - params.tokens.every(function forToken(token) { + params.tokens.every(function forToken(token, index) { if (token.type === "heading_open") { - firstHeader = token; - return false; - } else if (token.lineNumber > 1) { + if (!((token.lineNumber === 1) || (index > 0)) || + (token.tag !== tag)) { + errors.addContext(token.lineNumber, token.line); + } return false; + } else if (token.type === "html_block") { + return true; } - return true; + errors.addContext(token.lineNumber, token.line); + return false; }); - if (!firstHeader || - (firstHeader.lineNumber !== 1) || - (firstHeader.tag !== tag)) { - errors.addContext(1, params.lines[0]); - } } }, diff --git a/test/md041-ignore-leading-comments-combined.json b/test/md041-ignore-leading-comments-combined.json new file mode 100644 index 00000000..2be9298b --- /dev/null +++ b/test/md041-ignore-leading-comments-combined.json @@ -0,0 +1,4 @@ +{ + "default": true, + "first-line-h1": true +} diff --git a/test/md041-ignore-leading-comments-combined.md b/test/md041-ignore-leading-comments-combined.md new file mode 100644 index 00000000..e3dc0814 --- /dev/null +++ b/test/md041-ignore-leading-comments-combined.md @@ -0,0 +1,11 @@ +# Heading # + +Text text text + +Embedded tab + +Text text text + +Trailing space {MD009} + +Text text text diff --git a/test/md041-ignore-leading-comments-violation.json b/test/md041-ignore-leading-comments-violation.json new file mode 100644 index 00000000..2be9298b --- /dev/null +++ b/test/md041-ignore-leading-comments-violation.json @@ -0,0 +1,4 @@ +{ + "default": true, + "first-line-h1": true +} diff --git a/test/md041-ignore-leading-comments-violation.md b/test/md041-ignore-leading-comments-violation.md new file mode 100644 index 00000000..58ca7025 --- /dev/null +++ b/test/md041-ignore-leading-comments-violation.md @@ -0,0 +1,11 @@ + + +Text text text {MD041} + +Embedded tab + +Text text text + +Trailing space {MD009} + +Text text text diff --git a/test/md041-ignore-leading-comments.json b/test/md041-ignore-leading-comments.json new file mode 100644 index 00000000..2be9298b --- /dev/null +++ b/test/md041-ignore-leading-comments.json @@ -0,0 +1,4 @@ +{ + "default": true, + "first-line-h1": true +} diff --git a/test/md041-ignore-leading-comments.md b/test/md041-ignore-leading-comments.md new file mode 100644 index 00000000..3c61047d --- /dev/null +++ b/test/md041-ignore-leading-comments.md @@ -0,0 +1,13 @@ + + +# Heading + +Text text text + +Embedded tab + +Text text text + +Trailing space {MD009} + +Text text text