-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathextended-ascii.cjs
46 lines (43 loc) · 1.16 KB
/
extended-ascii.cjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
// @ts-check
"use strict";
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
});
}
});
}
};