This commit is contained in:
David Anson 2025-11-27 19:45:22 -08:00
parent d8bf33dde6
commit 4541ee3dd2
17 changed files with 395 additions and 67 deletions

View file

@ -7,11 +7,11 @@ up into multiple lines. To set a different maximum length for headings, use
This rule has an exception when there is no whitespace beyond the configured This rule has an exception when there is no whitespace beyond the configured
line length. This allows you to include items such as long URLs without being line length. This allows you to include items such as long URLs without being
forced to break them in the middle. To disable this exception, set the `strict` forced to break them in the middle. To disable this exception, set the `strict`
parameter to `true` and an issue will be reported when any line is too long. To parameter to `true` and a violation will be reported when any line is too long.
warn for lines that are too long and could be fixed but allow long lines To warn for lines that are too long and could be fixed while allowing long lines
without spaces, set the `stern` parameter to `true`. without spaces, set the `stern` parameter to `true`.
For example (assuming normal behavior): For example (assuming default behavior):
```markdown ```markdown
IF THIS LINE IS THE MAXIMUM LENGTH IF THIS LINE IS THE MAXIMUM LENGTH
@ -26,14 +26,25 @@ mode, the middle two lines above are both violations, but the last is okay.
You have the option to exclude this rule for code blocks, tables, or headings. You have the option to exclude this rule for code blocks, tables, or headings.
To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false. To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false.
Code blocks are included in this rule by default since it is often a Code blocks are included in this rule by default since it is often a requirement
requirement for document readability, and tentatively compatible with code for document readability, and tentatively compatible with code rules. However,
rules. Still, some languages do not lend themselves to short lines. some languages do not lend themselves to short lines.
By default, this rule treats the number of characters in the line as its length.
Many editors render [emoji][emoji-013] and [CJK characters][cjk-characters-013]
at *twice* the width of [Latin characters][latin-script-013], so the
`wide_characters` parameter can be set to `true` to treat the "visual" width of
the line as its length instead.
Lines with link/image reference definitions and standalone lines (i.e., not part Lines with link/image reference definitions and standalone lines (i.e., not part
of a paragraph) with only a link/image (possibly using (strong) emphasis) are of a paragraph) with only a link/image (possibly using emphasis) are always
always exempted from this rule (even in `strict` mode) because there is often no exempted from this rule (even in `strict` mode) because there is often no way to
way to split such lines without breaking the URL. split such lines without breaking the URL.
Rationale: Extremely long lines can be difficult to work with in some editors. Rationale: Extremely long lines can be difficult to work with in some editors.
More information: <https://cirosantilli.com/markdown-style-guide#line-wrapping>. More information: <https://cirosantilli.com/markdown-style-guide#line-wrapping>.
[cjk-characters-013]: https://en.wikipedia.org/wiki/CJK_characters
[emoji-013]: https://en.wikipedia.org/wiki/Emoji
[latin-script-013]: https://en.wikipedia.org/wiki/Latin_script

View file

@ -47,11 +47,11 @@ not, violations are be reported for whichever style would produce the *fewest*
issues (i.e., whichever style is the closest match). issues (i.e., whichever style is the closest match).
Note: Delimiter placement for the `aligned` style is based on visual appearance Note: Delimiter placement for the `aligned` style is based on visual appearance
and not character count. Because editors typically render [emoji][emoji] and and not character count. Because editors typically render [emoji][emoji-060] and
[CJK characters][cjk-characters] at *twice* the width of [CJK characters][cjk-characters-060] at *twice* the width of
[Latin characters][latin-script], this rule takes that into account for tables [Latin characters][latin-script-060], this rule takes that into account for
using the `aligned` style. The following table is correctly formatted and will tables using the `aligned` style. The following table is correctly formatted and
appear aligned in most editors and monospaced fonts: will appear aligned in most editors and monospaced fonts:
<!-- markdownlint-capture --> <!-- markdownlint-capture -->
<!-- markdownlint-disable extended-ascii --> <!-- markdownlint-disable extended-ascii -->
@ -67,7 +67,7 @@ appear aligned in most editors and monospaced fonts:
Rationale: Consistent formatting makes it easier to understand a document. Rationale: Consistent formatting makes it easier to understand a document.
[cjk-characters]: https://en.wikipedia.org/wiki/CJK_characters [cjk-characters-060]: https://en.wikipedia.org/wiki/CJK_characters
[emoji]: https://en.wikipedia.org/wiki/Emoji [emoji-060]: https://en.wikipedia.org/wiki/Emoji
[gfm-table-060]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables [gfm-table-060]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables
[latin-script]: https://en.wikipedia.org/wiki/Latin_script [latin-script-060]: https://en.wikipedia.org/wiki/Latin_script

View file

@ -496,6 +496,7 @@ Parameters:
- `stern`: Stern length checking (`boolean`, default `false`) - `stern`: Stern length checking (`boolean`, default `false`)
- `strict`: Strict length checking (`boolean`, default `false`) - `strict`: Strict length checking (`boolean`, default `false`)
- `tables`: Include tables (`boolean`, default `true`) - `tables`: Include tables (`boolean`, default `true`)
- `wide_characters`: Expand wide characters (`boolean`, default `false`)
This rule is triggered when there are lines that are longer than the This rule is triggered when there are lines that are longer than the
configured `line_length` (default: 80 characters). To fix this, split the line configured `line_length` (default: 80 characters). To fix this, split the line
@ -506,11 +507,11 @@ up into multiple lines. To set a different maximum length for headings, use
This rule has an exception when there is no whitespace beyond the configured This rule has an exception when there is no whitespace beyond the configured
line length. This allows you to include items such as long URLs without being line length. This allows you to include items such as long URLs without being
forced to break them in the middle. To disable this exception, set the `strict` forced to break them in the middle. To disable this exception, set the `strict`
parameter to `true` and an issue will be reported when any line is too long. To parameter to `true` and a violation will be reported when any line is too long.
warn for lines that are too long and could be fixed but allow long lines To warn for lines that are too long and could be fixed while allowing long lines
without spaces, set the `stern` parameter to `true`. without spaces, set the `stern` parameter to `true`.
For example (assuming normal behavior): For example (assuming default behavior):
```markdown ```markdown
IF THIS LINE IS THE MAXIMUM LENGTH IF THIS LINE IS THE MAXIMUM LENGTH
@ -525,18 +526,29 @@ mode, the middle two lines above are both violations, but the last is okay.
You have the option to exclude this rule for code blocks, tables, or headings. You have the option to exclude this rule for code blocks, tables, or headings.
To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false. To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false.
Code blocks are included in this rule by default since it is often a Code blocks are included in this rule by default since it is often a requirement
requirement for document readability, and tentatively compatible with code for document readability, and tentatively compatible with code rules. However,
rules. Still, some languages do not lend themselves to short lines. some languages do not lend themselves to short lines.
By default, this rule treats the number of characters in the line as its length.
Many editors render [emoji][emoji-013] and [CJK characters][cjk-characters-013]
at *twice* the width of [Latin characters][latin-script-013], so the
`wide_characters` parameter can be set to `true` to treat the "visual" width of
the line as its length instead.
Lines with link/image reference definitions and standalone lines (i.e., not part Lines with link/image reference definitions and standalone lines (i.e., not part
of a paragraph) with only a link/image (possibly using (strong) emphasis) are of a paragraph) with only a link/image (possibly using emphasis) are always
always exempted from this rule (even in `strict` mode) because there is often no exempted from this rule (even in `strict` mode) because there is often no way to
way to split such lines without breaking the URL. split such lines without breaking the URL.
Rationale: Extremely long lines can be difficult to work with in some editors. Rationale: Extremely long lines can be difficult to work with in some editors.
More information: <https://cirosantilli.com/markdown-style-guide#line-wrapping>. More information: <https://cirosantilli.com/markdown-style-guide#line-wrapping>.
[cjk-characters-013]: https://en.wikipedia.org/wiki/CJK_characters
[emoji-013]: https://en.wikipedia.org/wiki/Emoji
[latin-script-013]: https://en.wikipedia.org/wiki/Latin_script
<a name="md014"></a> <a name="md014"></a>
## `MD014` - Dollar signs used before commands without showing output ## `MD014` - Dollar signs used before commands without showing output
@ -2746,11 +2758,11 @@ not, violations are be reported for whichever style would produce the *fewest*
issues (i.e., whichever style is the closest match). issues (i.e., whichever style is the closest match).
Note: Delimiter placement for the `aligned` style is based on visual appearance Note: Delimiter placement for the `aligned` style is based on visual appearance
and not character count. Because editors typically render [emoji][emoji] and and not character count. Because editors typically render [emoji][emoji-060] and
[CJK characters][cjk-characters] at *twice* the width of [CJK characters][cjk-characters-060] at *twice* the width of
[Latin characters][latin-script], this rule takes that into account for tables [Latin characters][latin-script-060], this rule takes that into account for
using the `aligned` style. The following table is correctly formatted and will tables using the `aligned` style. The following table is correctly formatted and
appear aligned in most editors and monospaced fonts: will appear aligned in most editors and monospaced fonts:
<!-- markdownlint-capture --> <!-- markdownlint-capture -->
<!-- markdownlint-disable extended-ascii --> <!-- markdownlint-disable extended-ascii -->
@ -2766,10 +2778,10 @@ appear aligned in most editors and monospaced fonts:
Rationale: Consistent formatting makes it easier to understand a document. Rationale: Consistent formatting makes it easier to understand a document.
[cjk-characters]: https://en.wikipedia.org/wiki/CJK_characters [cjk-characters-060]: https://en.wikipedia.org/wiki/CJK_characters
[emoji]: https://en.wikipedia.org/wiki/Emoji [emoji-060]: https://en.wikipedia.org/wiki/Emoji
[gfm-table-060]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables [gfm-table-060]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables
[latin-script]: https://en.wikipedia.org/wiki/Latin_script [latin-script-060]: https://en.wikipedia.org/wiki/Latin_script
<!-- markdownlint-configure-file { <!-- markdownlint-configure-file {
"no-inline-html": { "no-inline-html": {

View file

@ -16,6 +16,7 @@ Parameters:
- `stern`: Stern length checking (`boolean`, default `false`) - `stern`: Stern length checking (`boolean`, default `false`)
- `strict`: Strict length checking (`boolean`, default `false`) - `strict`: Strict length checking (`boolean`, default `false`)
- `tables`: Include tables (`boolean`, default `true`) - `tables`: Include tables (`boolean`, default `true`)
- `wide_characters`: Expand wide characters (`boolean`, default `false`)
This rule is triggered when there are lines that are longer than the This rule is triggered when there are lines that are longer than the
configured `line_length` (default: 80 characters). To fix this, split the line configured `line_length` (default: 80 characters). To fix this, split the line
@ -26,11 +27,11 @@ up into multiple lines. To set a different maximum length for headings, use
This rule has an exception when there is no whitespace beyond the configured This rule has an exception when there is no whitespace beyond the configured
line length. This allows you to include items such as long URLs without being line length. This allows you to include items such as long URLs without being
forced to break them in the middle. To disable this exception, set the `strict` forced to break them in the middle. To disable this exception, set the `strict`
parameter to `true` and an issue will be reported when any line is too long. To parameter to `true` and a violation will be reported when any line is too long.
warn for lines that are too long and could be fixed but allow long lines To warn for lines that are too long and could be fixed while allowing long lines
without spaces, set the `stern` parameter to `true`. without spaces, set the `stern` parameter to `true`.
For example (assuming normal behavior): For example (assuming default behavior):
```markdown ```markdown
IF THIS LINE IS THE MAXIMUM LENGTH IF THIS LINE IS THE MAXIMUM LENGTH
@ -45,14 +46,25 @@ mode, the middle two lines above are both violations, but the last is okay.
You have the option to exclude this rule for code blocks, tables, or headings. You have the option to exclude this rule for code blocks, tables, or headings.
To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false. To do so, set the `code_blocks`, `tables`, or `headings` parameter(s) to false.
Code blocks are included in this rule by default since it is often a Code blocks are included in this rule by default since it is often a requirement
requirement for document readability, and tentatively compatible with code for document readability, and tentatively compatible with code rules. However,
rules. Still, some languages do not lend themselves to short lines. some languages do not lend themselves to short lines.
By default, this rule treats the number of characters in the line as its length.
Many editors render [emoji][emoji-013] and [CJK characters][cjk-characters-013]
at *twice* the width of [Latin characters][latin-script-013], so the
`wide_characters` parameter can be set to `true` to treat the "visual" width of
the line as its length instead.
Lines with link/image reference definitions and standalone lines (i.e., not part Lines with link/image reference definitions and standalone lines (i.e., not part
of a paragraph) with only a link/image (possibly using (strong) emphasis) are of a paragraph) with only a link/image (possibly using emphasis) are always
always exempted from this rule (even in `strict` mode) because there is often no exempted from this rule (even in `strict` mode) because there is often no way to
way to split such lines without breaking the URL. split such lines without breaking the URL.
Rationale: Extremely long lines can be difficult to work with in some editors. Rationale: Extremely long lines can be difficult to work with in some editors.
More information: <https://cirosantilli.com/markdown-style-guide#line-wrapping>. More information: <https://cirosantilli.com/markdown-style-guide#line-wrapping>.
[cjk-characters-013]: https://en.wikipedia.org/wiki/CJK_characters
[emoji-013]: https://en.wikipedia.org/wiki/Emoji
[latin-script-013]: https://en.wikipedia.org/wiki/Latin_script

View file

@ -58,11 +58,11 @@ not, violations are be reported for whichever style would produce the *fewest*
issues (i.e., whichever style is the closest match). issues (i.e., whichever style is the closest match).
Note: Delimiter placement for the `aligned` style is based on visual appearance Note: Delimiter placement for the `aligned` style is based on visual appearance
and not character count. Because editors typically render [emoji][emoji] and and not character count. Because editors typically render [emoji][emoji-060] and
[CJK characters][cjk-characters] at *twice* the width of [CJK characters][cjk-characters-060] at *twice* the width of
[Latin characters][latin-script], this rule takes that into account for tables [Latin characters][latin-script-060], this rule takes that into account for
using the `aligned` style. The following table is correctly formatted and will tables using the `aligned` style. The following table is correctly formatted and
appear aligned in most editors and monospaced fonts: will appear aligned in most editors and monospaced fonts:
<!-- markdownlint-capture --> <!-- markdownlint-capture -->
<!-- markdownlint-disable extended-ascii --> <!-- markdownlint-disable extended-ascii -->
@ -78,7 +78,7 @@ appear aligned in most editors and monospaced fonts:
Rationale: Consistent formatting makes it easier to understand a document. Rationale: Consistent formatting makes it easier to understand a document.
[cjk-characters]: https://en.wikipedia.org/wiki/CJK_characters [cjk-characters-060]: https://en.wikipedia.org/wiki/CJK_characters
[emoji]: https://en.wikipedia.org/wiki/Emoji [emoji-060]: https://en.wikipedia.org/wiki/Emoji
[gfm-table-060]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables [gfm-table-060]: https://docs.github.com/en/get-started/writing-on-github/working-with-advanced-formatting/organizing-information-with-tables
[latin-script]: https://en.wikipedia.org/wiki/Latin_script [latin-script-060]: https://en.wikipedia.org/wiki/Latin_script

View file

@ -465,6 +465,10 @@ export interface ConfigurationStrict {
* Stern length checking * Stern length checking
*/ */
stern?: boolean; stern?: boolean;
/**
* Expand wide characters
*/
wide_characters?: boolean;
}; };
/** /**
* MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.39.0/doc/md013.md * MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.39.0/doc/md013.md
@ -513,6 +517,10 @@ export interface ConfigurationStrict {
* Stern length checking * Stern length checking
*/ */
stern?: boolean; stern?: boolean;
/**
* Expand wide characters
*/
wide_characters?: boolean;
}; };
/** /**
* MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.39.0/doc/md014.md * MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.39.0/doc/md014.md

View file

@ -3,6 +3,7 @@
import { addErrorDetailIf } from "../helpers/helpers.cjs"; import { addErrorDetailIf } from "../helpers/helpers.cjs";
import { filterByTypesCached, getReferenceLinkImageData } from "./cache.mjs"; import { filterByTypesCached, getReferenceLinkImageData } from "./cache.mjs";
import { addRangeToSet, getDescendantsByType } from "../helpers/micromark-helpers.cjs"; import { addRangeToSet, getDescendantsByType } from "../helpers/micromark-helpers.cjs";
import stringWidth from "string-width";
// Regular expression for a line that is not wrappable // Regular expression for a line that is not wrappable
const notWrappableRe = /^(?:[#>\s]*\s)?\S*$/; const notWrappableRe = /^(?:[#>\s]*\s)?\S*$/;
@ -28,6 +29,7 @@ export default {
const includeTables = (tables === undefined) ? true : !!tables; const includeTables = (tables === undefined) ? true : !!tables;
const headings = params.config.headings; const headings = params.config.headings;
const includeHeadings = (headings === undefined) ? true : !!headings; const includeHeadings = (headings === undefined) ? true : !!headings;
const wideCharacters = !!params.config.wide_characters;
const headingLineNumbers = new Set(); const headingLineNumbers = new Set();
for (const heading of filterByTypesCached([ "atxHeading", "setextHeading" ])) { for (const heading of filterByTypesCached([ "atxHeading", "setextHeading" ])) {
addRangeToSet(headingLineNumbers, heading.startLine, heading.endLine); addRangeToSet(headingLineNumbers, heading.startLine, heading.endLine);
@ -65,6 +67,7 @@ export default {
const inTable = tableLineNumbers.has(lineNumber); const inTable = tableLineNumbers.has(lineNumber);
const maxLength = inCode ? codeLineLength : (isHeading ? headingLineLength : lineLength); const maxLength = inCode ? codeLineLength : (isHeading ? headingLineLength : lineLength);
const text = (strict || stern) ? line : line.replace(/\S*$/u, ""); const text = (strict || stern) ? line : line.replace(/\S*$/u, "");
const textLength = wideCharacters ? stringWidth(text) : text.length;
if ((maxLength > 0) && if ((maxLength > 0) &&
(includeCodeBlocks || !inCode) && (includeCodeBlocks || !inCode) &&
(includeTables || !inTable) && (includeTables || !inTable) &&
@ -73,15 +76,15 @@ export default {
(strict || (strict ||
(!(stern && notWrappableRe.test(line)) && (!(stern && notWrappableRe.test(line)) &&
!linkOnlyLineNumbers.has(lineNumber))) && !linkOnlyLineNumbers.has(lineNumber))) &&
(text.length > maxLength)) { (textLength > maxLength)) {
addErrorDetailIf( addErrorDetailIf(
onError, onError,
lineNumber, lineNumber,
maxLength, maxLength,
line.length, wideCharacters ? stringWidth(line) : line.length,
undefined, undefined,
undefined, undefined,
[ maxLength + 1, line.length - maxLength ] wideCharacters ? undefined : [ maxLength + 1, line.length - maxLength ]
); );
} }
} }

View file

@ -86,7 +86,9 @@
// Strict length checking // Strict length checking
"strict": false, "strict": false,
// Stern length checking // Stern length checking
"stern": false "stern": false,
// Expand wide characters
"wide_characters": false
}, },
// MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.39.0/doc/md014.md // MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.39.0/doc/md014.md

View file

@ -79,6 +79,8 @@ MD013:
strict: false strict: false
# Stern length checking # Stern length checking
stern: false stern: false
# Expand wide characters
wide_characters: false
# MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.39.0/doc/md014.md # MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.39.0/doc/md014.md
MD014: true MD014: true

View file

@ -264,6 +264,12 @@ for (const rule of rules) {
"type": "boolean", "type": "boolean",
"default": false "default": false
}; };
// @ts-ignore
subscheme.properties.wide_characters = {
"description": "Expand wide characters",
"type": "boolean",
"default": false
};
break; break;
case "MD022": case "MD022":
// @ts-ignore // @ts-ignore

View file

@ -920,6 +920,11 @@
"description": "Stern length checking", "description": "Stern length checking",
"type": "boolean", "type": "boolean",
"default": false "default": false
},
"wide_characters": {
"description": "Expand wide characters",
"type": "boolean",
"default": false
} }
} }
} }
@ -998,6 +1003,11 @@
"description": "Stern length checking", "description": "Stern length checking",
"type": "boolean", "type": "boolean",
"default": false "default": false
},
"wide_characters": {
"description": "Expand wide characters",
"type": "boolean",
"default": false
} }
} }
} }

View file

@ -920,6 +920,11 @@
"description": "Stern length checking", "description": "Stern length checking",
"type": "boolean", "type": "boolean",
"default": false "default": false
},
"wide_characters": {
"description": "Expand wide characters",
"type": "boolean",
"default": false
} }
} }
} }
@ -998,6 +1003,11 @@
"description": "Stern length checking", "description": "Stern length checking",
"type": "boolean", "type": "boolean",
"default": false "default": false
},
"wide_characters": {
"description": "Expand wide characters",
"type": "boolean",
"default": false
} }
} }
} }

View file

@ -0,0 +1,50 @@
# Long Lines Thresholds (Wide Characters)
00000000011111111112222222222333333333344444444445
12345678901234567890123456789012345678901234567890
Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx t
Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx t
Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx✅ t
{MD013:-2} {MD013:-4}
## Texxxxxxxxxxxxxxxxxxxxxxxx t
## Texxxxxxxxxxxxxxxxxxxxxxxxx t
## Texxxxxxxxxxxxxxxxxxxxxxx✅ t
{MD013:-2} {MD013:-4}
```text
Texxxxxxxxxxxxxxxxx t
Texxxxxxxxxxxxxxxxxx t
Texxxxxxxxxxxxxxxx✅ t
```
{MD013:-3} {MD013:-4}
Texxxxxxxxxxxxx t
Texxxxxxxxxxxxxx t
Texxxxxxxxxxxx✅ t
{MD013:-2} {MD013:-3}
/ 👋🌎 / 你好,世界 / こんにちは世界 / 안녕 세상 /
むかしむかし,あるところに,おじいさんとおばあさんがくらしていました。
{MD013:-2} {MD013:-4}
<!-- markdownlint-configure-file {
"code-block-style": false,
"line-length": {
"line_length": 40,
"heading_line_length": 30,
"code_block_line_length": 20,
"wide_characters": true
}
} -->

View file

@ -7,25 +7,35 @@ Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx t
Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx t Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx t
{MD013:-2} Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx✅ t
{MD013:-4}
## Texxxxxxxxxxxxxxxxxxxxxxxx t ## Texxxxxxxxxxxxxxxxxxxxxxxx t
## Texxxxxxxxxxxxxxxxxxxxxxxxx t ## Texxxxxxxxxxxxxxxxxxxxxxxxx t
{MD013:-2} ## Texxxxxxxxxxxxxxxxxxxxxxx✅ t
{MD013:-4}
```text ```text
Texxxxxxxxxxxxxxxxx t Texxxxxxxxxxxxxxxxx t
Texxxxxxxxxxxxxxxxxx t Texxxxxxxxxxxxxxxxxx t
Texxxxxxxxxxxxxxxx✅ t
``` ```
{MD013:-3} {MD013:-4}
Texxxxxxxxxxxxx t Texxxxxxxxxxxxx t
Texxxxxxxxxxxxxx t Texxxxxxxxxxxxxx t
Texxxxxxxxxxxx✅ t
{MD013:-2} {MD013:-3}
/ 👋🌎 / 你好,世界 / こんにちは世界 / 안녕 세상 /
むかしむかし,あるところに,おじいさんとおばあさんがくらしていました。
<!-- markdownlint-configure-file { <!-- markdownlint-configure-file {
"code-block-style": false, "code-block-style": false,

View file

@ -1101,7 +1101,7 @@ test("readme", async(t) => {
}); });
test("validateJsonUsingConfigSchemaStrict", async(t) => { test("validateJsonUsingConfigSchemaStrict", async(t) => {
t.plan(221); t.plan(222);
// @ts-ignore // @ts-ignore
const ajv = new Ajv(ajvOptions); const ajv = new Ajv(ajvOptions);
const validateSchemaStrict = ajv.compile(configSchemaStrict); const validateSchemaStrict = ajv.compile(configSchemaStrict);

View file

@ -42658,6 +42658,190 @@ Generated by [AVA](https://avajs.dev).
`, `,
} }
## long-lines-thresholds-wide-characters.md
> Snapshot 1
{
errors: [
{
errorContext: null,
errorDetail: 'Expected: 40; Actual: 42',
errorRange: null,
fixInfo: null,
lineNumber: 8,
ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [
'MD013',
'line-length',
],
severity: 'error',
},
{
errorContext: null,
errorDetail: 'Expected: 40; Actual: 42',
errorRange: null,
fixInfo: null,
lineNumber: 10,
ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [
'MD013',
'line-length',
],
severity: 'error',
},
{
errorContext: null,
errorDetail: 'Expected: 30; Actual: 32',
errorRange: null,
fixInfo: null,
lineNumber: 16,
ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [
'MD013',
'line-length',
],
severity: 'error',
},
{
errorContext: null,
errorDetail: 'Expected: 30; Actual: 32',
errorRange: null,
fixInfo: null,
lineNumber: 18,
ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [
'MD013',
'line-length',
],
severity: 'error',
},
{
errorContext: null,
errorDetail: 'Expected: 20; Actual: 22',
errorRange: null,
fixInfo: null,
lineNumber: 24,
ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [
'MD013',
'line-length',
],
severity: 'error',
},
{
errorContext: null,
errorDetail: 'Expected: 20; Actual: 22',
errorRange: null,
fixInfo: null,
lineNumber: 25,
ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [
'MD013',
'line-length',
],
severity: 'error',
},
{
errorContext: null,
errorDetail: 'Expected: 20; Actual: 22',
errorRange: null,
fixInfo: null,
lineNumber: 31,
ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [
'MD013',
'line-length',
],
severity: 'error',
},
{
errorContext: null,
errorDetail: 'Expected: 20; Actual: 22',
errorRange: null,
fixInfo: null,
lineNumber: 32,
ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [
'MD013',
'line-length',
],
severity: 'error',
},
{
errorContext: null,
errorDetail: 'Expected: 40; Actual: 50',
errorRange: null,
fixInfo: null,
lineNumber: 36,
ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [
'MD013',
'line-length',
],
severity: 'error',
},
],
fixed: `# Long Lines Thresholds (Wide Characters)␊
00000000011111111112222222222333333333344444444445␊
12345678901234567890123456789012345678901234567890␊
Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx t␊
Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx t␊
Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx✅ t␊
{MD013:-2} {MD013:-4}␊
## Texxxxxxxxxxxxxxxxxxxxxxxx t␊
## Texxxxxxxxxxxxxxxxxxxxxxxxx t␊
## Texxxxxxxxxxxxxxxxxxxxxxx✅ t␊
{MD013:-2} {MD013:-4}␊
\`\`\`text␊
Texxxxxxxxxxxxxxxxx t␊
Texxxxxxxxxxxxxxxxxx t␊
Texxxxxxxxxxxxxxxx✅ t␊
\`\`\`␊
{MD013:-3} {MD013:-4}␊
Texxxxxxxxxxxxx t␊
Texxxxxxxxxxxxxx t␊
Texxxxxxxxxxxx✅ t␊
{MD013:-2} {MD013:-3}␊
/ 👋🌎 / 你好,世界 / こんにちは世界 / 안녕 세상 /␊
{MD013:-2}␊
<!-- markdownlint-configure-file {␊
"code-block-style": false,␊
"line-length": {␊
"line_length": 40,␊
"heading_line_length": 30,␊
"code_block_line_length": 20,␊
"wide_characters": true␊
}␊
} -->␊
`,
}
## long-lines-thresholds.md ## long-lines-thresholds.md
> Snapshot 1 > Snapshot 1
@ -42689,7 +42873,7 @@ Generated by [AVA](https://avajs.dev).
2, 2,
], ],
fixInfo: null, fixInfo: null,
lineNumber: 14, lineNumber: 16,
ruleDescription: 'Line length', ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md', ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [ ruleNames: [
@ -42706,7 +42890,7 @@ Generated by [AVA](https://avajs.dev).
2, 2,
], ],
fixInfo: null, fixInfo: null,
lineNumber: 20, lineNumber: 24,
ruleDescription: 'Line length', ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md', ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [ ruleNames: [
@ -42723,7 +42907,7 @@ Generated by [AVA](https://avajs.dev).
2, 2,
], ],
fixInfo: null, fixInfo: null,
lineNumber: 26, lineNumber: 31,
ruleDescription: 'Line length', ruleDescription: 'Line length',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md', ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md013.md',
ruleNames: [ ruleNames: [
@ -42742,25 +42926,33 @@ Generated by [AVA](https://avajs.dev).
Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx t␊ Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx t␊
{MD013:-2}␊ Texxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx✅ t␊
{MD013:-4}␊
## Texxxxxxxxxxxxxxxxxxxxxxxx t␊ ## Texxxxxxxxxxxxxxxxxxxxxxxx t␊
## Texxxxxxxxxxxxxxxxxxxxxxxxx t␊ ## Texxxxxxxxxxxxxxxxxxxxxxxxx t␊
{MD013:-2}␊ ## Texxxxxxxxxxxxxxxxxxxxxxx✅ t␊
{MD013:-4}␊
\`\`\`text␊ \`\`\`text␊
Texxxxxxxxxxxxxxxxx t␊ Texxxxxxxxxxxxxxxxx t␊
Texxxxxxxxxxxxxxxxxx t␊ Texxxxxxxxxxxxxxxxxx t␊
Texxxxxxxxxxxxxxxx✅ t␊
\`\`\`␊ \`\`\`␊
{MD013:-3}␊ {MD013:-4}␊
Texxxxxxxxxxxxx t␊ Texxxxxxxxxxxxx t␊
Texxxxxxxxxxxxxx t␊ Texxxxxxxxxxxxxx t␊
Texxxxxxxxxxxx✅ t␊
{MD013:-2}␊ {MD013:-3}␊
/ 👋🌎 / 你好,世界 / こんにちは世界 / 안녕 세상 /␊
<!-- markdownlint-configure-file {␊ <!-- markdownlint-configure-file {␊
"code-block-style": false,␊ "code-block-style": false,␊