From 5eb0f44d237da33a12136812483400d543a0a72c Mon Sep 17 00:00:00 2001 From: David Wilding Date: Tue, 3 Feb 2026 12:36:54 +0800 Subject: [PATCH 1/5] reduce "long codeblock" rule to 35 lines --- ...s.yml => 017b-Warn-code-over-35-lines.yml} | 10 +- tests/data/manifest.yml | 159 ++++-------------- vale.ini | 2 +- 3 files changed, 38 insertions(+), 133 deletions(-) rename styles/Canonical/{017-Avoid-long-code-blocks.yml => 017b-Warn-code-over-35-lines.yml} (59%) diff --git a/styles/Canonical/017-Avoid-long-code-blocks.yml b/styles/Canonical/017b-Warn-code-over-35-lines.yml similarity index 59% rename from styles/Canonical/017-Avoid-long-code-blocks.yml rename to styles/Canonical/017b-Warn-code-over-35-lines.yml index c2e02a8..9499277 100644 --- a/styles/Canonical/017-Avoid-long-code-blocks.yml +++ b/styles/Canonical/017b-Warn-code-over-35-lines.yml @@ -1,11 +1,11 @@ extends: existence -message: "Use 40 or fewer lines in code blocks" +message: "Use 35 or fewer lines in code blocks" link: https://docs.ubuntu.com/styleguide/en/#code-examples-in-documentation level: warning scope: raw nonword: true tokens: - - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n(:[^\n]+:[^\n]*\n)*([^:\n]*\n){41,}```' - - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n(:[^\n]+:[^\n]*\n)*([^:\n]*\n){41,}:::' - - '::\n\n(( {3}[^\n]+)?\n){40,} {3}[^\n]+\n' - - '\.\. (code-block|code|sourcecode)::( [^\n]+)?\n(( {3,12}:[^\n:]*:[^\n]*\n)*){0,1}\n(( {3}[^\n]+)?\n){40,} {3}[^\n]+\n' + - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n(:[^\n]+:[^\n]*\n)*([^:\n]*\n){36,}```' + - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n(:[^\n]+:[^\n]*\n)*([^:\n]*\n){36,}:::' + - '::\n\n(( {3}[^\n]+)?\n){35,} {3}[^\n]+\n' + - '\.\. (code-block|code|sourcecode)::( [^\n]+)?\n(( {3,12}:[^\n:]*:[^\n]*\n)*){0,1}\n(( {3}[^\n]+)?\n){35,} {3}[^\n]+\n' diff --git a/tests/data/manifest.yml b/tests/data/manifest.yml index 9b8ef32..e53d709 100644 --- a/tests/data/manifest.yml +++ b/tests/data/manifest.yml @@ -294,15 +294,15 @@ rules: # - Set VALE_ENFORCE_COVERAGE=1 to require every style rule appear here. # 017 is out of sequence because the content is long. - 017-Avoid-long-code-blocks: + 017b-Warn-code-over-35-lines: cases: - id: long-code-warning-md filetypes: [md] content: | - 40 lines is acceptable: + 35 lines is acceptable: ``` - Line 01 of 40 + Line 01 of 35 Line 02 Line 03 Line 04 @@ -337,17 +337,12 @@ rules: Line 33 Line 34 Line 35 - Line 36 - Line 37 - Line 38 - Line 39 - Line 40 ``` - But 41 lines is NOT acceptable: + But 36 lines is NOT acceptable: ``` - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -383,11 +378,6 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 ``` This text is outside the code block. @@ -395,7 +385,7 @@ rules: triggers: - |- # |- because we don't want the newline at the end. ``` - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -431,20 +421,15 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 ``` severity: warning - id: long-code-warning-md-lang filetypes: [md] content: | - 40 lines is acceptable: + 35 lines is acceptable: ```text - Line 01 of 40 + Line 01 of 35 Line 02 Line 03 Line 04 @@ -479,17 +464,12 @@ rules: Line 33 Line 34 Line 35 - Line 36 - Line 37 - Line 38 - Line 39 - Line 40 ``` - But 41 lines is NOT acceptable: + But 36 lines is NOT acceptable: ```text - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -525,11 +505,6 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 ``` This text is outside the code block. @@ -537,7 +512,7 @@ rules: triggers: - |- # |- because we don't want the newline at the end. ```text - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -573,21 +548,16 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 ``` severity: warning - id: long-code-warning-myst filetypes: [md] content: | - 40 lines is acceptable: + 35 lines is acceptable: ```{code} text :foo: bar - Line 01 of 40 + Line 01 of 35 Line 02 Line 03 Line 04 @@ -622,18 +592,13 @@ rules: Line 33 Line 34 Line 35 - Line 36 - Line 37 - Line 38 - Line 39 - Line 40 ``` - But 41 lines is NOT acceptable: + But 36 lines is NOT acceptable: ```{code} text :foo: bar - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -669,11 +634,6 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 ``` This text is outside the code block. @@ -683,7 +643,7 @@ rules: ````{tab-set} ```{tab-item} Tab 1 - Line 01 of 41 + Line 01 of 36 Line 02 Line 03 Line 04 @@ -719,11 +679,6 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 ``` ```` @@ -732,7 +687,7 @@ rules: - |- # |- because we don't want the newline at the end. ```{code} text :foo: bar - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -768,19 +723,14 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 ``` severity: warning - id: long-code-warning-rst-colons filetypes: [rst] content: | - 40 lines is acceptable:: + 35 lines is acceptable:: - Line 01 of 40 + Line 01 of 35 Line 02 Line 03 Line 04 @@ -815,15 +765,10 @@ rules: Line 33 Line 34 Line 35 - Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - But 41 lines is NOT acceptable:: + But 36 lines is NOT acceptable:: - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -859,11 +804,6 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 This text is outside the code block. expect: @@ -871,7 +811,7 @@ rules: - | :: - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -907,20 +847,15 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 severity: warning - id: long-code-warning-rst-lang filetypes: [rst] content: | - 40 lines is acceptable. + 35 lines is acceptable. .. code:: text - Line 01 of 40 + Line 01 of 35 Line 02 Line 03 Line 04 @@ -955,17 +890,12 @@ rules: Line 33 Line 34 Line 35 - Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - But 41 lines is NOT acceptable. + But 36 lines is NOT acceptable. .. code:: text - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -1001,11 +931,6 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 This text is outside the code block. expect: @@ -1013,7 +938,7 @@ rules: - | .. code:: text - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -1049,21 +974,16 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 severity: warning - id: long-code-warning-rst-option filetypes: [rst] content: | - 40 lines is acceptable. + 35 lines is acceptable. .. code:: :foo: - Line 01 of 40 + Line 01 of 35 Line 02 Line 03 Line 04 @@ -1098,18 +1018,13 @@ rules: Line 33 Line 34 Line 35 - Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - But 41 lines is NOT acceptable. + But 36 lines is NOT acceptable. .. code:: :foo: - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -1145,11 +1060,6 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 This text is outside the code block. expect: @@ -1158,7 +1068,7 @@ rules: .. code:: :foo: - Line 01 of 41 + Line 01 of 36 Line 02 Line 04 @@ -1194,9 +1104,4 @@ rules: Line 34 Line 35 Line 36 - Line 37 - Line 38 - Line 39 - Line 40 - Line 41 severity: warning diff --git a/vale.ini b/vale.ini index 5b06de5..1d9f7f2 100644 --- a/vale.ini +++ b/vale.ini @@ -23,7 +23,7 @@ Canonical.014a-Numbers-greater-than-nine-should-be-in-numeric-form = suggest Canonical.014b-Numbers-with-five-or-more-digits-must-have-comma-separators = suggest Canonical.015-No-prompts-in-comments = warning Canonical.016-No-inline-comments = warning -Canonical.017-Avoid-long-code-blocks = warning +Canonical.017b-Warn-code-over-35-lines = warning Canonical.019-no-google-drive-images = error Canonical.025b-latinisms-to-reconsider = suggest Canonical.025c-latinisms-to-avoid = warning From 9606f41a71b726787c1fec4d493794712131ffbe Mon Sep 17 00:00:00 2001 From: David Wilding Date: Tue, 3 Feb 2026 15:19:29 +0800 Subject: [PATCH 2/5] add suggestion rule for >25 lines --- .../017a-Suggest-code-over-25-lines.yml | 11 + tests/data/manifest.yml | 621 ++++++++++++++++++ vale.ini | 3 +- 3 files changed, 634 insertions(+), 1 deletion(-) create mode 100644 styles/Canonical/017a-Suggest-code-over-25-lines.yml diff --git a/styles/Canonical/017a-Suggest-code-over-25-lines.yml b/styles/Canonical/017a-Suggest-code-over-25-lines.yml new file mode 100644 index 0000000..acb8873 --- /dev/null +++ b/styles/Canonical/017a-Suggest-code-over-25-lines.yml @@ -0,0 +1,11 @@ +extends: existence +message: "Use 25 or fewer lines in code blocks" +link: https://docs.ubuntu.com/styleguide/en/#code-examples-in-documentation +level: suggestion +scope: raw +nonword: true +tokens: + - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n(:[^\n]+:[^\n]*\n)*([^:\n]*\n){26,}```' + - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n(:[^\n]+:[^\n]*\n)*([^:\n]*\n){26,}:::' + - '::\n\n(( {3}[^\n]+)?\n){25,} {3}[^\n]+\n' + - '\.\. (code-block|code|sourcecode)::( [^\n]+)?\n(( {3,12}:[^\n:]*:[^\n]*\n)*){0,1}\n(( {3}[^\n]+)?\n){25,} {3}[^\n]+\n' diff --git a/tests/data/manifest.yml b/tests/data/manifest.yml index e53d709..7976ed8 100644 --- a/tests/data/manifest.yml +++ b/tests/data/manifest.yml @@ -294,6 +294,627 @@ rules: # - Set VALE_ENFORCE_COVERAGE=1 to require every style rule appear here. # 017 is out of sequence because the content is long. + 017a-Suggest-code-over-25-lines: + cases: + - id: long-code-suggestion-md + filetypes: [md] + content: | + 25 lines is acceptable: + + ``` + Line 01 of 25 + Line 02 + Line 03 + Line 04 + Line 05 + Line 06 + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + ``` + + But 26 lines is NOT acceptable: + + ``` + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + ``` + + This text is outside the code block. + expect: + triggers: + - |- # |- because we don't want the newline at the end. + ``` + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + ``` + severity: suggestion + - id: long-code-suggestion-md-lang + filetypes: [md] + content: | + 25 lines is acceptable: + + ```text + Line 01 of 25 + Line 02 + Line 03 + Line 04 + Line 05 + Line 06 + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + ``` + + But 26 lines is NOT acceptable: + + ```text + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + ``` + + This text is outside the code block. + expect: + triggers: + - |- # |- because we don't want the newline at the end. + ```text + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + ``` + severity: suggestion + - id: long-code-suggestion-myst + filetypes: [md] + content: | + 25 lines is acceptable: + + ```{code} text + :foo: bar + Line 01 of 25 + Line 02 + Line 03 + Line 04 + Line 05 + Line 06 + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + ``` + + But 26 lines is NOT acceptable: + + ```{code} text + :foo: bar + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + ``` + + This text is outside the code block. + + A long unrelated directive is acceptable: + + ````{tab-set} + + ```{tab-item} Tab 1 + Line 01 of 26 + Line 02 + Line 03 + Line 04 + Line 05 + Line 06 + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + ``` + + ```` + expect: + triggers: + - |- # |- because we don't want the newline at the end. + ```{code} text + :foo: bar + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + ``` + severity: suggestion + - id: long-code-suggestion-rst-colons + filetypes: [rst] + content: | + 25 lines is acceptable:: + + Line 01 of 25 + Line 02 + Line 03 + Line 04 + Line 05 + Line 06 + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + + But 26 lines is NOT acceptable:: + + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + + This text is outside the code block. + expect: + triggers: + - | + :: + + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + severity: suggestion + - id: long-code-suggestion-rst-lang + filetypes: [rst] + content: | + 25 lines is acceptable. + + .. code:: text + + Line 01 of 25 + Line 02 + Line 03 + Line 04 + Line 05 + Line 06 + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + + But 26 lines is NOT acceptable. + + .. code:: text + + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + + This text is outside the code block. + expect: + triggers: + - | + .. code:: text + + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + severity: suggestion + - id: long-code-suggestion-rst-option + filetypes: [rst] + content: | + 25 lines is acceptable. + + .. code:: + :foo: + + Line 01 of 25 + Line 02 + Line 03 + Line 04 + Line 05 + Line 06 + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + + But 26 lines is NOT acceptable. + + .. code:: + :foo: + + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + + This text is outside the code block. + expect: + triggers: + - | + .. code:: + :foo: + + Line 01 of 26 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + severity: suggestion 017b-Warn-code-over-35-lines: cases: - id: long-code-warning-md diff --git a/vale.ini b/vale.ini index 1d9f7f2..5815186 100644 --- a/vale.ini +++ b/vale.ini @@ -1,5 +1,5 @@ StylesPath = styles -MinAlertLevel = warning +MinAlertLevel = suggestion Vocab = Canonical IgnoredClasses = woke-ignore, vale-ignore @@ -23,6 +23,7 @@ Canonical.014a-Numbers-greater-than-nine-should-be-in-numeric-form = suggest Canonical.014b-Numbers-with-five-or-more-digits-must-have-comma-separators = suggest Canonical.015-No-prompts-in-comments = warning Canonical.016-No-inline-comments = warning +Canonical.017a-Suggest-code-over-25-lines = suggestion Canonical.017b-Warn-code-over-35-lines = warning Canonical.019-no-google-drive-images = error Canonical.025b-latinisms-to-reconsider = suggest From 7f0821031c30ee58d77c389fdb3d7837d2ab5ebf Mon Sep 17 00:00:00 2001 From: David Wilding Date: Wed, 11 Feb 2026 09:24:19 +0800 Subject: [PATCH 3/5] expect blank line after MyST options --- styles/Canonical/017a-Suggest-code-over-25-lines.yml | 4 ++-- styles/Canonical/017b-Warn-code-over-35-lines.yml | 4 ++-- tests/data/manifest.yml | 6 ++++++ 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/styles/Canonical/017a-Suggest-code-over-25-lines.yml b/styles/Canonical/017a-Suggest-code-over-25-lines.yml index acb8873..3e22e12 100644 --- a/styles/Canonical/017a-Suggest-code-over-25-lines.yml +++ b/styles/Canonical/017a-Suggest-code-over-25-lines.yml @@ -5,7 +5,7 @@ level: suggestion scope: raw nonword: true tokens: - - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n(:[^\n]+:[^\n]*\n)*([^:\n]*\n){26,}```' - - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n(:[^\n]+:[^\n]*\n)*([^:\n]*\n){26,}:::' + - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}([^:\n]*\n){26,}```' + - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}([^:\n]*\n){26,}:::' - '::\n\n(( {3}[^\n]+)?\n){25,} {3}[^\n]+\n' - '\.\. (code-block|code|sourcecode)::( [^\n]+)?\n(( {3,12}:[^\n:]*:[^\n]*\n)*){0,1}\n(( {3}[^\n]+)?\n){25,} {3}[^\n]+\n' diff --git a/styles/Canonical/017b-Warn-code-over-35-lines.yml b/styles/Canonical/017b-Warn-code-over-35-lines.yml index 9499277..b70ba92 100644 --- a/styles/Canonical/017b-Warn-code-over-35-lines.yml +++ b/styles/Canonical/017b-Warn-code-over-35-lines.yml @@ -5,7 +5,7 @@ level: warning scope: raw nonword: true tokens: - - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n(:[^\n]+:[^\n]*\n)*([^:\n]*\n){36,}```' - - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n(:[^\n]+:[^\n]*\n)*([^:\n]*\n){36,}:::' + - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}([^:\n]*\n){36,}```' + - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0.1}([^:\n]*\n){36,}:::' - '::\n\n(( {3}[^\n]+)?\n){35,} {3}[^\n]+\n' - '\.\. (code-block|code|sourcecode)::( [^\n]+)?\n(( {3,12}:[^\n:]*:[^\n]*\n)*){0,1}\n(( {3}[^\n]+)?\n){35,} {3}[^\n]+\n' diff --git a/tests/data/manifest.yml b/tests/data/manifest.yml index 7976ed8..df113a8 100644 --- a/tests/data/manifest.yml +++ b/tests/data/manifest.yml @@ -497,6 +497,7 @@ rules: ```{code} text :foo: bar + Line 01 of 25 Line 02 Line 03 @@ -528,6 +529,7 @@ rules: ```{code} text :foo: bar + Line 01 of 26 Line 02 @@ -597,6 +599,7 @@ rules: - |- # |- because we don't want the newline at the end. ```{code} text :foo: bar + Line 01 of 26 Line 02 @@ -1178,6 +1181,7 @@ rules: ```{code} text :foo: bar + Line 01 of 35 Line 02 Line 03 @@ -1219,6 +1223,7 @@ rules: ```{code} text :foo: bar + Line 01 of 36 Line 02 @@ -1308,6 +1313,7 @@ rules: - |- # |- because we don't want the newline at the end. ```{code} text :foo: bar + Line 01 of 36 Line 02 From 180e71c6d3bf8728f2d21c93642a2a7761615820 Mon Sep 17 00:00:00 2001 From: David Wilding Date: Wed, 11 Feb 2026 12:09:12 +0800 Subject: [PATCH 4/5] match codeblock lines more carefully --- styles/Canonical/017a-Suggest-code-over-25-lines.yml | 4 ++-- styles/Canonical/017b-Warn-code-over-35-lines.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/styles/Canonical/017a-Suggest-code-over-25-lines.yml b/styles/Canonical/017a-Suggest-code-over-25-lines.yml index 3e22e12..443f489 100644 --- a/styles/Canonical/017a-Suggest-code-over-25-lines.yml +++ b/styles/Canonical/017a-Suggest-code-over-25-lines.yml @@ -5,7 +5,7 @@ level: suggestion scope: raw nonword: true tokens: - - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}([^:\n]*\n){26,}```' - - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}([^:\n]*\n){26,}:::' + - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}(\n|(?!```)[^:\n][^\n]*\n){26,}```' + - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}(\n|(?!:::)[^:\n][^\n]*\n){26,}:::' - '::\n\n(( {3}[^\n]+)?\n){25,} {3}[^\n]+\n' - '\.\. (code-block|code|sourcecode)::( [^\n]+)?\n(( {3,12}:[^\n:]*:[^\n]*\n)*){0,1}\n(( {3}[^\n]+)?\n){25,} {3}[^\n]+\n' diff --git a/styles/Canonical/017b-Warn-code-over-35-lines.yml b/styles/Canonical/017b-Warn-code-over-35-lines.yml index b70ba92..2579f06 100644 --- a/styles/Canonical/017b-Warn-code-over-35-lines.yml +++ b/styles/Canonical/017b-Warn-code-over-35-lines.yml @@ -5,7 +5,7 @@ level: warning scope: raw nonword: true tokens: - - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}([^:\n]*\n){36,}```' - - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0.1}([^:\n]*\n){36,}:::' + - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}(\n|(?!```)[^:\n][^\n]*\n){36,}```' + - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0.1}(\n|(?!:::)[^:\n][^\n]*\n){36,}:::' - '::\n\n(( {3}[^\n]+)?\n){35,} {3}[^\n]+\n' - '\.\. (code-block|code|sourcecode)::( [^\n]+)?\n(( {3,12}:[^\n:]*:[^\n]*\n)*){0,1}\n(( {3}[^\n]+)?\n){35,} {3}[^\n]+\n' From 911d556e13e7cbd50b7fe67c1f1c466dd899c85b Mon Sep 17 00:00:00 2001 From: secondskoll Date: Wed, 11 Feb 2026 17:14:11 +1000 Subject: [PATCH 5/5] fix: 17a/b allow no blank line in MD after option block --- .../017a-Suggest-code-over-25-lines.yml | 6 +- .../017b-Warn-code-over-35-lines.yml | 6 +- tests/data/manifest.yml | 89 +++++++++++++++++++ 3 files changed, 95 insertions(+), 6 deletions(-) diff --git a/styles/Canonical/017a-Suggest-code-over-25-lines.yml b/styles/Canonical/017a-Suggest-code-over-25-lines.yml index 443f489..8a16b71 100644 --- a/styles/Canonical/017a-Suggest-code-over-25-lines.yml +++ b/styles/Canonical/017a-Suggest-code-over-25-lines.yml @@ -5,7 +5,7 @@ level: suggestion scope: raw nonword: true tokens: - - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}(\n|(?!```)[^:\n][^\n]*\n){26,}```' - - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}(\n|(?!:::)[^:\n][^\n]*\n){26,}:::' + - '``` ?({(code-block|code|sourcecode)})?[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n?)?(?!```)[^:\n][^\n]*\n(\n|(?!```)[^:\n][^\n]*\n){25,}```' + - '::: ?({(code-block|code|sourcecode)})?[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n?)?(?!:::)[^:\n][^\n]*\n(\n|(?!:::)[^:\n][^\n]*\n){25,}:::' - '::\n\n(( {3}[^\n]+)?\n){25,} {3}[^\n]+\n' - - '\.\. (code-block|code|sourcecode)::( [^\n]+)?\n(( {3,12}:[^\n:]*:[^\n]*\n)*){0,1}\n(( {3}[^\n]+)?\n){25,} {3}[^\n]+\n' + - '\.\. (code-block|code|sourcecode)::( [^\n]+)?\n(( {3,12}:[^\n:]*:[^\n]*\n)*)?\n(( {3}[^\n]+)?\n){25,} {3}[^\n]+\n' diff --git a/styles/Canonical/017b-Warn-code-over-35-lines.yml b/styles/Canonical/017b-Warn-code-over-35-lines.yml index 2579f06..c5a33b6 100644 --- a/styles/Canonical/017b-Warn-code-over-35-lines.yml +++ b/styles/Canonical/017b-Warn-code-over-35-lines.yml @@ -5,7 +5,7 @@ level: warning scope: raw nonword: true tokens: - - '``` {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0,1}(\n|(?!```)[^:\n][^\n]*\n){36,}```' - - '::: {0,1}({(code-block|code|sourcecode)}){0,1}[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n){0.1}(\n|(?!:::)[^:\n][^\n]*\n){36,}:::' + - '``` ?({(code-block|code|sourcecode)})?[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n?)?(?!```)[^:\n][^\n]*\n(\n|(?!```)[^:\n][^\n]*\n){35,}```' + - '::: ?({(code-block|code|sourcecode)})?[^{}\n]*\n((:[^\n]+:[^\n]*\n)+\n?){0.1}(?!:::)[^:\n][^\n]*\n(\n|(?!:::)[^:\n][^\n]*\n){35,}:::' - '::\n\n(( {3}[^\n]+)?\n){35,} {3}[^\n]+\n' - - '\.\. (code-block|code|sourcecode)::( [^\n]+)?\n(( {3,12}:[^\n:]*:[^\n]*\n)*){0,1}\n(( {3}[^\n]+)?\n){35,} {3}[^\n]+\n' + - '\.\. (code-block|code|sourcecode)::( [^\n]+)?\n(( {3,12}:[^\n:]*:[^\n]*\n)*)?\n(( {3}[^\n]+)?\n){35,} {3}[^\n]+\n' diff --git a/tests/data/manifest.yml b/tests/data/manifest.yml index df113a8..49e72a4 100644 --- a/tests/data/manifest.yml +++ b/tests/data/manifest.yml @@ -1320,6 +1320,95 @@ rules: Line 04 + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + Line 27 + Line 28 + Line 29 + Line 30 + Line 31 + Line 32 + Line 33 + Line 34 + Line 35 + Line 36 + ``` + severity: warning + - id: long-code-warning-myst-no-nl-after-option + filetypes: [md] + content: | + No blank line after option: + + ```{code} text + :foo: bar + Line 01 of 36 + Line 02 + + Line 04 + + + Line 07 + Line 08 + Line 09 + Line 10 + Line 11 + Line 12 + Line 13 + Line 14 + Line 15 + Line 16 + Line 17 + Line 18 + Line 19 + Line 20 + Line 21 + Line 22 + Line 23 + Line 24 + Line 25 + Line 26 + Line 27 + Line 28 + Line 29 + Line 30 + Line 31 + Line 32 + Line 33 + Line 34 + Line 35 + Line 36 + ``` + + + expect: + triggers: + - |- # |- because we don't want the newline at the end. + ```{code} text + :foo: bar + Line 01 of 36 + Line 02 + + Line 04 + + Line 07 Line 08 Line 09