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

View file

@ -292,7 +292,11 @@ Tags: bullet, ul, indentation
Aliases: ul-indent 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 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 `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 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 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 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) { "function": function MD007(params, onError) {
const indent = Number(params.config.indent || 2); const indent = Number(params.config.indent || 2);
const startIndented = !!params.config.start_indented; const startIndented = !!params.config.start_indented;
const startIndent = Number(params.config.start_indent || indent);
flattenedLists().forEach((list) => { flattenedLists().forEach((list) => {
if (list.unordered && list.parentsUnordered) { if (list.unordered && list.parentsUnordered) {
list.items.forEach((item) => { list.items.forEach((item) => {
const { lineNumber, line } = item; const { lineNumber, line } = item;
const expectedNesting = list.nesting + (startIndented ? 1 : 0); const expectedIndent =
const expectedIndent = expectedNesting * indent; (startIndented ? startIndent : 0) +
(list.nesting * indent);
const actualIndent = indentFor(item); const actualIndent = indentFor(item);
let range = null; let range = null;
let editColumn = 1; let editColumn = 1;

View file

@ -39,7 +39,9 @@
// Spaces for indent // Spaces for indent
"indent": 2, "indent": 2,
// Whether to indent the first level of the list // 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 // MD009/no-trailing-spaces - Trailing spaces

View file

@ -36,6 +36,8 @@ MD007:
indent: 2 indent: 2
# Whether to indent the first level of the list # 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 # MD009/no-trailing-spaces - Trailing spaces
MD009: MD009:

View file

@ -107,6 +107,12 @@ rules.forEach(function forRule(rule) {
"description": "Whether to indent the first level of the list", "description": "Whether to indent the first level of the list",
"type": "boolean", "type": "boolean",
"default": false "default": false
},
"start_indent": {
"description":
"Spaces for first level indent (when start_indented is set)",
"type": "integer",
"default": 2
} }
}; };
break; break;

View file

@ -238,6 +238,11 @@
"description": "Whether to indent the first level of the list", "description": "Whether to indent the first level of the list",
"type": "boolean", "type": "boolean",
"default": false "default": false
},
"start_indent": {
"description": "Spaces for first level indent (when start_indented is set)",
"type": "integer",
"default": 2
} }
}, },
"additionalProperties": false "additionalProperties": false
@ -259,6 +264,11 @@
"description": "Whether to indent the first level of the list", "description": "Whether to indent the first level of the list",
"type": "boolean", "type": "boolean",
"default": false "default": false
},
"start_indent": {
"description": "Spaces for first level indent (when start_indented is set)",
"type": "integer",
"default": 2
} }
}, },
"additionalProperties": false "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
}
} -->