markdownlint
Advanced tools
Comparing version 0.31.1 to 0.32.0
# Changelog | ||
## 0.32.0 | ||
- Remove deprecated MD002/MD006 | ||
- Remove rule aliases for "header" | ||
- Add MD054/link-image-style | ||
- Use `micromark` in MD005/MD007/MD030 | ||
- Improve MD022/MD026/MD034/MD037/MD038/MD045/MD051 | ||
- Improve JSON schema and related examples | ||
- Provide type declaration for Configuration object | ||
- Update dependencies | ||
## 0.31.1 | ||
@@ -4,0 +15,0 @@ |
@@ -76,4 +76,4 @@ # Contributing | ||
from a different project, Stack Overflow, or the like is not allowed. The use of | ||
tools such as GitHub Copilot that generate code from other projects is not | ||
allowed. | ||
tools such as GitHub Copilot, ChatGPT, LLMs (large language models), etc. that | ||
incorporate code from other projects is not allowed. | ||
@@ -80,0 +80,0 @@ Thank you! |
# `MD001` - Heading levels should only increment by one level at a time | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
Aliases: `header-increment`, `heading-increment` | ||
Aliases: `heading-increment` | ||
@@ -7,0 +7,0 @@ This rule is triggered when you skip heading levels in a Markdown document, for |
# `MD003` - Heading style | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
Aliases: `header-style`, `heading-style` | ||
Aliases: `heading-style` | ||
@@ -7,0 +7,0 @@ Parameters: |
@@ -39,6 +39,5 @@ # `MD007` - Unordered list indentation | ||
The `start_indented` parameter allows the first level of lists to be indented by | ||
the configured number of spaces rather than starting at zero (the inverse of | ||
MD006). The `start_indent` parameter allows the first level of lists to be | ||
indented by a different number of spaces than the rest (ignored when | ||
`start_indented` is not set). | ||
the configured number of spaces rather than starting at zero. The `start_indent` | ||
parameter allows the first level of lists to be indented by a different number | ||
of spaces than the rest (ignored when `start_indented` is not set). | ||
@@ -45,0 +44,0 @@ Rationale: Indenting by 2 spaces allows the content of a nested list to be in |
@@ -12,3 +12,2 @@ # `MD013` - Line length | ||
- `code_blocks`: Include code blocks (`boolean`, default `true`) | ||
- `headers`: Include headings (`boolean`, default `true`) | ||
- `heading_line_length`: Number of characters for headings (`integer`, default | ||
@@ -22,4 +21,2 @@ `80`) | ||
> If `headings` is not provided, `headers` (deprecated) will be used. | ||
This rule is triggered when there are lines that are longer than the | ||
@@ -26,0 +23,0 @@ configured `line_length` (default: 80 characters). To fix this, split the line |
# `MD018` - No space after hash on atx style heading | ||
Tags: `atx`, `headers`, `headings`, `spaces` | ||
Tags: `atx`, `headings`, `spaces` | ||
@@ -5,0 +5,0 @@ Aliases: `no-missing-space-atx` |
# `MD019` - Multiple spaces after hash on atx style heading | ||
Tags: `atx`, `headers`, `headings`, `spaces` | ||
Tags: `atx`, `headings`, `spaces` | ||
@@ -5,0 +5,0 @@ Aliases: `no-multiple-space-atx` |
# `MD020` - No space inside hashes on closed atx style heading | ||
Tags: `atx_closed`, `headers`, `headings`, `spaces` | ||
Tags: `atx_closed`, `headings`, `spaces` | ||
@@ -5,0 +5,0 @@ Aliases: `no-missing-space-closed-atx` |
# `MD021` - Multiple spaces inside hashes on closed atx style heading | ||
Tags: `atx_closed`, `headers`, `headings`, `spaces` | ||
Tags: `atx_closed`, `headings`, `spaces` | ||
@@ -5,0 +5,0 @@ Aliases: `no-multiple-space-closed-atx` |
# `MD022` - Headings should be surrounded by blank lines | ||
Tags: `blank_lines`, `headers`, `headings` | ||
Tags: `blank_lines`, `headings` | ||
Aliases: `blanks-around-headers`, `blanks-around-headings` | ||
Aliases: `blanks-around-headings` | ||
@@ -7,0 +7,0 @@ Parameters: |
# `MD023` - Headings must start at the beginning of the line | ||
Tags: `headers`, `headings`, `spaces` | ||
Tags: `headings`, `spaces` | ||
Aliases: `header-start-left`, `heading-start-left` | ||
Aliases: `heading-start-left` | ||
@@ -25,3 +25,10 @@ Fixable: Some violations can be fixed by tooling | ||
Note that scenarios like block quotes "indent" the start of the line, so the | ||
following is also correct: | ||
```markdown | ||
> # Heading in Block Quote | ||
``` | ||
Rationale: Headings that don't start at the beginning of the line will not be | ||
parsed as headings, and will instead appear as regular text. |
# `MD024` - Multiple headings with the same content | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
Aliases: `no-duplicate-header`, `no-duplicate-heading` | ||
Aliases: `no-duplicate-heading` | ||
@@ -7,0 +7,0 @@ Parameters: |
# `MD025` - Multiple top-level headings in the same document | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
@@ -5,0 +5,0 @@ Aliases: `single-h1`, `single-title` |
# `MD026` - Trailing punctuation in heading | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
@@ -5,0 +5,0 @@ Aliases: `no-trailing-punctuation` |
# `MD036` - Emphasis used instead of a heading | ||
Tags: `emphasis`, `headers`, `headings` | ||
Tags: `emphasis`, `headings` | ||
Aliases: `no-emphasis-as-header`, `no-emphasis-as-heading` | ||
Aliases: `no-emphasis-as-heading` | ||
@@ -7,0 +7,0 @@ Parameters: |
# `MD041` - First line in a file should be a top-level heading | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
@@ -5,0 +5,0 @@ Aliases: `first-line-h1`, `first-line-heading` |
# `MD043` - Required heading structure | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
Aliases: `required-headers`, `required-headings` | ||
Aliases: `required-headings` | ||
Parameters: | ||
- `headers`: List of headings (`string[]`, default `[]`) | ||
- `headings`: List of headings (`string[]`, default `[]`) | ||
- `match_case`: Match case of headings (`boolean`, default `false`) | ||
> If `headings` is not provided, `headers` (deprecated) will be used. | ||
This rule is triggered when the headings in a file do not match the array of | ||
@@ -16,0 +13,0 @@ headings passed to the rule. It can be used to enforce a standard heading |
@@ -26,2 +26,8 @@ # `MD045` - Images should have alternate text (alt text) | ||
Or with HTML as: | ||
```html | ||
<img src="image.jpg" alt="Alternate text" /> | ||
``` | ||
Guidance for writing alternate text is available from the [W3C][w3c], | ||
@@ -28,0 +34,0 @@ [Wikipedia][wikipedia], and [other locations][phase2technology]. |
@@ -1,2 +0,2 @@ | ||
# `MD049` - Emphasis style should be consistent | ||
# `MD049` - Emphasis style | ||
@@ -3,0 +3,0 @@ Tags: `emphasis` |
@@ -1,2 +0,2 @@ | ||
# `MD050` - Strong style should be consistent | ||
# `MD050` - Strong style | ||
@@ -3,0 +3,0 @@ Tags: `emphasis` |
@@ -14,5 +14,5 @@ # `MD053` - Link and image reference definitions should be needed | ||
Links and images in Markdown can provide the link destination or image source | ||
at the time of use or can define it elsewhere and use a label for reference. | ||
The reference format is convenient for keeping paragraph text clutter-free | ||
and makes it easy to reuse the same URL in multiple places. | ||
at the time of use or can use a label to reference a definition elsewhere in | ||
the document. The latter reference format is convenient for keeping paragraph | ||
text clutter-free and makes it easy to reuse the same URL in multiple places. | ||
@@ -19,0 +19,0 @@ Because link and image reference definitions are located separately from |
273
doc/Rules.md
@@ -5,4 +5,3 @@ # Rules | ||
as well as examples of documents that break the rule and corrected | ||
versions of the examples. Any rule whose heading is ~~struck through~~ is | ||
deprecated, but still provided for backward-compatibility. | ||
versions of the examples. | ||
@@ -13,5 +12,5 @@ <a name="md001"></a> | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
Aliases: `header-increment`, `heading-increment` | ||
Aliases: `heading-increment` | ||
@@ -50,42 +49,2 @@ This rule is triggered when you skip heading levels in a Markdown document, for | ||
<a name="md002"></a> | ||
## ~~`MD002` - First heading should be a top-level heading~~ | ||
> This rule is deprecated and provided for backward-compatibility | ||
Tags: `headers`, `headings` | ||
Aliases: `first-header-h1`, `first-heading-h1` | ||
Parameters: | ||
- `level`: Heading level (`integer`, default `1`) | ||
> Note: *MD002 has been deprecated and is disabled by default.* | ||
> [MD041/first-line-heading](md041.md) offers an improved implementation. | ||
This rule is intended to ensure document headings start at the top level and | ||
is triggered when the first heading in the document isn't an h1 heading: | ||
```markdown | ||
## This isn't an H1 heading | ||
### Another heading | ||
``` | ||
The first heading in the document should be an h1 heading: | ||
```markdown | ||
# Start with an H1 heading | ||
## Then use an H2 for subsections | ||
``` | ||
Note: The `level` parameter can be used to change the top-level (ex: to h2) in | ||
cases where an h1 is added externally. | ||
Rationale: The top-level heading often acts as the title of a document. More | ||
information: <https://cirosantilli.com/markdown-style-guide#top-level-header>. | ||
<a name="md003"></a> | ||
@@ -95,5 +54,5 @@ | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
Aliases: `header-style`, `heading-style` | ||
Aliases: `heading-style` | ||
@@ -262,51 +221,2 @@ Parameters: | ||
<a name="md006"></a> | ||
## ~~`MD006` - Consider starting bulleted lists at the beginning of the line~~ | ||
> This rule is deprecated and provided for backward-compatibility | ||
Tags: `bullet`, `indentation`, `ul` | ||
Aliases: `ul-start-left` | ||
Fixable: Some violations can be fixed by tooling | ||
This rule is triggered when top-level lists don't start at the beginning of a | ||
line: | ||
```markdown | ||
Some text | ||
* List item | ||
* List item | ||
``` | ||
To fix, ensure that top-level list items are not indented: | ||
```markdown | ||
Some test | ||
* List item | ||
* List item | ||
``` | ||
Note: This rule is triggered for the following scenario because the unordered | ||
sublist is not recognized as such by the parser. Not being nested 3 characters | ||
as required by the outer ordered list, it creates a top-level unordered list | ||
instead. | ||
```markdown | ||
1. List item | ||
- List item | ||
- List item | ||
1. List item | ||
``` | ||
Rationale: Starting lists at the beginning of the line means that nested list | ||
items can all be indented by the same amount when an editor's indent function | ||
or the tab key is used to indent. Starting a list 1 space in means that the | ||
indent of the first nested list is less than the indent of the second level (3 | ||
characters if you use 4 space tabs, or 1 character if you use 2 space tabs). | ||
<a name="md007"></a> | ||
@@ -352,6 +262,5 @@ | ||
The `start_indented` parameter allows the first level of lists to be indented by | ||
the configured number of spaces rather than starting at zero (the inverse of | ||
MD006). The `start_indent` parameter allows the first level of lists to be | ||
indented by a different number of spaces than the rest (ignored when | ||
`start_indented` is not set). | ||
the configured number of spaces rather than starting at zero. The `start_indent` | ||
parameter allows the first level of lists to be indented by a different number | ||
of spaces than the rest (ignored when `start_indented` is not set). | ||
@@ -569,3 +478,2 @@ Rationale: Indenting by 2 spaces allows the content of a nested list to be in | ||
- `code_blocks`: Include code blocks (`boolean`, default `true`) | ||
- `headers`: Include headings (`boolean`, default `true`) | ||
- `heading_line_length`: Number of characters for headings (`integer`, default | ||
@@ -579,4 +487,2 @@ `80`) | ||
> If `headings` is not provided, `headers` (deprecated) will be used. | ||
This rule is triggered when there are lines that are longer than the | ||
@@ -682,3 +588,3 @@ configured `line_length` (default: 80 characters). To fix this, split the line | ||
Tags: `atx`, `headers`, `headings`, `spaces` | ||
Tags: `atx`, `headings`, `spaces` | ||
@@ -713,3 +619,3 @@ Aliases: `no-missing-space-atx` | ||
Tags: `atx`, `headers`, `headings`, `spaces` | ||
Tags: `atx`, `headings`, `spaces` | ||
@@ -745,3 +651,3 @@ Aliases: `no-multiple-space-atx` | ||
Tags: `atx_closed`, `headers`, `headings`, `spaces` | ||
Tags: `atx_closed`, `headings`, `spaces` | ||
@@ -778,3 +684,3 @@ Aliases: `no-missing-space-closed-atx` | ||
Tags: `atx_closed`, `headers`, `headings`, `spaces` | ||
Tags: `atx_closed`, `headings`, `spaces` | ||
@@ -813,5 +719,5 @@ Aliases: `no-multiple-space-closed-atx` | ||
Tags: `blank_lines`, `headers`, `headings` | ||
Tags: `blank_lines`, `headings` | ||
Aliases: `blanks-around-headers`, `blanks-around-headings` | ||
Aliases: `blanks-around-headings` | ||
@@ -869,5 +775,5 @@ Parameters: | ||
Tags: `headers`, `headings`, `spaces` | ||
Tags: `headings`, `spaces` | ||
Aliases: `header-start-left`, `heading-start-left` | ||
Aliases: `heading-start-left` | ||
@@ -892,2 +798,9 @@ Fixable: Some violations can be fixed by tooling | ||
Note that scenarios like block quotes "indent" the start of the line, so the | ||
following is also correct: | ||
```markdown | ||
> # Heading in Block Quote | ||
``` | ||
Rationale: Headings that don't start at the beginning of the line will not be | ||
@@ -900,5 +813,5 @@ parsed as headings, and will instead appear as regular text. | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
Aliases: `no-duplicate-header`, `no-duplicate-heading` | ||
Aliases: `no-duplicate-heading` | ||
@@ -951,3 +864,3 @@ Parameters: | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
@@ -1004,3 +917,3 @@ Aliases: `single-h1`, `single-title` | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
@@ -1543,5 +1456,5 @@ Aliases: `no-trailing-punctuation` | ||
Tags: `emphasis`, `headers`, `headings` | ||
Tags: `emphasis`, `headings` | ||
Aliases: `no-emphasis-as-header`, `no-emphasis-as-heading` | ||
Aliases: `no-emphasis-as-heading` | ||
@@ -1754,3 +1667,3 @@ Parameters: | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
@@ -1842,14 +1755,11 @@ Aliases: `first-line-h1`, `first-line-heading` | ||
Tags: `headers`, `headings` | ||
Tags: `headings` | ||
Aliases: `required-headers`, `required-headings` | ||
Aliases: `required-headings` | ||
Parameters: | ||
- `headers`: List of headings (`string[]`, default `[]`) | ||
- `headings`: List of headings (`string[]`, default `[]`) | ||
- `match_case`: Match case of headings (`boolean`, default `false`) | ||
> If `headings` is not provided, `headers` (deprecated) will be used. | ||
This rule is triggered when the headings in a file do not match the array of | ||
@@ -1979,2 +1889,8 @@ headings passed to the rule. It can be used to enforce a standard heading | ||
Or with HTML as: | ||
```html | ||
<img src="image.jpg" alt="Alternate text" /> | ||
``` | ||
Guidance for writing alternate text is available from the [W3C][w3c], | ||
@@ -2116,3 +2032,3 @@ [Wikipedia][wikipedia], and [other locations][phase2technology]. | ||
## `MD049` - Emphasis style should be consistent | ||
## `MD049` - Emphasis style | ||
@@ -2152,3 +2068,3 @@ Tags: `emphasis` | ||
## `MD050` - Strong style should be consistent | ||
## `MD050` - Strong style | ||
@@ -2308,5 +2224,5 @@ Tags: `emphasis` | ||
Links and images in Markdown can provide the link destination or image source | ||
at the time of use or can define it elsewhere and use a label for reference. | ||
The reference format is convenient for keeping paragraph text clutter-free | ||
and makes it easy to reuse the same URL in multiple places. | ||
at the time of use or can use a label to reference a definition elsewhere in | ||
the document. The latter reference format is convenient for keeping paragraph | ||
text clutter-free and makes it easy to reuse the same URL in multiple places. | ||
@@ -2335,2 +2251,105 @@ Because link and image reference definitions are located separately from | ||
<a name="md054"></a> | ||
## `MD054` - Link and image style | ||
Tags: `images`, `links` | ||
Aliases: `link-image-style` | ||
Parameters: | ||
- `autolink`: Allow autolinks (`boolean`, default `true`) | ||
- `collapsed`: Allow collapsed reference links and images (`boolean`, default | ||
`true`) | ||
- `full`: Allow full reference links and images (`boolean`, default `true`) | ||
- `inline`: Allow inline links and images (`boolean`, default `true`) | ||
- `shortcut`: Allow shortcut reference links and images (`boolean`, default | ||
`true`) | ||
- `url_inline`: Allow URLs as inline links (`boolean`, default `true`) | ||
Fixable: Some violations can be fixed by tooling | ||
Links and images in Markdown can provide the link destination or image source at | ||
the time of use or can use a label to reference a definition elsewhere in the | ||
document. The three reference formats are convenient for keeping paragraph text | ||
clutter-free and make it easy to reuse the same URL in multiple places. | ||
By default, this rule allows all link/image styles. | ||
Setting the `autolink` parameter to `false` disables autolinks: | ||
```markdown | ||
<https://example.com> | ||
``` | ||
Setting the `inline` parameter to `false` disables inline links and images: | ||
```markdown | ||
[link](https://example.com) | ||
![image](https://example.com) | ||
``` | ||
Setting the `full` parameter to `false` disables full reference links and | ||
images: | ||
```markdown | ||
[link][url] | ||
![image][url] | ||
[url]: https://example.com | ||
``` | ||
Setting the `collapsed` parameter to `false` disables collapsed reference links | ||
and images: | ||
```markdown | ||
[url][] | ||
![url][] | ||
[url]: https://example.com | ||
``` | ||
Setting the `shortcut` parameter to `false` disables shortcut reference links | ||
and images: | ||
```markdown | ||
[url] | ||
![url] | ||
[url]: https://example.com | ||
``` | ||
To fix violations of this rule, change the link or image to use an allowed | ||
style. This rule can automatically fix violations when a link or image can be | ||
converted to the `inline` style (preferred) or a link can be converted to the | ||
`autolink` style (which does not support images and must be an absolute URL). | ||
This rule does *not* fix scenarios that require converting a link or image to | ||
the `full`, `collapsed`, or `shortcut` reference styles because that involves | ||
naming the reference and determining where to insert it in the document. | ||
Setting the `url_inline` parameter to `false` prevents the use of inline links | ||
with the same absolute URL text/destination and no title because such links can | ||
be converted to autolinks: | ||
```markdown | ||
[https://example.com](https://example.com) | ||
``` | ||
To fix `url_inline` violations, use the simpler autolink syntax instead: | ||
```markdown | ||
<https://example.com> | ||
``` | ||
Rationale: Consistent formatting makes it easier to understand a document. | ||
Autolinks are concise, but appear as URLs which can be long and confusing. | ||
Inline links and images can include descriptive text, but take up more space in | ||
Markdown form. Reference links and images can be easier to read and manipulate | ||
in Markdown form, but require a separate link reference definition. | ||
<!-- markdownlint-configure-file { | ||
@@ -2337,0 +2356,0 @@ "no-inline-html": { |
@@ -7,13 +7,13 @@ // @ts-check | ||
const { newLineRe } = require("./shared.js"); | ||
const { newLineRe, nextLinesRe } = require("./shared.js"); | ||
module.exports.newLineRe = newLineRe; | ||
module.exports.nextLinesRe = nextLinesRe; | ||
// Regular expression for matching common front matter (YAML and TOML) | ||
module.exports.frontMatterRe = | ||
// eslint-disable-next-line max-len | ||
/((^---\s*$[\s\S]*?^---\s*)|(^\+\+\+\s*$[\s\S]*?^(\+\+\+|\.\.\.)\s*)|(^\{\s*$[\s\S]*?^\}\s*))(\r\n|\r|\n|$)/m; | ||
/((^---\s*$[\s\S]+?^---\s*)|(^\+\+\+\s*$[\s\S]+?^(\+\+\+|\.\.\.)\s*)|(^\{\s*$[\s\S]+?^\}\s*))(\r\n|\r|\n|$)/m; | ||
// Regular expression for matching the start of inline disable/enable comments | ||
const inlineCommentStartRe = | ||
// eslint-disable-next-line max-len | ||
/(<!--\s*markdownlint-(disable|enable|capture|restore|disable-file|enable-file|disable-line|disable-next-line|configure-file))(?:\s|-->)/gi; | ||
@@ -36,3 +36,2 @@ module.exports.inlineCommentStartRe = inlineCommentStartRe; | ||
module.exports.endOfLineHtmlEntityRe = | ||
// eslint-disable-next-line max-len | ||
/&(?:#\d+|#[xX][\da-fA-F]+|[a-zA-Z]{2,31}|blk\d{2}|emsp1[34]|frac\d{2}|sup\d|there4);$/; | ||
@@ -42,3 +41,2 @@ | ||
module.exports.endOfLineGemojiCodeRe = | ||
// eslint-disable-next-line max-len | ||
/:(?:[abmovx]|[-+]1|100|1234|(?:1st|2nd|3rd)_place_medal|8ball|clock\d{1,4}|e-mail|non-potable_water|o2|t-rex|u5272|u5408|u55b6|u6307|u6708|u6709|u6e80|u7121|u7533|u7981|u7a7a|[a-z]{2,15}2?|[a-z]{1,14}(?:_[a-z\d]{1,16})+):$/; | ||
@@ -131,2 +129,12 @@ | ||
/** | ||
* Gets a Regular Expression for matching the specified HTML attribute. | ||
* | ||
* @param {string} name HTML attribute name. | ||
* @returns {RegExp} Regular Expression for matching. | ||
*/ | ||
module.exports.getHtmlAttributeRe = function getHtmlAttributeRe(name) { | ||
return new RegExp(`\\s${name}\\s*=\\s*['"]?([^'"\\s>]*)`, "iu"); | ||
}; | ||
/** | ||
* Returns true iff the input line is blank (contains nothing, whitespace, or | ||
@@ -743,3 +751,15 @@ * comments (unclosed start/end comments allowed)). | ||
} else { | ||
definitions.set(reference, token.startLine - 1); | ||
let destinationString = null; | ||
const parent = | ||
micromark.getTokenParentOfType(token, [ "definition" ]); | ||
if (parent) { | ||
destinationString = micromark.getTokenTextByType( | ||
micromark.filterByPredicate(parent.children), | ||
"definitionDestinationString" | ||
); | ||
} | ||
definitions.set( | ||
reference, | ||
[ token.startLine - 1, destinationString ] | ||
); | ||
} | ||
@@ -746,0 +766,0 @@ } |
{ | ||
"name": "markdownlint-rule-helpers", | ||
"version": "0.22.0", | ||
"version": "0.23.0", | ||
"description": "A collection of markdownlint helper functions for custom rules", | ||
@@ -15,2 +15,3 @@ "main": "./helpers.js", | ||
"bugs": "https://github.com/DavidAnson/markdownlint/issues", | ||
"funding": "https://github.com/sponsors/DavidAnson", | ||
"engines": { | ||
@@ -17,0 +18,0 @@ "node": ">=16" |
@@ -8,1 +8,4 @@ // @ts-check | ||
module.exports.newLineRe = /\r\n?|\n/g; | ||
// Regular expression for matching next lines | ||
module.exports.nextLinesRe = /[\r\n][\s\S]*$/; |
@@ -5,11 +5,11 @@ // @ts-check | ||
module.exports.deprecatedRuleNames = [ "MD002", "MD006" ]; | ||
module.exports.deprecatedRuleNames = []; | ||
module.exports.fixableRuleNames = [ | ||
"MD004", "MD005", "MD006", "MD007", "MD009", "MD010", | ||
"MD011", "MD012", "MD014", "MD018", "MD019", "MD020", | ||
"MD021", "MD022", "MD023", "MD026", "MD027", "MD030", | ||
"MD031", "MD032", "MD034", "MD037", "MD038", "MD039", | ||
"MD044", "MD047", "MD049", "MD050", "MD051", "MD053" | ||
"MD004", "MD005", "MD007", "MD009", "MD010", "MD011", | ||
"MD012", "MD014", "MD018", "MD019", "MD020", "MD021", | ||
"MD022", "MD023", "MD026", "MD027", "MD030", "MD031", | ||
"MD032", "MD034", "MD037", "MD038", "MD039", "MD044", | ||
"MD047", "MD049", "MD050", "MD051", "MD053", "MD054" | ||
]; | ||
module.exports.homepage = "https://github.com/DavidAnson/markdownlint"; | ||
module.exports.version = "0.31.1"; | ||
module.exports.version = "0.32.0"; |
@@ -361,8 +361,6 @@ export = markdownlint; | ||
/** | ||
* Configuration object for linting rules. For a detailed schema, see | ||
* Configuration object for linting rules. For the JSON schema, see | ||
* {@link ../schema/markdownlint-config-schema.json}. | ||
*/ | ||
type Configuration = { | ||
[x: string]: RuleConfiguration; | ||
}; | ||
type Configuration = import("./configuration").Configuration; | ||
/** | ||
@@ -369,0 +367,0 @@ * Rule configuration. |
@@ -9,3 +9,3 @@ // @ts-check | ||
const micromark = require("../helpers/micromark.cjs"); | ||
const { deprecatedRuleNames } = require("./constants"); | ||
// const { deprecatedRuleNames } = require("./constants"); | ||
const rules = require("./rules"); | ||
@@ -16,3 +16,3 @@ const helpers = require("../helpers"); | ||
// @ts-ignore | ||
// eslint-disable-next-line camelcase, max-len, no-inline-comments, no-undef | ||
// eslint-disable-next-line camelcase, no-inline-comments, no-undef | ||
const dynamicRequire = (typeof __non_webpack_require__ === "undefined") ? require : /* c8 ignore next */ __non_webpack_require__; | ||
@@ -322,2 +322,3 @@ // Capture native require implementation for dynamic loading of modules | ||
const ruleDefault = (defaultKey.length === 0) || !!config[defaultKey[0]]; | ||
/** @type {Configuration} */ | ||
const effectiveConfig = {}; | ||
@@ -328,5 +329,5 @@ for (const rule of ruleList) { | ||
} | ||
for (const ruleName of deprecatedRuleNames) { | ||
effectiveConfig[ruleName] = false; | ||
} | ||
// for (const ruleName of deprecatedRuleNames) { | ||
// effectiveConfig[ruleName] = false; | ||
// } | ||
for (const key of Object.keys(config)) { | ||
@@ -611,3 +612,3 @@ let value = config[key]; | ||
throw new Error( | ||
"Property '" + property + "' of onError parameter is incorrect."); | ||
`Value of '${property}' passed to onError by '${ruleName}' is incorrect for '${name}'.`); | ||
} | ||
@@ -1444,6 +1445,6 @@ // eslint-disable-next-line jsdoc/require-jsdoc | ||
/** | ||
* Configuration object for linting rules. For a detailed schema, see | ||
* Configuration object for linting rules. For the JSON schema, see | ||
* {@link ../schema/markdownlint-config-schema.json}. | ||
* | ||
* @typedef {Object.<string, RuleConfiguration>} Configuration | ||
* @typedef {import("./configuration").Configuration} Configuration | ||
*/ | ||
@@ -1450,0 +1451,0 @@ |
@@ -8,5 +8,5 @@ // @ts-check | ||
module.exports = { | ||
"names": [ "MD001", "heading-increment", "header-increment" ], | ||
"names": [ "MD001", "heading-increment" ], | ||
"description": "Heading levels should only increment by one level at a time", | ||
"tags": [ "headings", "headers" ], | ||
"tags": [ "headings" ], | ||
"function": function MD001(params, onError) { | ||
@@ -13,0 +13,0 @@ let prevLevel = 0; |
@@ -9,5 +9,5 @@ // @ts-check | ||
module.exports = { | ||
"names": [ "MD003", "heading-style", "header-style" ], | ||
"names": [ "MD003", "heading-style" ], | ||
"description": "Heading style", | ||
"tags": [ "headings", "headers" ], | ||
"tags": [ "headings" ], | ||
"function": function MD003(params, onError) { | ||
@@ -14,0 +14,0 @@ let style = String(params.config.style || "consistent"); |
@@ -5,5 +5,4 @@ // @ts-check | ||
const { addError, addErrorDetailIf, indentFor, listItemMarkerRe, | ||
orderedListItemMarkerRe, rangeFromRegExp } = require("../helpers"); | ||
const { flattenedLists } = require("./cache"); | ||
const { addError, addErrorDetailIf } = require("../helpers"); | ||
const { filterByTypes, inHtmlFlow } = require("../helpers/micromark.cjs"); | ||
@@ -15,12 +14,18 @@ module.exports = { | ||
"function": function MD005(params, onError) { | ||
for (const list of flattenedLists()) { | ||
const expectedIndent = list.indent; | ||
const lists = filterByTypes( | ||
params.parsers.micromark.tokens, | ||
[ "listOrdered", "listUnordered" ] | ||
).filter((list) => !inHtmlFlow(list)); | ||
for (const list of lists) { | ||
const expectedIndent = list.startColumn - 1; | ||
let expectedEnd = 0; | ||
let actualEnd = -1; | ||
let endMatching = false; | ||
for (const item of list.items) { | ||
const { line, lineNumber } = item; | ||
const actualIndent = indentFor(item); | ||
let match = null; | ||
if (list.unordered) { | ||
const listItemPrefixes = | ||
list.children.filter((token) => (token.type === "listItemPrefix")); | ||
for (const listItemPrefix of listItemPrefixes) { | ||
const lineNumber = listItemPrefix.startLine; | ||
const actualIndent = listItemPrefix.startColumn - 1; | ||
const markerLength = listItemPrefix.text.trim().length; | ||
const range = [ 1, listItemPrefix.startColumn + markerLength ]; | ||
if (list.type === "listUnordered") { | ||
addErrorDetailIf( | ||
@@ -33,9 +38,8 @@ onError, | ||
null, | ||
rangeFromRegExp(line, listItemMarkerRe) | ||
range | ||
// No fixInfo; MD007 handles this scenario better | ||
); | ||
} else if ((match = orderedListItemMarkerRe.exec(line))) { | ||
actualEnd = match[0].length; | ||
} else { | ||
const actualEnd = range[1] - 1; | ||
expectedEnd = expectedEnd || actualEnd; | ||
const markerLength = match[1].length + 1; | ||
if ((expectedIndent !== actualIndent) || endMatching) { | ||
@@ -58,4 +62,4 @@ if (expectedEnd === actualEnd) { | ||
detail, | ||
null, | ||
rangeFromRegExp(line, listItemMarkerRe), | ||
undefined, | ||
range, | ||
{ | ||
@@ -62,0 +66,0 @@ "editColumn": Math.min(actual, expected) + 1, |
@@ -5,6 +5,15 @@ // @ts-check | ||
const { addErrorDetailIf, indentFor, listItemMarkerRe } = | ||
require("../helpers"); | ||
const { flattenedLists } = require("./cache"); | ||
const { addErrorDetailIf } = require("../helpers"); | ||
const { filterByTypes, getTokenParentOfType, inHtmlFlow } = | ||
require("../helpers/micromark.cjs"); | ||
/** | ||
* @typedef {import("../helpers/micromark.cjs").Token} Token | ||
*/ | ||
const unorderedListTypes = | ||
[ "blockQuotePrefix", "listItemPrefix", "listUnordered" ]; | ||
const unorderedParentTypes = | ||
[ "blockQuote", "listOrdered", "listUnordered" ]; | ||
module.exports = { | ||
@@ -18,30 +27,58 @@ "names": [ "MD007", "ul-indent" ], | ||
const startIndent = Number(params.config.start_indent || indent); | ||
for (const list of flattenedLists()) { | ||
if (list.unordered && list.parentsUnordered) { | ||
for (const item of list.items) { | ||
const { lineNumber, line } = item; | ||
const unorderedListNesting = new Map(); | ||
let lastBlockQuotePrefix = null; | ||
const tokens = filterByTypes( | ||
params.parsers.micromark.tokens, | ||
unorderedListTypes | ||
); | ||
for (const token of tokens) { | ||
const { parent, startColumn, startLine, type } = token; | ||
if (type === "blockQuotePrefix") { | ||
lastBlockQuotePrefix = token; | ||
} else if (type === "listUnordered") { | ||
let nesting = 0; | ||
/** @type {Token | null} */ | ||
let current = token; | ||
while ( | ||
(current = getTokenParentOfType(current, unorderedParentTypes)) | ||
) { | ||
if (current.type === "listUnordered") { | ||
nesting++; | ||
continue; | ||
} else if (current.type === "listOrdered") { | ||
nesting = -1; | ||
} | ||
break; | ||
} | ||
if (nesting >= 0) { | ||
unorderedListNesting.set(token, nesting); | ||
} | ||
} else if (!inHtmlFlow(token)) { | ||
// listItemPrefix | ||
const nesting = unorderedListNesting.get(parent); | ||
if (nesting !== undefined) { | ||
// listItemPrefix for listUnordered | ||
const expectedIndent = | ||
(startIndented ? startIndent : 0) + | ||
(list.nesting * indent); | ||
const actualIndent = indentFor(item); | ||
let range = null; | ||
let editColumn = 1; | ||
const match = line.match(listItemMarkerRe); | ||
if (match) { | ||
range = [ 1, match[0].length ]; | ||
editColumn += match[1].length - actualIndent; | ||
} | ||
(startIndented ? startIndent : 0) + (nesting * indent); | ||
const blockQuoteAdjustment = | ||
(lastBlockQuotePrefix?.endLine === startLine) ? | ||
(lastBlockQuotePrefix.endColumn - 1) : | ||
0; | ||
const actualIndent = startColumn - 1 - blockQuoteAdjustment; | ||
const range = [ 1, startColumn + 1 ]; | ||
const fixInfo = { | ||
"editColumn": startColumn - actualIndent, | ||
"deleteCount": Math.max(actualIndent - expectedIndent, 0), | ||
"insertText": "".padEnd(Math.max(expectedIndent - actualIndent, 0)) | ||
}; | ||
addErrorDetailIf( | ||
onError, | ||
lineNumber, | ||
startLine, | ||
expectedIndent, | ||
actualIndent, | ||
null, | ||
null, | ||
undefined, | ||
undefined, | ||
range, | ||
{ | ||
editColumn, | ||
"deleteCount": actualIndent, | ||
"insertText": "".padEnd(expectedIndent) | ||
}); | ||
fixInfo | ||
); | ||
} | ||
@@ -48,0 +85,0 @@ } |
@@ -49,6 +49,3 @@ // @ts-check | ||
const includeTables = (tables === undefined) ? true : !!tables; | ||
let headings = params.config.headings; | ||
if (headings === undefined) { | ||
headings = params.config.headers; | ||
} | ||
const headings = params.config.headings; | ||
const includeHeadings = (headings === undefined) ? true : !!headings; | ||
@@ -55,0 +52,0 @@ const headingLineNumbers = []; |
@@ -11,3 +11,3 @@ // @ts-check | ||
"description": "No space after hash on atx style heading", | ||
"tags": [ "headings", "headers", "atx", "spaces" ], | ||
"tags": [ "headings", "atx", "spaces" ], | ||
"function": function MD018(params, onError) { | ||
@@ -14,0 +14,0 @@ forEachLine(lineMetadata(), (line, lineIndex, inCode) => { |
@@ -11,3 +11,3 @@ // @ts-check | ||
"description": "Multiple spaces after hash on atx style heading", | ||
"tags": [ "headings", "headers", "atx", "spaces" ], | ||
"tags": [ "headings", "atx", "spaces" ], | ||
"function": function MD019(params, onError) { | ||
@@ -14,0 +14,0 @@ filterTokens(params, "heading_open", (token) => { |
@@ -11,3 +11,3 @@ // @ts-check | ||
"description": "No space inside hashes on closed atx style heading", | ||
"tags": [ "headings", "headers", "atx_closed", "spaces" ], | ||
"tags": [ "headings", "atx_closed", "spaces" ], | ||
"function": function MD020(params, onError) { | ||
@@ -14,0 +14,0 @@ forEachLine(lineMetadata(), (line, lineIndex, inCode) => { |
@@ -13,3 +13,3 @@ // @ts-check | ||
"description": "Multiple spaces inside hashes on closed atx style heading", | ||
"tags": [ "headings", "headers", "atx_closed", "spaces" ], | ||
"tags": [ "headings", "atx_closed", "spaces" ], | ||
"function": function MD021(params, onError) { | ||
@@ -16,0 +16,0 @@ filterTokens(params, "heading_open", (token) => { |
@@ -7,3 +7,3 @@ // @ts-check | ||
require("../helpers"); | ||
const { filterByTypes, getHeadingLevel } = | ||
const { filterByTypes, getHeadingLevel, inHtmlFlow } = | ||
require("../helpers/micromark.cjs"); | ||
@@ -36,5 +36,5 @@ | ||
module.exports = { | ||
"names": [ "MD022", "blanks-around-headings", "blanks-around-headers" ], | ||
"names": [ "MD022", "blanks-around-headings" ], | ||
"description": "Headings should be surrounded by blank lines", | ||
"tags": [ "headings", "headers", "blank_lines" ], | ||
"tags": [ "headings", "blank_lines" ], | ||
"function": function MD022(params, onError) { | ||
@@ -47,3 +47,3 @@ const getLinesAbove = getLinesFunction(params.config.lines_above); | ||
[ "atxHeading", "setextHeading" ] | ||
); | ||
).filter((heading) => !inHtmlFlow(heading)); | ||
for (const heading of headings) { | ||
@@ -50,0 +50,0 @@ const { startLine, endLine } = heading; |
@@ -10,5 +10,5 @@ // @ts-check | ||
module.exports = { | ||
"names": [ "MD023", "heading-start-left", "header-start-left" ], | ||
"names": [ "MD023", "heading-start-left" ], | ||
"description": "Headings must start at the beginning of the line", | ||
"tags": [ "headings", "headers", "spaces" ], | ||
"tags": [ "headings", "spaces" ], | ||
"function": function MD023(params, onError) { | ||
@@ -15,0 +15,0 @@ filterTokens(params, "heading_open", function forToken(token) { |
@@ -8,5 +8,5 @@ // @ts-check | ||
module.exports = { | ||
"names": [ "MD024", "no-duplicate-heading", "no-duplicate-header" ], | ||
"names": [ "MD024", "no-duplicate-heading" ], | ||
"description": "Multiple headings with the same content", | ||
"tags": [ "headings", "headers" ], | ||
"tags": [ "headings" ], | ||
"function": function MD024(params, onError) { | ||
@@ -13,0 +13,0 @@ const siblingsOnly = !!params.config.siblings_only || |
@@ -11,3 +11,3 @@ // @ts-check | ||
"description": "Multiple top-level headings in the same document", | ||
"tags": [ "headings", "headers" ], | ||
"tags": [ "headings" ], | ||
"function": function MD025(params, onError) { | ||
@@ -14,0 +14,0 @@ const level = Number(params.config.level || 1); |
@@ -13,3 +13,3 @@ // @ts-check | ||
"description": "Trailing punctuation in heading", | ||
"tags": [ "headings", "headers" ], | ||
"tags": [ "headings" ], | ||
"function": function MD026(params, onError) { | ||
@@ -16,0 +16,0 @@ let punctuation = params.config.punctuation; |
@@ -6,3 +6,3 @@ // @ts-check | ||
const { addErrorDetailIf } = require("../helpers"); | ||
const { flattenedLists } = require("./cache"); | ||
const { filterByTypes } = require("../helpers/micromark.cjs"); | ||
@@ -18,24 +18,35 @@ module.exports = { | ||
const olMulti = Number(params.config.ol_multi || 1); | ||
for (const list of flattenedLists()) { | ||
const lineCount = list.lastLineIndex - list.open.map[0]; | ||
const allSingle = lineCount === list.items.length; | ||
const expectedSpaces = list.unordered ? | ||
(allSingle ? ulSingle : ulMulti) : | ||
(allSingle ? olSingle : olMulti); | ||
for (const item of list.items) { | ||
const { line, lineNumber } = item; | ||
const match = /^[\s>]*\S+(\s*)/.exec(line); | ||
const [ { "length": matchLength }, { "length": actualSpaces } ] = match; | ||
if (matchLength < line.length) { | ||
let fixInfo = null; | ||
if (expectedSpaces !== actualSpaces) { | ||
fixInfo = { | ||
"editColumn": matchLength - actualSpaces + 1, | ||
"deleteCount": actualSpaces, | ||
"insertText": "".padEnd(expectedSpaces) | ||
}; | ||
} | ||
const lists = filterByTypes( | ||
params.parsers.micromark.tokens, | ||
[ "listOrdered", "listUnordered" ] | ||
); | ||
for (const list of lists) { | ||
const ordered = (list.type === "listOrdered"); | ||
const listItemPrefixes = | ||
list.children.filter((token) => (token.type === "listItemPrefix")); | ||
const allSingleLine = | ||
(list.endLine - list.startLine + 1) === listItemPrefixes.length; | ||
const expectedSpaces = ordered ? | ||
(allSingleLine ? olSingle : olMulti) : | ||
(allSingleLine ? ulSingle : ulMulti); | ||
for (const listItemPrefix of listItemPrefixes) { | ||
const range = [ | ||
listItemPrefix.startColumn, | ||
listItemPrefix.endColumn - listItemPrefix.startColumn | ||
]; | ||
const listItemPrefixWhitespaces = listItemPrefix.children.filter( | ||
(token) => (token.type === "listItemPrefixWhitespace") | ||
); | ||
for (const listItemPrefixWhitespace of listItemPrefixWhitespaces) { | ||
const { endColumn, startColumn, startLine } = | ||
listItemPrefixWhitespace; | ||
const actualSpaces = endColumn - startColumn; | ||
const fixInfo = { | ||
"editColumn": startColumn, | ||
"deleteCount": actualSpaces, | ||
"insertText": "".padEnd(expectedSpaces) | ||
}; | ||
addErrorDetailIf( | ||
onError, | ||
lineNumber, | ||
startLine, | ||
expectedSpaces, | ||
@@ -45,3 +56,3 @@ actualSpaces, | ||
null, | ||
[ 1, matchLength ], | ||
range, | ||
fixInfo | ||
@@ -48,0 +59,0 @@ ); |
@@ -63,6 +63,3 @@ // @ts-check | ||
let endLine = list.endLine; | ||
const flattenedChildren = filterByPredicate( | ||
list.children, | ||
() => true | ||
); | ||
const flattenedChildren = filterByPredicate(list.children); | ||
for (const child of flattenedChildren.reverse()) { | ||
@@ -69,0 +66,0 @@ if (!nonContentTokens.has(child.type)) { |
@@ -5,8 +5,6 @@ // @ts-check | ||
const { addError } = require("../helpers"); | ||
const { addError, nextLinesRe } = require("../helpers"); | ||
const { filterByTypes, getHtmlTagInfo } = | ||
require("../helpers/micromark.cjs"); | ||
const nextLinesRe = /[\r\n][\s\S]*$/; | ||
module.exports = { | ||
@@ -13,0 +11,0 @@ "names": [ "MD033", "no-inline-html" ], |
@@ -6,3 +6,3 @@ // @ts-check | ||
const { addErrorContext } = require("../helpers"); | ||
const { filterByPredicate, filterByTypes, getHtmlTagInfo, parse } = | ||
const { filterByPredicate, filterByTypes, getHtmlTagInfo, inHtmlFlow, parse } = | ||
require("../helpers/micromark.cjs"); | ||
@@ -15,31 +15,37 @@ | ||
"function": function MD034(params, onError) { | ||
const literalAutolinks = (tokens) => { | ||
const flattened = filterByPredicate(tokens, () => true); | ||
const result = []; | ||
for (let i = 0; i < flattened.length; i++) { | ||
const current = flattened[i]; | ||
const openTagInfo = getHtmlTagInfo(current); | ||
if (openTagInfo && !openTagInfo.close) { | ||
let count = 1; | ||
for (let j = i + 1; j < flattened.length; j++) { | ||
const candidate = flattened[j]; | ||
const closeTagInfo = getHtmlTagInfo(candidate); | ||
if (closeTagInfo && (openTagInfo.name === closeTagInfo.name)) { | ||
if (closeTagInfo.close) { | ||
count--; | ||
if (count === 0) { | ||
i = j; | ||
break; | ||
const literalAutolinks = (tokens) => ( | ||
filterByPredicate( | ||
tokens, | ||
(token) => (token.type === "literalAutolink") && !inHtmlFlow(token), | ||
(token) => { | ||
const { children } = token; | ||
const result = []; | ||
for (let i = 0; i < children.length; i++) { | ||
const current = children[i]; | ||
const openTagInfo = getHtmlTagInfo(current); | ||
if (openTagInfo && !openTagInfo.close) { | ||
let count = 1; | ||
for (let j = i + 1; j < children.length; j++) { | ||
const candidate = children[j]; | ||
const closeTagInfo = getHtmlTagInfo(candidate); | ||
if (closeTagInfo && (openTagInfo.name === closeTagInfo.name)) { | ||
if (closeTagInfo.close) { | ||
count--; | ||
if (count === 0) { | ||
i = j; | ||
break; | ||
} | ||
} else { | ||
count++; | ||
} | ||
} | ||
} else { | ||
count++; | ||
} | ||
} else { | ||
result.push(current); | ||
} | ||
} | ||
} else { | ||
result.push(current); | ||
return result; | ||
} | ||
} | ||
return result.filter((token) => token.type === "literalAutolink"); | ||
}; | ||
) | ||
); | ||
const autoLinks = filterByTypes( | ||
@@ -46,0 +52,0 @@ params.parsers.micromark.tokens, |
@@ -8,5 +8,5 @@ // @ts-check | ||
module.exports = { | ||
"names": [ "MD036", "no-emphasis-as-heading", "no-emphasis-as-header" ], | ||
"names": [ "MD036", "no-emphasis-as-heading" ], | ||
"description": "Emphasis used instead of a heading", | ||
"tags": [ "headings", "headers", "emphasis" ], | ||
"tags": [ "headings", "emphasis" ], | ||
"function": function MD036(params, onError) { | ||
@@ -13,0 +13,0 @@ let punctuation = params.config.punctuation; |
@@ -6,3 +6,3 @@ // @ts-check | ||
const { addError } = require("../helpers"); | ||
const { filterByPredicate } = require("../helpers/micromark.cjs"); | ||
const { filterByPredicate, inHtmlFlow } = require("../helpers/micromark.cjs"); | ||
@@ -35,3 +35,3 @@ module.exports = { | ||
const emphasisTokens = emphasisTokensByMarker.get(text); | ||
if (emphasisTokens) { | ||
if (emphasisTokens && !inHtmlFlow(child)) { | ||
emphasisTokens.push(child); | ||
@@ -38,0 +38,0 @@ } |
@@ -6,3 +6,4 @@ // @ts-check | ||
const { addErrorContext } = require("../helpers"); | ||
const { filterByTypes, tokenIfType } = require("../helpers/micromark.cjs"); | ||
const { filterByTypes, inHtmlFlow, tokenIfType } = | ||
require("../helpers/micromark.cjs"); | ||
@@ -27,6 +28,7 @@ const leftSpaceRe = /^\s(?:[^`]|$)/; | ||
"function": function MD038(params, onError) { | ||
const codeTextTokens = | ||
filterByTypes(params.parsers.micromark.tokens, [ "codeText" ]); | ||
for (const token of codeTextTokens) { | ||
const { children } = token; | ||
const codeTexts = | ||
filterByTypes(params.parsers.micromark.tokens, [ "codeText" ]) | ||
.filter((codeText) => !inHtmlFlow(codeText)); | ||
for (const codeText of codeTexts) { | ||
const { children } = codeText; | ||
const first = 0; | ||
@@ -33,0 +35,0 @@ const last = children.length - 1; |
@@ -10,3 +10,3 @@ // @ts-check | ||
"description": "First line in a file should be a top-level heading", | ||
"tags": [ "headings", "headers" ], | ||
"tags": [ "headings" ], | ||
"function": function MD041(params, onError) { | ||
@@ -13,0 +13,0 @@ const level = Number(params.config.level || 1); |
@@ -9,7 +9,7 @@ // @ts-check | ||
module.exports = { | ||
"names": [ "MD043", "required-headings", "required-headers" ], | ||
"names": [ "MD043", "required-headings" ], | ||
"description": "Required heading structure", | ||
"tags": [ "headings", "headers" ], | ||
"tags": [ "headings" ], | ||
"function": function MD043(params, onError) { | ||
const requiredHeadings = params.config.headings || params.config.headers; | ||
const requiredHeadings = params.config.headings; | ||
if (!Array.isArray(requiredHeadings)) { | ||
@@ -16,0 +16,0 @@ // Nothing to check; avoid doing any work |
@@ -5,5 +5,7 @@ // @ts-check | ||
const { addError } = require("../helpers"); | ||
const { filterByTypes } = require("../helpers/micromark.cjs"); | ||
const { addError, getHtmlAttributeRe, nextLinesRe } = require("../helpers"); | ||
const { filterByTypes, getHtmlTagInfo } = require("../helpers/micromark.cjs"); | ||
const altRe = getHtmlAttributeRe("alt"); | ||
module.exports = { | ||
@@ -14,3 +16,6 @@ "names": [ "MD045", "no-alt-text" ], | ||
"function": function MD045(params, onError) { | ||
const images = filterByTypes(params.parsers.micromark.tokens, [ "image" ]); | ||
const { tokens } = params.parsers.micromark; | ||
// Process Markdown images | ||
const images = filterByTypes(tokens, [ "image" ]); | ||
for (const image of images) { | ||
@@ -31,3 +36,28 @@ const labelTexts = filterByTypes(image.children, [ "labelText" ]); | ||
} | ||
// Process HTML images | ||
const htmlTexts = filterByTypes(tokens, [ "htmlText" ]); | ||
for (const htmlText of htmlTexts) { | ||
const { startColumn, startLine, text } = htmlText; | ||
const htmlTagInfo = getHtmlTagInfo(htmlText); | ||
if ( | ||
htmlTagInfo && | ||
!htmlTagInfo.close && | ||
(htmlTagInfo.name.toLowerCase() === "img") && | ||
!altRe.test(text) | ||
) { | ||
const range = [ | ||
startColumn, | ||
text.replace(nextLinesRe, "").length | ||
]; | ||
addError( | ||
onError, | ||
startLine, | ||
undefined, | ||
undefined, | ||
range | ||
); | ||
} | ||
} | ||
} | ||
}; |
@@ -61,3 +61,3 @@ // @ts-check | ||
"names": [ "MD049", "emphasis-style" ], | ||
"description": "Emphasis style should be consistent", | ||
"description": "Emphasis style", | ||
"tags": [ "emphasis" ], | ||
@@ -77,3 +77,3 @@ "function": function MD049(params, onError) { | ||
"names": [ "MD050", "strong-style" ], | ||
"description": "Strong style should be consistent", | ||
"description": "Strong style", | ||
"tags": [ "emphasis" ], | ||
@@ -80,0 +80,0 @@ "function": function MD050(params, onError) { |
@@ -5,3 +5,4 @@ // @ts-check | ||
const { addError, addErrorDetailIf } = require("../helpers"); | ||
const { addError, addErrorDetailIf, getHtmlAttributeRe } = | ||
require("../helpers"); | ||
const { filterByPredicate, filterByTypes, getHtmlTagInfo } = | ||
@@ -11,4 +12,4 @@ require("../helpers/micromark.cjs"); | ||
// Regular expression for identifying HTML anchor names | ||
const idRe = /\sid\s*=\s*['"]?([^'"\s>]+)/iu; | ||
const nameRe = /\sname\s*=\s*['"]?([^'"\s>]+)/iu; | ||
const idRe = getHtmlAttributeRe("id"); | ||
const nameRe = getHtmlAttributeRe("name"); | ||
const anchorRe = /\{(#[a-z\d]+(?:[-_][a-z\d]+)*)\}/gu; | ||
@@ -18,3 +19,5 @@ | ||
const childrenExclude = new Set([ "image", "reference", "resource" ]); | ||
const tokensInclude = new Set([ "codeTextData", "data" ]); | ||
const tokensInclude = new Set( | ||
[ "characterEscapeValue", "codeTextData", "data" ] | ||
); | ||
@@ -45,3 +48,2 @@ /** | ||
// RegExp source with Ruby's \p{Word} expanded into its General Categories | ||
// eslint-disable-next-line max-len | ||
// https://github.com/gjtorikian/html-pipeline/blob/main/lib/html/pipeline/toc_filter.rb | ||
@@ -106,3 +108,3 @@ // https://ruby-doc.org/core-3.0.2/Regexp.html | ||
(htmlTagInfo.name.toLowerCase() === "a" && nameRe.exec(token.text)); | ||
if (anchorMatch) { | ||
if (anchorMatch && anchorMatch.length > 0) { | ||
fragments.set(`#${anchorMatch[1]}`, 0); | ||
@@ -109,0 +111,0 @@ } |
@@ -26,3 +26,3 @@ // @ts-check | ||
for (const definition of definitions.entries()) { | ||
const [ label, lineIndex ] = definition; | ||
const [ label, [ lineIndex ] ] = definition; | ||
if ( | ||
@@ -29,0 +29,0 @@ !ignored.has(label) && |
@@ -9,7 +9,5 @@ // @ts-check | ||
require("./md001"), | ||
require("./md002"), | ||
require("./md003"), | ||
require("./md004"), | ||
require("./md005"), | ||
require("./md006"), | ||
require("./md007"), | ||
@@ -56,3 +54,7 @@ require("./md009"), | ||
require("./md052"), | ||
require("./md053") | ||
require("./md053"), | ||
require("./md054") | ||
// md055: See https://github.com/markdownlint/markdownlint | ||
// md056: See https://github.com/markdownlint/markdownlint | ||
// md057: See https://github.com/markdownlint/markdownlint | ||
]; | ||
@@ -59,0 +61,0 @@ for (const rule of rules) { |
{ | ||
"name": "markdownlint", | ||
"version": "0.31.1", | ||
"version": "0.32.0", | ||
"description": "A Node.js style checker and lint tool for Markdown/CommonMark files.", | ||
@@ -24,2 +24,3 @@ "type": "commonjs", | ||
"bugs": "https://github.com/DavidAnson/markdownlint/issues", | ||
"funding": "https://github.com/sponsors/DavidAnson", | ||
"scripts": { | ||
@@ -29,3 +30,3 @@ "build-config": "npm run build-config-schema && npm run build-config-example", | ||
"build-config-schema": "node schema/build-config-schema.js", | ||
"build-declaration": "tsc --allowJs --declaration --emitDeclarationOnly --module commonjs --resolveJsonModule --target es2015 lib/markdownlint.js && node scripts delete 'lib/{c,md,r}*.d.ts' 'micromark/*.d.cts' 'helpers/*.d.{cts,ts}'", | ||
"build-declaration": "tsc --allowJs --declaration --emitDeclarationOnly --module commonjs --resolveJsonModule --target es2015 lib/markdownlint.js && node scripts delete 'lib/{cache,constants,md,r}*.d.ts' 'micromark/*.d.cts' 'helpers/*.d.{cts,ts}'", | ||
"build-demo": "node scripts copy node_modules/markdown-it/dist/markdown-it.min.js demo/markdown-it.min.js && node scripts copy node_modules/markdownlint-micromark/micromark-browser.js demo/micromark-browser.js && node scripts copy node_modules/markdownlint-micromark/micromark-html-browser.js demo/micromark-html-browser.js && cd demo && webpack --no-stats", | ||
@@ -66,11 +67,12 @@ "build-docs": "node doc-build/build-rules.mjs", | ||
"engines": { | ||
"node": ">=16" | ||
"node": ">=18" | ||
}, | ||
"dependencies": { | ||
"markdown-it": "13.0.1", | ||
"markdown-it": "13.0.2", | ||
"markdownlint-micromark": "0.1.7" | ||
}, | ||
"devDependencies": { | ||
"@babel/core": "7.22.19", | ||
"@babel/preset-env": "7.22.15", | ||
"@babel/core": "7.23.3", | ||
"@babel/preset-env": "7.23.3", | ||
"@hyperjump/json-schema": "1.6.5", | ||
"ava": "5.3.1", | ||
@@ -80,11 +82,12 @@ "babel-loader": "9.1.3", | ||
"character-entities": "2.0.2", | ||
"eslint": "8.49.0", | ||
"eslint": "8.53.0", | ||
"eslint-plugin-es": "4.1.0", | ||
"eslint-plugin-jsdoc": "46.8.0", | ||
"eslint-plugin-n": "16.1.0", | ||
"eslint-plugin-regexp": "1.15.0", | ||
"eslint-plugin-unicorn": "48.0.1", | ||
"eslint-plugin-jsdoc": "46.9.0", | ||
"eslint-plugin-n": "16.3.1", | ||
"eslint-plugin-regexp": "2.1.1", | ||
"eslint-plugin-unicorn": "49.0.0", | ||
"gemoji": "8.1.0", | ||
"globby": "13.2.2", | ||
"globby": "14.0.0", | ||
"js-yaml": "4.1.0", | ||
"json-schema-to-typescript": "13.1.1", | ||
"markdown-it-for-inline": "0.1.1", | ||
@@ -98,7 +101,6 @@ "markdown-it-sub": "1.0.0", | ||
"toml": "3.0.0", | ||
"tv4": "1.3.0", | ||
"typescript": "5.2.2", | ||
"webpack": "5.88.2", | ||
"webpack": "5.89.0", | ||
"webpack-cli": "5.1.4", | ||
"yaml": "2.3.2" | ||
"yaml": "2.3.4" | ||
}, | ||
@@ -105,0 +107,0 @@ "keywords": [ |
@@ -70,3 +70,3 @@ # markdownlint | ||
[sublimelinter]: https://packagecontrol.io/packages/SublimeLinter-contrib-markdownlint | ||
[super-linter]: https://github.com/github/super-linter | ||
[super-linter]: https://github.com/super-linter/super-linter | ||
[vscode-markdownlint]: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint | ||
@@ -90,8 +90,6 @@ | ||
- **[MD001](doc/md001.md)** *heading-increment/header-increment* - Heading levels should only increment by one level at a time | ||
- ~~**[MD002](doc/md002.md)** *first-heading-h1/first-header-h1* - First heading should be a top-level heading~~ | ||
- **[MD003](doc/md003.md)** *heading-style/header-style* - Heading style | ||
- **[MD001](doc/md001.md)** *heading-increment* - Heading levels should only increment by one level at a time | ||
- **[MD003](doc/md003.md)** *heading-style* - Heading style | ||
- **[MD004](doc/md004.md)** *ul-style* - Unordered list style | ||
- **[MD005](doc/md005.md)** *list-indent* - Inconsistent indentation for list items at the same level | ||
- ~~**[MD006](doc/md006.md)** *ul-start-left* - Consider starting bulleted lists at the beginning of the line~~ | ||
- **[MD007](doc/md007.md)** *ul-indent* - Unordered list indentation | ||
@@ -108,5 +106,5 @@ - **[MD009](doc/md009.md)** *no-trailing-spaces* - Trailing spaces | ||
- **[MD021](doc/md021.md)** *no-multiple-space-closed-atx* - Multiple spaces inside hashes on closed atx style heading | ||
- **[MD022](doc/md022.md)** *blanks-around-headings/blanks-around-headers* - Headings should be surrounded by blank lines | ||
- **[MD023](doc/md023.md)** *heading-start-left/header-start-left* - Headings must start at the beginning of the line | ||
- **[MD024](doc/md024.md)** *no-duplicate-heading/no-duplicate-header* - Multiple headings with the same content | ||
- **[MD022](doc/md022.md)** *blanks-around-headings* - Headings should be surrounded by blank lines | ||
- **[MD023](doc/md023.md)** *heading-start-left* - Headings must start at the beginning of the line | ||
- **[MD024](doc/md024.md)** *no-duplicate-heading* - Multiple headings with the same content | ||
- **[MD025](doc/md025.md)** *single-title/single-h1* - Multiple top-level headings in the same document | ||
@@ -123,3 +121,3 @@ - **[MD026](doc/md026.md)** *no-trailing-punctuation* - Trailing punctuation in heading | ||
- **[MD035](doc/md035.md)** *hr-style* - Horizontal rule style | ||
- **[MD036](doc/md036.md)** *no-emphasis-as-heading/no-emphasis-as-header* - Emphasis used instead of a heading | ||
- **[MD036](doc/md036.md)** *no-emphasis-as-heading* - Emphasis used instead of a heading | ||
- **[MD037](doc/md037.md)** *no-space-in-emphasis* - Spaces inside emphasis markers | ||
@@ -131,3 +129,3 @@ - **[MD038](doc/md038.md)** *no-space-in-code* - Spaces inside code span elements | ||
- **[MD042](doc/md042.md)** *no-empty-links* - No empty links | ||
- **[MD043](doc/md043.md)** *required-headings/required-headers* - Required heading structure | ||
- **[MD043](doc/md043.md)** *required-headings* - Required heading structure | ||
- **[MD044](doc/md044.md)** *proper-names* - Proper names should have the correct capitalization | ||
@@ -138,7 +136,8 @@ - **[MD045](doc/md045.md)** *no-alt-text* - Images should have alternate text (alt text) | ||
- **[MD048](doc/md048.md)** *code-fence-style* - Code fence style | ||
- **[MD049](doc/md049.md)** *emphasis-style* - Emphasis style should be consistent | ||
- **[MD050](doc/md050.md)** *strong-style* - Strong style should be consistent | ||
- **[MD049](doc/md049.md)** *emphasis-style* - Emphasis style | ||
- **[MD050](doc/md050.md)** *strong-style* - Strong style | ||
- **[MD051](doc/md051.md)** *link-fragments* - Link fragments should be valid | ||
- **[MD052](doc/md052.md)** *reference-links-images* - Reference links and images should use a label that is defined | ||
- **[MD053](doc/md053.md)** *link-image-reference-definitions* - Link and image reference definitions should be needed | ||
- **[MD054](doc/md054.md)** *link-image-style* - Link and image style | ||
@@ -149,8 +148,2 @@ <!-- markdownlint-restore --> | ||
~~Struck through~~ rules are deprecated and provided for backward-compatibility. | ||
> All rules with `heading` as part of their name are also available as `header` | ||
> aliases (e.g. `heading-increment` is also available as `header-increment`). | ||
> The use of `header` is deprecated and provided for backward-compatibility. | ||
### Custom Rules | ||
@@ -175,22 +168,20 @@ | ||
- **`blockquote`** - `MD027`, `MD028` | ||
- **`bullet`** - `MD004`, `MD005`, `MD006`, `MD007`, `MD032` | ||
- **`bullet`** - `MD004`, `MD005`, `MD007`, `MD032` | ||
- **`code`** - `MD014`, `MD031`, `MD038`, `MD040`, `MD046`, `MD048` | ||
- **`emphasis`** - `MD036`, `MD037`, `MD049`, `MD050` | ||
- **`hard_tab`** - `MD010` | ||
- **`headers`** - `MD001`, `MD002`, `MD003`, `MD018`, `MD019`, `MD020`, `MD021`, | ||
- **`headings`** - `MD001`, `MD003`, `MD018`, `MD019`, `MD020`, `MD021`, | ||
`MD022`, `MD023`, `MD024`, `MD025`, `MD026`, `MD036`, `MD041`, `MD043` | ||
- **`headings`** - `MD001`, `MD002`, `MD003`, `MD018`, `MD019`, `MD020`, | ||
`MD021`, `MD022`, `MD023`, `MD024`, `MD025`, `MD026`, `MD036`, `MD041`, | ||
`MD043` | ||
- **`hr`** - `MD035` | ||
- **`html`** - `MD033` | ||
- **`images`** - `MD045`, `MD052`, `MD053` | ||
- **`indentation`** - `MD005`, `MD006`, `MD007`, `MD027` | ||
- **`images`** - `MD045`, `MD052`, `MD053`, `MD054` | ||
- **`indentation`** - `MD005`, `MD007`, `MD027` | ||
- **`language`** - `MD040` | ||
- **`line_length`** - `MD013` | ||
- **`links`** - `MD011`, `MD034`, `MD039`, `MD042`, `MD051`, `MD052`, `MD053` | ||
- **`links`** - `MD011`, `MD034`, `MD039`, `MD042`, `MD051`, `MD052`, `MD053`, | ||
`MD054` | ||
- **`ol`** - `MD029`, `MD030`, `MD032` | ||
- **`spaces`** - `MD018`, `MD019`, `MD020`, `MD021`, `MD023` | ||
- **`spelling`** - `MD044` | ||
- **`ul`** - `MD004`, `MD005`, `MD006`, `MD007`, `MD030`, `MD032` | ||
- **`ul`** - `MD004`, `MD005`, `MD007`, `MD030`, `MD032` | ||
- **`url`** - `MD034` | ||
@@ -529,3 +520,3 @@ - **`whitespace`** - `MD009`, `MD010`, `MD012`, `MD027`, `MD028`, `MD030`, | ||
```javascript | ||
/((^---\s*$[\s\S]*?^---\s*)|(^\+\+\+\s*$[\s\S]*?^(\+\+\+|\.\.\.)\s*)|(^\{\s*$[\s\S]*?^\}\s*))(\r\n|\r|\n|$)/m | ||
/((^---\s*$[\s\S]+?^---\s*)|(^\+\+\+\s*$[\s\S]+?^(\+\+\+|\.\.\.)\s*)|(^\{\s*$[\s\S]+?^\}\s*))(\r\n|\r|\n|$)/m | ||
``` | ||
@@ -532,0 +523,0 @@ |
{ | ||
"title": "Markdownlint configuration schema", | ||
"$schema": "http://json-schema.org/draft-07/schema#", | ||
"title": "markdownlint configuration schema", | ||
"type": "object", | ||
@@ -24,3 +25,3 @@ "properties": { | ||
"MD001": { | ||
"description": "MD001/heading-increment/header-increment - Heading levels should only increment by one level at a time", | ||
"description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md001.md", | ||
"type": "boolean", | ||
@@ -30,9 +31,8 @@ "default": true | ||
"heading-increment": { | ||
"$ref": "#/properties/MD001" | ||
"description": "MD001/heading-increment : Heading levels should only increment by one level at a time : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md001.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"header-increment": { | ||
"$ref": "#/properties/MD001" | ||
}, | ||
"MD002": { | ||
"description": "MD002/first-heading-h1/first-header-h1 - First heading should be a top-level heading", | ||
"MD003": { | ||
"description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md003.md", | ||
"type": [ | ||
@@ -44,8 +44,14 @@ "boolean", | ||
"properties": { | ||
"level": { | ||
"description": "Heading level", | ||
"type": "integer", | ||
"minimum": 1, | ||
"maximum": 6, | ||
"default": 1 | ||
"style": { | ||
"description": "Heading style", | ||
"type": "string", | ||
"enum": [ | ||
"consistent", | ||
"atx", | ||
"atx_closed", | ||
"setext", | ||
"setext_with_atx", | ||
"setext_with_atx_closed" | ||
], | ||
"default": "consistent" | ||
} | ||
@@ -55,10 +61,4 @@ }, | ||
}, | ||
"first-heading-h1": { | ||
"$ref": "#/properties/MD002" | ||
}, | ||
"first-header-h1": { | ||
"$ref": "#/properties/MD002" | ||
}, | ||
"MD003": { | ||
"description": "MD003/heading-style/header-style - Heading style", | ||
"heading-style": { | ||
"description": "MD003/heading-style : Heading style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md003.md", | ||
"type": [ | ||
@@ -86,10 +86,4 @@ "boolean", | ||
}, | ||
"heading-style": { | ||
"$ref": "#/properties/MD003" | ||
}, | ||
"header-style": { | ||
"$ref": "#/properties/MD003" | ||
}, | ||
"MD004": { | ||
"description": "MD004/ul-style - Unordered list style", | ||
"description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md004.md", | ||
"type": [ | ||
@@ -117,6 +111,26 @@ "boolean", | ||
"ul-style": { | ||
"$ref": "#/properties/MD004" | ||
"description": "MD004/ul-style : Unordered list style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md004.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"style": { | ||
"description": "List style", | ||
"type": "string", | ||
"enum": [ | ||
"consistent", | ||
"asterisk", | ||
"plus", | ||
"dash", | ||
"sublist" | ||
], | ||
"default": "consistent" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD005": { | ||
"description": "MD005/list-indent - Inconsistent indentation for list items at the same level", | ||
"description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md005.md", | ||
"type": "boolean", | ||
@@ -126,14 +140,8 @@ "default": true | ||
"list-indent": { | ||
"$ref": "#/properties/MD005" | ||
}, | ||
"MD006": { | ||
"description": "MD006/ul-start-left - Consider starting bulleted lists at the beginning of the line", | ||
"description": "MD005/list-indent : Inconsistent indentation for list items at the same level : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md005.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"ul-start-left": { | ||
"$ref": "#/properties/MD006" | ||
}, | ||
"MD007": { | ||
"description": "MD007/ul-indent - Unordered list indentation", | ||
"description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md007.md", | ||
"type": [ | ||
@@ -166,6 +174,31 @@ "boolean", | ||
"ul-indent": { | ||
"$ref": "#/properties/MD007" | ||
"description": "MD007/ul-indent : Unordered list indentation : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md007.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"indent": { | ||
"description": "Spaces for indent", | ||
"type": "integer", | ||
"minimum": 1, | ||
"default": 2 | ||
}, | ||
"start_indented": { | ||
"description": "Whether to indent the first level of the list", | ||
"type": "boolean", | ||
"default": false | ||
}, | ||
"start_indent": { | ||
"description": "Spaces for first level indent (when start_indented is set)", | ||
"type": "integer", | ||
"minimum": 1, | ||
"default": 2 | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD009": { | ||
"description": "MD009/no-trailing-spaces - Trailing spaces", | ||
"description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md009.md", | ||
"type": [ | ||
@@ -197,6 +230,30 @@ "boolean", | ||
"no-trailing-spaces": { | ||
"$ref": "#/properties/MD009" | ||
"description": "MD009/no-trailing-spaces : Trailing spaces : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md009.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"br_spaces": { | ||
"description": "Spaces for line break", | ||
"type": "integer", | ||
"minimum": 0, | ||
"default": 2 | ||
}, | ||
"list_item_empty_lines": { | ||
"description": "Allow spaces for empty lines in list items", | ||
"type": "boolean", | ||
"default": false | ||
}, | ||
"strict": { | ||
"description": "Include unnecessary breaks", | ||
"type": "boolean", | ||
"default": false | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD010": { | ||
"description": "MD010/no-hard-tabs - Hard tabs", | ||
"description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md010.md", | ||
"type": [ | ||
@@ -231,6 +288,33 @@ "boolean", | ||
"no-hard-tabs": { | ||
"$ref": "#/properties/MD010" | ||
"description": "MD010/no-hard-tabs : Hard tabs : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md010.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"code_blocks": { | ||
"description": "Include code blocks", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"ignore_code_languages": { | ||
"description": "Fenced code languages to ignore", | ||
"type": "array", | ||
"items": { | ||
"type": "string" | ||
}, | ||
"default": [] | ||
}, | ||
"spaces_per_tab": { | ||
"description": "Number of spaces for each hard tab", | ||
"type": "integer", | ||
"minimum": 0, | ||
"default": 1 | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD011": { | ||
"description": "MD011/no-reversed-links - Reversed link syntax", | ||
"description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md011.md", | ||
"type": "boolean", | ||
@@ -240,6 +324,8 @@ "default": true | ||
"no-reversed-links": { | ||
"$ref": "#/properties/MD011" | ||
"description": "MD011/no-reversed-links : Reversed link syntax : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md011.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD012": { | ||
"description": "MD012/no-multiple-blanks - Multiple consecutive blank lines", | ||
"description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md012.md", | ||
"type": [ | ||
@@ -261,6 +347,20 @@ "boolean", | ||
"no-multiple-blanks": { | ||
"$ref": "#/properties/MD012" | ||
"description": "MD012/no-multiple-blanks : Multiple consecutive blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md012.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"maximum": { | ||
"description": "Consecutive blank lines", | ||
"type": "integer", | ||
"minimum": 1, | ||
"default": 1 | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD013": { | ||
"description": "MD013/line-length - Line length", | ||
"description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md013.md", | ||
"type": [ | ||
@@ -305,3 +405,52 @@ "boolean", | ||
}, | ||
"headers": { | ||
"strict": { | ||
"description": "Strict length checking", | ||
"type": "boolean", | ||
"default": false | ||
}, | ||
"stern": { | ||
"description": "Stern length checking", | ||
"type": "boolean", | ||
"default": false | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"line-length": { | ||
"description": "MD013/line-length : Line length : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md013.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"line_length": { | ||
"description": "Number of characters", | ||
"type": "integer", | ||
"minimum": 1, | ||
"default": 80 | ||
}, | ||
"heading_line_length": { | ||
"description": "Number of characters for headings", | ||
"type": "integer", | ||
"minimum": 1, | ||
"default": 80 | ||
}, | ||
"code_block_line_length": { | ||
"description": "Number of characters for code blocks", | ||
"type": "integer", | ||
"minimum": 1, | ||
"default": 80 | ||
}, | ||
"code_blocks": { | ||
"description": "Include code blocks", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"tables": { | ||
"description": "Include tables", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"headings": { | ||
"description": "Include headings", | ||
@@ -324,7 +473,4 @@ "type": "boolean", | ||
}, | ||
"line-length": { | ||
"$ref": "#/properties/MD013" | ||
}, | ||
"MD014": { | ||
"description": "MD014/commands-show-output - Dollar signs used before commands without showing output", | ||
"description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md014.md", | ||
"type": "boolean", | ||
@@ -334,6 +480,8 @@ "default": true | ||
"commands-show-output": { | ||
"$ref": "#/properties/MD014" | ||
"description": "MD014/commands-show-output : Dollar signs used before commands without showing output : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md014.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD018": { | ||
"description": "MD018/no-missing-space-atx - No space after hash on atx style heading", | ||
"description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md018.md", | ||
"type": "boolean", | ||
@@ -343,6 +491,8 @@ "default": true | ||
"no-missing-space-atx": { | ||
"$ref": "#/properties/MD018" | ||
"description": "MD018/no-missing-space-atx : No space after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md018.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD019": { | ||
"description": "MD019/no-multiple-space-atx - Multiple spaces after hash on atx style heading", | ||
"description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md019.md", | ||
"type": "boolean", | ||
@@ -352,6 +502,8 @@ "default": true | ||
"no-multiple-space-atx": { | ||
"$ref": "#/properties/MD019" | ||
"description": "MD019/no-multiple-space-atx : Multiple spaces after hash on atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md019.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD020": { | ||
"description": "MD020/no-missing-space-closed-atx - No space inside hashes on closed atx style heading", | ||
"description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md020.md", | ||
"type": "boolean", | ||
@@ -361,6 +513,8 @@ "default": true | ||
"no-missing-space-closed-atx": { | ||
"$ref": "#/properties/MD020" | ||
"description": "MD020/no-missing-space-closed-atx : No space inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md020.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD021": { | ||
"description": "MD021/no-multiple-space-closed-atx - Multiple spaces inside hashes on closed atx style heading", | ||
"description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md021.md", | ||
"type": "boolean", | ||
@@ -370,6 +524,8 @@ "default": true | ||
"no-multiple-space-closed-atx": { | ||
"$ref": "#/properties/MD021" | ||
"description": "MD021/no-multiple-space-closed-atx : Multiple spaces inside hashes on closed atx style heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md021.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD022": { | ||
"description": "MD022/blanks-around-headings/blanks-around-headers - Headings should be surrounded by blank lines", | ||
"description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md022.md", | ||
"type": [ | ||
@@ -409,9 +565,38 @@ "boolean", | ||
"blanks-around-headings": { | ||
"$ref": "#/properties/MD022" | ||
"description": "MD022/blanks-around-headings : Headings should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md022.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"lines_above": { | ||
"description": "Blank lines above heading", | ||
"type": [ | ||
"integer", | ||
"array" | ||
], | ||
"items": { | ||
"type": "integer" | ||
}, | ||
"minimum": -1, | ||
"default": 1 | ||
}, | ||
"lines_below": { | ||
"description": "Blank lines below heading", | ||
"type": [ | ||
"integer", | ||
"array" | ||
], | ||
"items": { | ||
"type": "integer" | ||
}, | ||
"minimum": -1, | ||
"default": 1 | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"blanks-around-headers": { | ||
"$ref": "#/properties/MD022" | ||
}, | ||
"MD023": { | ||
"description": "MD023/heading-start-left/header-start-left - Headings must start at the beginning of the line", | ||
"description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md023.md", | ||
"type": "boolean", | ||
@@ -421,9 +606,8 @@ "default": true | ||
"heading-start-left": { | ||
"$ref": "#/properties/MD023" | ||
"description": "MD023/heading-start-left : Headings must start at the beginning of the line : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md023.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"header-start-left": { | ||
"$ref": "#/properties/MD023" | ||
}, | ||
"MD024": { | ||
"description": "MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content", | ||
"description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md024.md", | ||
"type": [ | ||
@@ -449,9 +633,24 @@ "boolean", | ||
"no-duplicate-heading": { | ||
"$ref": "#/properties/MD024" | ||
"description": "MD024/no-duplicate-heading : Multiple headings with the same content : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md024.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"allow_different_nesting": { | ||
"description": "Only check sibling headings", | ||
"type": "boolean", | ||
"default": false | ||
}, | ||
"siblings_only": { | ||
"description": "Only check sibling headings", | ||
"type": "boolean", | ||
"default": false | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"no-duplicate-header": { | ||
"$ref": "#/properties/MD024" | ||
}, | ||
"MD025": { | ||
"description": "MD025/single-title/single-h1 - Multiple top-level headings in the same document", | ||
"description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md025.md", | ||
"type": [ | ||
@@ -479,9 +678,49 @@ "boolean", | ||
"single-title": { | ||
"$ref": "#/properties/MD025" | ||
"description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md025.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"level": { | ||
"description": "Heading level", | ||
"type": "integer", | ||
"minimum": 1, | ||
"maximum": 6, | ||
"default": 1 | ||
}, | ||
"front_matter_title": { | ||
"description": "RegExp for matching title in front matter", | ||
"type": "string", | ||
"default": "^\\s*title\\s*[:=]" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"single-h1": { | ||
"$ref": "#/properties/MD025" | ||
"description": "MD025/single-title/single-h1 : Multiple top-level headings in the same document : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md025.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"level": { | ||
"description": "Heading level", | ||
"type": "integer", | ||
"minimum": 1, | ||
"maximum": 6, | ||
"default": 1 | ||
}, | ||
"front_matter_title": { | ||
"description": "RegExp for matching title in front matter", | ||
"type": "string", | ||
"default": "^\\s*title\\s*[:=]" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD026": { | ||
"description": "MD026/no-trailing-punctuation - Trailing punctuation in heading", | ||
"description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md026.md", | ||
"type": [ | ||
@@ -502,6 +741,19 @@ "boolean", | ||
"no-trailing-punctuation": { | ||
"$ref": "#/properties/MD026" | ||
"description": "MD026/no-trailing-punctuation : Trailing punctuation in heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md026.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"punctuation": { | ||
"description": "Punctuation characters", | ||
"type": "string", | ||
"default": ".,;:!。,;:!" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD027": { | ||
"description": "MD027/no-multiple-space-blockquote - Multiple spaces after blockquote symbol", | ||
"description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md027.md", | ||
"type": "boolean", | ||
@@ -511,6 +763,8 @@ "default": true | ||
"no-multiple-space-blockquote": { | ||
"$ref": "#/properties/MD027" | ||
"description": "MD027/no-multiple-space-blockquote : Multiple spaces after blockquote symbol : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md027.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD028": { | ||
"description": "MD028/no-blanks-blockquote - Blank line inside blockquote", | ||
"description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md028.md", | ||
"type": "boolean", | ||
@@ -520,6 +774,8 @@ "default": true | ||
"no-blanks-blockquote": { | ||
"$ref": "#/properties/MD028" | ||
"description": "MD028/no-blanks-blockquote : Blank line inside blockquote : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md028.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD029": { | ||
"description": "MD029/ol-prefix - Ordered list item prefix", | ||
"description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md029.md", | ||
"type": [ | ||
@@ -546,6 +802,25 @@ "boolean", | ||
"ol-prefix": { | ||
"$ref": "#/properties/MD029" | ||
"description": "MD029/ol-prefix : Ordered list item prefix : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md029.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"style": { | ||
"description": "List style", | ||
"type": "string", | ||
"enum": [ | ||
"one", | ||
"ordered", | ||
"one_or_ordered", | ||
"zero" | ||
], | ||
"default": "one_or_ordered" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD030": { | ||
"description": "MD030/list-marker-space - Spaces after list markers", | ||
"description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md030.md", | ||
"type": [ | ||
@@ -585,6 +860,38 @@ "boolean", | ||
"list-marker-space": { | ||
"$ref": "#/properties/MD030" | ||
"description": "MD030/list-marker-space : Spaces after list markers : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md030.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"ul_single": { | ||
"description": "Spaces for single-line unordered list items", | ||
"type": "integer", | ||
"minimum": 1, | ||
"default": 1 | ||
}, | ||
"ol_single": { | ||
"description": "Spaces for single-line ordered list items", | ||
"type": "integer", | ||
"minimum": 1, | ||
"default": 1 | ||
}, | ||
"ul_multi": { | ||
"description": "Spaces for multi-line unordered list items", | ||
"type": "integer", | ||
"minimum": 1, | ||
"default": 1 | ||
}, | ||
"ol_multi": { | ||
"description": "Spaces for multi-line ordered list items", | ||
"type": "integer", | ||
"minimum": 1, | ||
"default": 1 | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD031": { | ||
"description": "MD031/blanks-around-fences - Fenced code blocks should be surrounded by blank lines", | ||
"description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md031.md", | ||
"type": [ | ||
@@ -605,6 +912,19 @@ "boolean", | ||
"blanks-around-fences": { | ||
"$ref": "#/properties/MD031" | ||
"description": "MD031/blanks-around-fences : Fenced code blocks should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md031.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"list_items": { | ||
"description": "Include list items", | ||
"type": "boolean", | ||
"default": true | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD032": { | ||
"description": "MD032/blanks-around-lists - Lists should be surrounded by blank lines", | ||
"description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md032.md", | ||
"type": "boolean", | ||
@@ -614,6 +934,8 @@ "default": true | ||
"blanks-around-lists": { | ||
"$ref": "#/properties/MD032" | ||
"description": "MD032/blanks-around-lists : Lists should be surrounded by blank lines : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md032.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD033": { | ||
"description": "MD033/no-inline-html - Inline HTML", | ||
"description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md033.md", | ||
"type": [ | ||
@@ -637,6 +959,22 @@ "boolean", | ||
"no-inline-html": { | ||
"$ref": "#/properties/MD033" | ||
"description": "MD033/no-inline-html : Inline HTML : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md033.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"allowed_elements": { | ||
"description": "Allowed elements", | ||
"type": "array", | ||
"items": { | ||
"type": "string" | ||
}, | ||
"default": [] | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD034": { | ||
"description": "MD034/no-bare-urls - Bare URL used", | ||
"description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md034.md", | ||
"type": "boolean", | ||
@@ -646,6 +984,8 @@ "default": true | ||
"no-bare-urls": { | ||
"$ref": "#/properties/MD034" | ||
"description": "MD034/no-bare-urls : Bare URL used : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md034.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD035": { | ||
"description": "MD035/hr-style - Horizontal rule style", | ||
"description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md035.md", | ||
"type": [ | ||
@@ -666,6 +1006,19 @@ "boolean", | ||
"hr-style": { | ||
"$ref": "#/properties/MD035" | ||
"description": "MD035/hr-style : Horizontal rule style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md035.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"style": { | ||
"description": "Horizontal rule style", | ||
"type": "string", | ||
"default": "consistent" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD036": { | ||
"description": "MD036/no-emphasis-as-heading/no-emphasis-as-header - Emphasis used instead of a heading", | ||
"description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md036.md", | ||
"type": [ | ||
@@ -686,9 +1039,19 @@ "boolean", | ||
"no-emphasis-as-heading": { | ||
"$ref": "#/properties/MD036" | ||
"description": "MD036/no-emphasis-as-heading : Emphasis used instead of a heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md036.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"punctuation": { | ||
"description": "Punctuation characters", | ||
"type": "string", | ||
"default": ".,;:!?。,;:!?" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"no-emphasis-as-header": { | ||
"$ref": "#/properties/MD036" | ||
}, | ||
"MD037": { | ||
"description": "MD037/no-space-in-emphasis - Spaces inside emphasis markers", | ||
"description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md037.md", | ||
"type": "boolean", | ||
@@ -698,6 +1061,8 @@ "default": true | ||
"no-space-in-emphasis": { | ||
"$ref": "#/properties/MD037" | ||
"description": "MD037/no-space-in-emphasis : Spaces inside emphasis markers : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md037.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD038": { | ||
"description": "MD038/no-space-in-code - Spaces inside code span elements", | ||
"description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md038.md", | ||
"type": "boolean", | ||
@@ -707,6 +1072,8 @@ "default": true | ||
"no-space-in-code": { | ||
"$ref": "#/properties/MD038" | ||
"description": "MD038/no-space-in-code : Spaces inside code span elements : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md038.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD039": { | ||
"description": "MD039/no-space-in-links - Spaces inside link text", | ||
"description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md039.md", | ||
"type": "boolean", | ||
@@ -716,6 +1083,8 @@ "default": true | ||
"no-space-in-links": { | ||
"$ref": "#/properties/MD039" | ||
"description": "MD039/no-space-in-links : Spaces inside link text : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md039.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD040": { | ||
"description": "MD040/fenced-code-language - Fenced code blocks should have a language specified", | ||
"description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md040.md", | ||
"type": [ | ||
@@ -744,6 +1113,27 @@ "boolean", | ||
"fenced-code-language": { | ||
"$ref": "#/properties/MD040" | ||
"description": "MD040/fenced-code-language : Fenced code blocks should have a language specified : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md040.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"allowed_languages": { | ||
"description": "List of languages", | ||
"type": "array", | ||
"items": { | ||
"type": "string" | ||
}, | ||
"default": [] | ||
}, | ||
"language_only": { | ||
"description": "Require language only", | ||
"type": "boolean", | ||
"default": false | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD041": { | ||
"description": "MD041/first-line-heading/first-line-h1 - First line in a file should be a top-level heading", | ||
"description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md041.md", | ||
"type": [ | ||
@@ -771,9 +1161,49 @@ "boolean", | ||
"first-line-heading": { | ||
"$ref": "#/properties/MD041" | ||
"description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md041.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"level": { | ||
"description": "Heading level", | ||
"type": "integer", | ||
"minimum": 1, | ||
"maximum": 6, | ||
"default": 1 | ||
}, | ||
"front_matter_title": { | ||
"description": "RegExp for matching title in front matter", | ||
"type": "string", | ||
"default": "^\\s*title\\s*[:=]" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"first-line-h1": { | ||
"$ref": "#/properties/MD041" | ||
"description": "MD041/first-line-heading/first-line-h1 : First line in a file should be a top-level heading : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md041.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"level": { | ||
"description": "Heading level", | ||
"type": "integer", | ||
"minimum": 1, | ||
"maximum": 6, | ||
"default": 1 | ||
}, | ||
"front_matter_title": { | ||
"description": "RegExp for matching title in front matter", | ||
"type": "string", | ||
"default": "^\\s*title\\s*[:=]" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD042": { | ||
"description": "MD042/no-empty-links - No empty links", | ||
"description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md042.md", | ||
"type": "boolean", | ||
@@ -783,6 +1213,8 @@ "default": true | ||
"no-empty-links": { | ||
"$ref": "#/properties/MD042" | ||
"description": "MD042/no-empty-links : No empty links : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md042.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD043": { | ||
"description": "MD043/required-headings/required-headers - Required heading structure", | ||
"description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md043.md", | ||
"type": [ | ||
@@ -803,3 +1235,19 @@ "boolean", | ||
}, | ||
"headers": { | ||
"match_case": { | ||
"description": "Match case of headings", | ||
"type": "boolean", | ||
"default": false | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"required-headings": { | ||
"description": "MD043/required-headings : Required heading structure : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md043.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"headings": { | ||
"description": "List of headings", | ||
@@ -821,10 +1269,4 @@ "type": "array", | ||
}, | ||
"required-headings": { | ||
"$ref": "#/properties/MD043" | ||
}, | ||
"required-headers": { | ||
"$ref": "#/properties/MD043" | ||
}, | ||
"MD044": { | ||
"description": "MD044/proper-names - Proper names should have the correct capitalization", | ||
"description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md044.md", | ||
"type": [ | ||
@@ -858,6 +1300,32 @@ "boolean", | ||
"proper-names": { | ||
"$ref": "#/properties/MD044" | ||
"description": "MD044/proper-names : Proper names should have the correct capitalization : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md044.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"names": { | ||
"description": "List of proper names", | ||
"type": "array", | ||
"items": { | ||
"type": "string" | ||
}, | ||
"default": [] | ||
}, | ||
"code_blocks": { | ||
"description": "Include code blocks", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"html_elements": { | ||
"description": "Include HTML elements", | ||
"type": "boolean", | ||
"default": true | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD045": { | ||
"description": "MD045/no-alt-text - Images should have alternate text (alt text)", | ||
"description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md045.md", | ||
"type": "boolean", | ||
@@ -867,6 +1335,8 @@ "default": true | ||
"no-alt-text": { | ||
"$ref": "#/properties/MD045" | ||
"description": "MD045/no-alt-text : Images should have alternate text (alt text) : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md045.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD046": { | ||
"description": "MD046/code-block-style - Code block style", | ||
"description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md046.md", | ||
"type": [ | ||
@@ -892,6 +1362,24 @@ "boolean", | ||
"code-block-style": { | ||
"$ref": "#/properties/MD046" | ||
"description": "MD046/code-block-style : Code block style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md046.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"style": { | ||
"description": "Block style", | ||
"type": "string", | ||
"enum": [ | ||
"consistent", | ||
"fenced", | ||
"indented" | ||
], | ||
"default": "consistent" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD047": { | ||
"description": "MD047/single-trailing-newline - Files should end with a single newline character", | ||
"description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md047.md", | ||
"type": "boolean", | ||
@@ -901,6 +1389,8 @@ "default": true | ||
"single-trailing-newline": { | ||
"$ref": "#/properties/MD047" | ||
"description": "MD047/single-trailing-newline : Files should end with a single newline character : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md047.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD048": { | ||
"description": "MD048/code-fence-style - Code fence style", | ||
"description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md048.md", | ||
"type": [ | ||
@@ -926,6 +1416,24 @@ "boolean", | ||
"code-fence-style": { | ||
"$ref": "#/properties/MD048" | ||
"description": "MD048/code-fence-style : Code fence style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md048.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"style": { | ||
"description": "Code fence style", | ||
"type": "string", | ||
"enum": [ | ||
"consistent", | ||
"backtick", | ||
"tilde" | ||
], | ||
"default": "consistent" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD049": { | ||
"description": "MD049/emphasis-style - Emphasis style should be consistent", | ||
"description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md049.md", | ||
"type": [ | ||
@@ -951,6 +1459,24 @@ "boolean", | ||
"emphasis-style": { | ||
"$ref": "#/properties/MD049" | ||
"description": "MD049/emphasis-style : Emphasis style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md049.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"style": { | ||
"description": "Emphasis style", | ||
"type": "string", | ||
"enum": [ | ||
"consistent", | ||
"asterisk", | ||
"underscore" | ||
], | ||
"default": "consistent" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD050": { | ||
"description": "MD050/strong-style - Strong style should be consistent", | ||
"description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md050.md", | ||
"type": [ | ||
@@ -976,6 +1502,24 @@ "boolean", | ||
"strong-style": { | ||
"$ref": "#/properties/MD050" | ||
"description": "MD050/strong-style : Strong style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md050.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"style": { | ||
"description": "Strong style", | ||
"type": "string", | ||
"enum": [ | ||
"consistent", | ||
"asterisk", | ||
"underscore" | ||
], | ||
"default": "consistent" | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD051": { | ||
"description": "MD051/link-fragments - Link fragments should be valid", | ||
"description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md051.md", | ||
"type": "boolean", | ||
@@ -985,6 +1529,8 @@ "default": true | ||
"link-fragments": { | ||
"$ref": "#/properties/MD051" | ||
"description": "MD051/link-fragments : Link fragments should be valid : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md051.md", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"MD052": { | ||
"description": "MD052/reference-links-images - Reference links and images should use a label that is defined", | ||
"description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md052.md", | ||
"type": [ | ||
@@ -1005,6 +1551,19 @@ "boolean", | ||
"reference-links-images": { | ||
"$ref": "#/properties/MD052" | ||
"description": "MD052/reference-links-images : Reference links and images should use a label that is defined : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md052.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"shortcut_syntax": { | ||
"description": "Include shortcut syntax", | ||
"type": "boolean", | ||
"default": false | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD053": { | ||
"description": "MD053/link-image-reference-definitions - Link and image reference definitions should be needed", | ||
"description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md053.md", | ||
"type": [ | ||
@@ -1030,16 +1589,111 @@ "boolean", | ||
"link-image-reference-definitions": { | ||
"$ref": "#/properties/MD053" | ||
"description": "MD053/link-image-reference-definitions : Link and image reference definitions should be needed : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md053.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"ignored_definitions": { | ||
"description": "Ignored definitions", | ||
"type": "array", | ||
"items": { | ||
"type": "string" | ||
}, | ||
"default": [ | ||
"//" | ||
] | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"MD054": { | ||
"description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md054.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"autolink": { | ||
"description": "Allow autolinks", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"inline": { | ||
"description": "Allow inline links and images", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"full": { | ||
"description": "Allow full reference links and images", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"collapsed": { | ||
"description": "Allow collapsed reference links and images", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"shortcut": { | ||
"description": "Allow shortcut reference links and images", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"url_inline": { | ||
"description": "Allow URLs as inline links", | ||
"type": "boolean", | ||
"default": true | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"link-image-style": { | ||
"description": "MD054/link-image-style : Link and image style : https://github.com/DavidAnson/markdownlint/blob/v0.32.0/doc/md054.md", | ||
"type": [ | ||
"boolean", | ||
"object" | ||
], | ||
"default": true, | ||
"properties": { | ||
"autolink": { | ||
"description": "Allow autolinks", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"inline": { | ||
"description": "Allow inline links and images", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"full": { | ||
"description": "Allow full reference links and images", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"collapsed": { | ||
"description": "Allow collapsed reference links and images", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"shortcut": { | ||
"description": "Allow shortcut reference links and images", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"url_inline": { | ||
"description": "Allow URLs as inline links", | ||
"type": "boolean", | ||
"default": true | ||
} | ||
}, | ||
"additionalProperties": false | ||
}, | ||
"headings": { | ||
"description": "headings - MD001, MD002, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043", | ||
"description": "headings : MD001, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"headers": { | ||
"description": "headers - MD001, MD002, MD003, MD018, MD019, MD020, MD021, MD022, MD023, MD024, MD025, MD026, MD036, MD041, MD043", | ||
"type": "boolean", | ||
"default": true | ||
}, | ||
"bullet": { | ||
"description": "bullet - MD004, MD005, MD006, MD007, MD032", | ||
"description": "bullet : MD004, MD005, MD007, MD032", | ||
"type": "boolean", | ||
@@ -1049,3 +1703,3 @@ "default": true | ||
"ul": { | ||
"description": "ul - MD004, MD005, MD006, MD007, MD030, MD032", | ||
"description": "ul : MD004, MD005, MD007, MD030, MD032", | ||
"type": "boolean", | ||
@@ -1055,3 +1709,3 @@ "default": true | ||
"indentation": { | ||
"description": "indentation - MD005, MD006, MD007, MD027", | ||
"description": "indentation : MD005, MD007, MD027", | ||
"type": "boolean", | ||
@@ -1061,3 +1715,3 @@ "default": true | ||
"whitespace": { | ||
"description": "whitespace - MD009, MD010, MD012, MD027, MD028, MD030, MD037, MD038, MD039", | ||
"description": "whitespace : MD009, MD010, MD012, MD027, MD028, MD030, MD037, MD038, MD039", | ||
"type": "boolean", | ||
@@ -1067,3 +1721,3 @@ "default": true | ||
"hard_tab": { | ||
"description": "hard_tab - MD010", | ||
"description": "hard_tab : MD010", | ||
"type": "boolean", | ||
@@ -1073,3 +1727,3 @@ "default": true | ||
"links": { | ||
"description": "links - MD011, MD034, MD039, MD042, MD051, MD052, MD053", | ||
"description": "links : MD011, MD034, MD039, MD042, MD051, MD052, MD053, MD054", | ||
"type": "boolean", | ||
@@ -1079,3 +1733,3 @@ "default": true | ||
"blank_lines": { | ||
"description": "blank_lines - MD012, MD022, MD031, MD032, MD047", | ||
"description": "blank_lines : MD012, MD022, MD031, MD032, MD047", | ||
"type": "boolean", | ||
@@ -1085,3 +1739,3 @@ "default": true | ||
"line_length": { | ||
"description": "line_length - MD013", | ||
"description": "line_length : MD013", | ||
"type": "boolean", | ||
@@ -1091,3 +1745,3 @@ "default": true | ||
"code": { | ||
"description": "code - MD014, MD031, MD038, MD040, MD046, MD048", | ||
"description": "code : MD014, MD031, MD038, MD040, MD046, MD048", | ||
"type": "boolean", | ||
@@ -1097,3 +1751,3 @@ "default": true | ||
"atx": { | ||
"description": "atx - MD018, MD019", | ||
"description": "atx : MD018, MD019", | ||
"type": "boolean", | ||
@@ -1103,3 +1757,3 @@ "default": true | ||
"spaces": { | ||
"description": "spaces - MD018, MD019, MD020, MD021, MD023", | ||
"description": "spaces : MD018, MD019, MD020, MD021, MD023", | ||
"type": "boolean", | ||
@@ -1109,3 +1763,3 @@ "default": true | ||
"atx_closed": { | ||
"description": "atx_closed - MD020, MD021", | ||
"description": "atx_closed : MD020, MD021", | ||
"type": "boolean", | ||
@@ -1115,3 +1769,3 @@ "default": true | ||
"blockquote": { | ||
"description": "blockquote - MD027, MD028", | ||
"description": "blockquote : MD027, MD028", | ||
"type": "boolean", | ||
@@ -1121,3 +1775,3 @@ "default": true | ||
"ol": { | ||
"description": "ol - MD029, MD030, MD032", | ||
"description": "ol : MD029, MD030, MD032", | ||
"type": "boolean", | ||
@@ -1127,3 +1781,3 @@ "default": true | ||
"html": { | ||
"description": "html - MD033", | ||
"description": "html : MD033", | ||
"type": "boolean", | ||
@@ -1133,3 +1787,3 @@ "default": true | ||
"url": { | ||
"description": "url - MD034", | ||
"description": "url : MD034", | ||
"type": "boolean", | ||
@@ -1139,3 +1793,3 @@ "default": true | ||
"hr": { | ||
"description": "hr - MD035", | ||
"description": "hr : MD035", | ||
"type": "boolean", | ||
@@ -1145,3 +1799,3 @@ "default": true | ||
"emphasis": { | ||
"description": "emphasis - MD036, MD037, MD049, MD050", | ||
"description": "emphasis : MD036, MD037, MD049, MD050", | ||
"type": "boolean", | ||
@@ -1151,3 +1805,3 @@ "default": true | ||
"language": { | ||
"description": "language - MD040", | ||
"description": "language : MD040", | ||
"type": "boolean", | ||
@@ -1157,3 +1811,3 @@ "default": true | ||
"spelling": { | ||
"description": "spelling - MD044", | ||
"description": "spelling : MD044", | ||
"type": "boolean", | ||
@@ -1163,3 +1817,3 @@ "default": true | ||
"accessibility": { | ||
"description": "accessibility - MD045", | ||
"description": "accessibility : MD045", | ||
"type": "boolean", | ||
@@ -1169,3 +1823,3 @@ "default": true | ||
"images": { | ||
"description": "images - MD045, MD052, MD053", | ||
"description": "images : MD045, MD052, MD053, MD054", | ||
"type": "boolean", | ||
@@ -1172,0 +1826,0 @@ "default": true |
@@ -7,3 +7,2 @@ { | ||
"line_length": false, | ||
"ul-start-left": false, | ||
"ul-indent": false, | ||
@@ -10,0 +9,0 @@ "no-inline-html": false, |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
809518
15468
29
124
1027
+ Addedmarkdown-it@13.0.2(transitive)
- Removedmarkdown-it@13.0.1(transitive)
Updatedmarkdown-it@13.0.2