2018-01-21 21:44:25 -08:00
|
|
|
// @ts-check
|
|
|
|
|
2024-11-28 20:36:44 -08:00
|
|
|
import { addErrorDetailIf } from "../helpers/helpers.cjs";
|
|
|
|
import { filterByTypesCached } from "./cache.mjs";
|
2018-01-21 21:44:25 -08:00
|
|
|
|
2024-12-03 19:58:28 -08:00
|
|
|
/** @type {import("markdownlint").Rule} */
|
2024-11-28 20:36:44 -08:00
|
|
|
export default {
|
2018-01-21 21:44:25 -08:00
|
|
|
"names": [ "MD030", "list-marker-space" ],
|
|
|
|
"description": "Spaces after list markers",
|
|
|
|
"tags": [ "ol", "ul", "whitespace" ],
|
2024-03-09 16:17:50 -08:00
|
|
|
"parser": "micromark",
|
2018-01-21 21:44:25 -08:00
|
|
|
"function": function MD030(params, onError) {
|
2020-01-25 18:40:39 -08:00
|
|
|
const ulSingle = Number(params.config.ul_single || 1);
|
|
|
|
const olSingle = Number(params.config.ol_single || 1);
|
|
|
|
const ulMulti = Number(params.config.ul_multi || 1);
|
|
|
|
const olMulti = Number(params.config.ol_multi || 1);
|
2024-08-24 22:05:16 -07:00
|
|
|
for (const list of filterByTypesCached([ "listOrdered", "listUnordered" ])) {
|
2023-10-10 22:03:18 -07:00
|
|
|
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)
|
|
|
|
};
|
2019-12-10 22:09:40 -08:00
|
|
|
addErrorDetailIf(
|
|
|
|
onError,
|
2023-10-10 22:03:18 -07:00
|
|
|
startLine,
|
2019-12-10 22:09:40 -08:00
|
|
|
expectedSpaces,
|
|
|
|
actualSpaces,
|
2024-06-21 21:03:30 -07:00
|
|
|
undefined,
|
|
|
|
undefined,
|
2023-10-10 22:03:18 -07:00
|
|
|
range,
|
2019-12-10 22:09:40 -08:00
|
|
|
fixInfo
|
|
|
|
);
|
2019-09-11 22:59:42 -07:00
|
|
|
}
|
2022-06-08 22:10:27 -07:00
|
|
|
}
|
|
|
|
}
|
2018-01-21 21:44:25 -08:00
|
|
|
}
|
|
|
|
};
|