markdownlint/schema/build-config-example.mjs
David Anson 05509da984
Some checks are pending
Checkers / linkcheck (push) Waiting to run
Checkers / spellcheck (push) Waiting to run
CI / build (20, macos-latest) (push) Waiting to run
CI / build (20, ubuntu-latest) (push) Waiting to run
CI / build (20, windows-latest) (push) Waiting to run
CI / build (22, macos-latest) (push) Waiting to run
CI / build (22, ubuntu-latest) (push) Waiting to run
CI / build (22, windows-latest) (push) Waiting to run
CI / build (24, macos-latest) (push) Waiting to run
CI / build (24, ubuntu-latest) (push) Waiting to run
CI / build (24, windows-latest) (push) Waiting to run
CI / pnpm (push) Waiting to run
CodeQL / Analyze (push) Waiting to run
TestRepos / build (latest, ubuntu-latest) (push) Waiting to run
UpdateTestRepos / update (push) Waiting to run
Add "severity"/"error" to rule in Configuration object, add corresponding documentation, resolve some new type-checking issues.
2025-09-18 21:21:12 -07:00

69 lines
2.2 KiB
JavaScript

// @ts-check
import fs from "node:fs/promises";
import path from "node:path";
import yaml from "js-yaml";
import { __dirname, importWithTypeJson } from "../test/esm-helpers.mjs";
const configSchema = await importWithTypeJson(import.meta, "../schema/markdownlint-config-schema.json");
/** @type {Object<string, any>} */
const configExample = {};
for (const rule in configSchema.properties) {
if (/^(?:MD\d{3}|default|extends)$/.test(rule)) {
const properties = configSchema.properties[rule];
configExample[rule + "-description"] = properties.description;
configExample[rule] = properties.default;
const subproperties = Object.fromEntries(
Object.entries(
properties.oneOf?.at(-1).properties || []
).filter(([ key ]) => key !== "severity")
);
if (Object.keys(subproperties).length > 0) {
/** @type {Object<string, any>} */
const ruleExample = {};
// eslint-disable-next-line guard-for-in
for (const property in subproperties) {
const ruleProperties = subproperties[property];
ruleExample[property + "-sub-description"] = ruleProperties.description;
ruleExample[property] = ruleProperties.default;
}
configExample[rule] = ruleExample;
}
}
}
/**
* Transforms comments to use the specified prefix.
*
* @param {string} input Markdown input.
* @param {string} commentPrefix Comment prefix.
* @returns {string} Transformed input.
*/
const transformComments = (input, commentPrefix) => (
commentPrefix +
" Example markdownlint configuration with all properties set to their default value\n" +
input
.replace(/^(\s*)[^-\s]+-sub-description"?: "?([^"\n]+)"?,?$/gm, "$1" + commentPrefix + " $2")
.replace(/^(\s*)[^-\s]+-description"?: "?([^"\n]+)"?,?$/gm, "\n$1" + commentPrefix + " $2")
);
const configStringJson = JSON.stringify(configExample, null, 2);
await fs.writeFile(
path.join(__dirname(import.meta), ".markdownlint.jsonc"),
transformComments(configStringJson, "//"),
"utf8"
);
const configStringYaml = yaml.dump(
configExample,
{
"forceQuotes": true,
"lineWidth": -1,
"quotingType": "\""
}
);
await fs.writeFile(
path.join(__dirname(import.meta), ".markdownlint.yaml"),
transformComments(configStringYaml, "#"),
"utf8"
);