From 8aa2ae666f8a53119ffab673e8c9c98172e4a574 Mon Sep 17 00:00:00 2001 From: deathaxe Date: Sun, 21 Jun 2026 18:05:16 +0200 Subject: [PATCH 1/3] Plugins: fix md002 linter rule This commit fixes setext pattern by expecting an un-empty line before `=` or `-` markers. --- plugins/lint.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/plugins/lint.py b/plugins/lint.py index 96fa3bc8..4e498e19 100644 --- a/plugins/lint.py +++ b/plugins/lint.py @@ -167,7 +167,7 @@ def test(self, text, s, e): class md002(mddef): flag = re.M desc = "First header should be a h1 header" - locator = r"^(?:#{1,6}(?!#))|(?:-+$|=+$)" + locator = r"^(?:#{1,6}(?!#))|(?:\S[^\n]*\n)+?(?:-+$|=+$)" def test(self, text, s, e): ret = {} @@ -176,9 +176,8 @@ def test(self, text, s, e): if re.match(r"#{1,6}(?!#)", text[s:e]): if e - s != 1: ret[s] = "level %d found" % (e - s) - elif re.match("-+|=+", text[s:e]): - if not re.match("=+", text[s:e]): - ret[s] = "level 2 found" + elif re.match(r"(?:[^\n]*\n)+?-+", text[s:e]): + ret[s] = "level 2 found" return ret From 0845a536f926121776695a3eb4f1f2a5a059c51c Mon Sep 17 00:00:00 2001 From: deathaxe Date: Sun, 21 Jun 2026 18:28:53 +0200 Subject: [PATCH 2/3] Plugins: fix md004-007 linter rules This commit fixes thematic breaks being consumed as unordered lists. --- plugins/lint.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/lint.py b/plugins/lint.py index 4e498e19..7d63ece8 100644 --- a/plugins/lint.py +++ b/plugins/lint.py @@ -219,7 +219,7 @@ def test(self, text, s, e): class md004(mddef): flag = re.M desc = "Unordered list style" - locator = r"^([ ]{0,3})[*+-](?=\s)" + locator = r"^([ ]{0,3})(?!(?:\-(?:[ \t]*\-){2,}|\*(?:[ \t]*\*){2,}|_(?:[ \t]*_){2,})[ \t]*$)[*+-](?=\s)" eol = r"^(?=\S)" gid = 1 lastSym = None @@ -315,7 +315,7 @@ def testcyc(self, sym, lv): class md005(mddef): flag = re.M desc = "Inconsistent indentation for list items at the same level" - locator = r"^([ ]{0,3})[*+-](?=\s)" + locator = r"^([ ]{0,3})(?!(?:\-(?:[ \t]*\-){2,}|\*(?:[ \t]*\*){2,}|_(?:[ \t]*_){2,})[ \t]*$)[*+-](?=\s)" eol = r"^(?=\S)" gid = 1 lastpos = -1 @@ -383,7 +383,7 @@ def test(self, text, s, e): class md006(mddef): flag = re.M desc = "Consider starting bulleted lists at the beginning of the line" - locator = r"^([ ]{0,3})[*+-](?=\s)" + locator = r"^([ ]{0,3})(?!(?:\-(?:[ \t]*\-){2,}|\*(?:[ \t]*\*){2,}|_(?:[ \t]*_){2,})[ \t]*$)[*+-](?=\s)" eol = r"^(?=\S)" gid = 1 lastpos = -1 @@ -420,7 +420,7 @@ def test(self, text, s, e): class md007(mddef): flag = re.M desc = "Unordered list indentation" - locator = r"^([ ]{0,3})[*+-](?=\s)" + locator = r"^([ ]{0,3})(?!(?:\-(?:[ \t]*\-){2,}|\*(?:[ \t]*\*){2,}|_(?:[ \t]*_){2,})[ \t]*$)[*+-](?=\s)" eol = r"^(?=\S)" gid = 1 lastpos = -1 From a61ca4310551f3894bcec811b667b2218a851936 Mon Sep 17 00:00:00 2001 From: deathaxe Date: Sun, 21 Jun 2026 18:16:16 +0200 Subject: [PATCH 3/3] Plugins: fix md022 linter rule This commit fixes setext related patterns of md002 linter rule. --- plugins/lint.py | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/plugins/lint.py b/plugins/lint.py index 7d63ece8..38d8f74e 100644 --- a/plugins/lint.py +++ b/plugins/lint.py @@ -569,13 +569,9 @@ def test(self, text, s, e): class md022(mddef): flag = re.M desc = "Headers should be surrounded by blank lines" - locator = r"^((?:-+|=+)|(?:#{1,6}(?!#).*))$" + locator = r"^(?:(?:#{1,6}(?!#).*)|(?:\S[^\n]*\n)+?(?:-+|=+))$" def test(self, text, s, e): - if re.match(r"-+|=+", text[s:e]): - st = text.rfind("\n", 0, s - 1) - s = st + 1 - if s > 1 and text[s - 2] != "\n": return {s: "blank line required before this line"}