markdownlint-rule-extended-ascii
Version:
A markdownlint rule that allows only extended ASCII characters
47 lines (43 loc) • 1.19 kB
JavaScript
// @ts-check
;
const blockedAsciiRe = /[^\x20-\x7e]/gu;
const blockedExtendedAsciiRe = /[^\x20-\x7e\xa0-\xff]/gu;
/** @type {Map<string, string>} */
const replacements = new Map([
[ `“`, `"` ],
[ `”`, `"` ],
[ `‘`, `'` ],
[ `’`, `'` ],
[ `–`, `-` ],
[ `—`, `-` ]
]);
/** @type import("markdownlint").Rule */
module.exports = {
"names": [ "extended-ascii" ],
"description": "Only extended ASCII characters are allowed",
"tags": [ "davidanson" ],
"parser": "none",
"function": (params, onError) => {
const blockedCharacterRe = params.config["ascii-only"] ?
blockedAsciiRe :
blockedExtendedAsciiRe;
params.lines.forEach((line, index) => {
const violations = line.matchAll(blockedCharacterRe);
for (const violation of violations) {
const [ character ] = violation;
const column = violation.index + 1;
const fixInfo = replacements.has(character) ? {
"editColumn": column,
"deleteCount": 1,
"insertText": replacements.get(character)
} : undefined;
onError({
"lineNumber": index + 1,
"detail": `Blocked character: '${character}'`,
"range": [ column, 1 ],
fixInfo
});
}
});
}
};