Update MD007/ul-indent to support start_indent parameter (fixes #337, closes #397).

This commit is contained in:
David Anson 2021-12-13 21:49:43 -08:00
parent 13e375b281
commit 517eb42015
12 changed files with 151 additions and 7 deletions

View file

@ -2212,12 +2212,13 @@ module.exports = {
"function": function MD007(params, onError) {
var indent = Number(params.config.indent || 2);
var startIndented = !!params.config.start_indented;
var startIndent = Number(params.config.start_indent || indent);
flattenedLists().forEach(function (list) {
if (list.unordered && list.parentsUnordered) {
list.items.forEach(function (item) {
var lineNumber = item.lineNumber, line = item.line;
var expectedNesting = list.nesting + (startIndented ? 1 : 0);
var expectedIndent = expectedNesting * indent;
var expectedIndent = (startIndented ? startIndent : 0) +
(list.nesting * indent);
var actualIndent = indentFor(item);
var range = null;
var editColumn = 1;

View file

@ -292,7 +292,11 @@ Tags: bullet, ul, indentation
Aliases: ul-indent
Parameters: indent, start_indented (number; default 2, boolean; default false)
<!-- markdownlint-disable line-length -->
Parameters: indent, start_indented, start_indent (number; default 2, boolean; default false, number; defaults to indent)
<!-- markdownlint-restore -->
Fixable: Most violations can be fixed by tooling
@ -319,7 +323,9 @@ rule).
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).
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).
Rationale: Indenting by 2 spaces allows the content of a nested list to be in
line with the start of the content of the parent list when a single space is

View file

@ -13,12 +13,14 @@ module.exports = {
"function": function MD007(params, onError) {
const indent = Number(params.config.indent || 2);
const startIndented = !!params.config.start_indented;
const startIndent = Number(params.config.start_indent || indent);
flattenedLists().forEach((list) => {
if (list.unordered && list.parentsUnordered) {
list.items.forEach((item) => {
const { lineNumber, line } = item;
const expectedNesting = list.nesting + (startIndented ? 1 : 0);
const expectedIndent = expectedNesting * indent;
const expectedIndent =
(startIndented ? startIndent : 0) +
(list.nesting * indent);
const actualIndent = indentFor(item);
let range = null;
let editColumn = 1;

View file

@ -39,7 +39,9 @@
// Spaces for indent
"indent": 2,
// Whether to indent the first level of the list
"start_indented": false
"start_indented": false,
// Spaces for first level indent (when start_indented is set)
"start_indent": 2
},
// MD009/no-trailing-spaces - Trailing spaces

View file

@ -36,6 +36,8 @@ MD007:
indent: 2
# Whether to indent the first level of the list
start_indented: false
# Spaces for first level indent (when start_indented is set)
start_indent: 2
# MD009/no-trailing-spaces - Trailing spaces
MD009:

View file

@ -107,6 +107,12 @@ rules.forEach(function forRule(rule) {
"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",
"default": 2
}
};
break;

View file

@ -238,6 +238,11 @@
"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",
"default": 2
}
},
"additionalProperties": false
@ -259,6 +264,11 @@
"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",
"default": 2
}
},
"additionalProperties": false

View file

@ -0,0 +1,35 @@
# List Indentation start_indent/indent
* item 1
* item 2
* item 2.1
* item 2.2
* item 2.2.1
* item 2.3
* item 2.3.1 {MD007}
* item 3
* item 4 {MD005} {MD007}
Text
* item 1 {MD007}
* item 2 {MD007}
* item 2.1
* item 2.2
* item 2.2.1
Text
* item 1
* item 2
* item 2.1 {MD007}
* item 2.2 {MD007}
* item 2.2.1 {MD007}
<!-- markdownlint-configure-file {
"ul-indent": {
"indent": 3,
"start_indented": true,
"start_indent": 1
}
} -->

View file

@ -0,0 +1,34 @@
# List Indentation start_indent/no indent
* item 1
* item 2
* item 2.1
* item 2.2
* item 2.2.1
* item 2.3
* item 2.3.1 {MD007}
* item 3
* item 4 {MD005} {MD007}
Text
* item 1 {MD007}
* item 2 {MD007}
* item 2.1 {MD007}
* item 2.2 {MD007}
* item 2.2.1 {MD007}
Text
* item 1
* item 2
* item 2.1 {MD007}
* item 2.2 {MD007}
* item 2.2.1 {MD007}
<!-- markdownlint-configure-file {
"ul-indent": {
"start_indented": true,
"start_indent": 1
}
} -->

View file

@ -0,0 +1,46 @@
# List Indentation - Start Indented/No Indent
* item 1
* item 2
* item 2.1
* item 2.2
* item 2.2.1
* item 2.3
* item 3
## Disallowed List Indentation - Starts at Zero
* item 1 {MD007}
* item 2 {MD007}
* item 2.1 {MD007}
* item 2.2 {MD007}
* item 2.2.1 {MD007}
* item 2.3 {MD007}
* item 3 {MD007}
## Disallowed List Indentation - Starts at One
* item 1 {MD007}
* item 2 {MD007}
* item 2.1 {MD007}
* item 2.2 {MD007}
* item 2.2.1 {MD007}
* item 2.3 {MD007}
* item 2.3.1
* item 3 {MD007}
## Disallowed List Indentation - Starts at Three
* item 1 {MD007}
* item 2 {MD007}
* item 2.1 {MD007}
* item 2.2 {MD007}
* item 2.2.1 {MD007}
* item 2.3 {MD007}
* item 3 {MD007}
<!-- markdownlint-configure-file {
"ul-indent": {
"start_indented": true
}
} -->