/
index.js
60 lines (54 loc) · 1.41 KB
/
index.js
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
* @author Titus Wormer
* @copyright 2015 Titus Wormer
* @license MIT
* @module hard-break-spaces
* @fileoverview
* Warn when too many spaces are used to create a hard break.
*
* @example
* {"name": "ok.md"}
*
* Lorem ipsum··
* dolor sit amet
*
* @example
* {"name": "not-ok.md", "label": "input"}
*
* Lorem ipsum···
* dolor sit amet.
*
* @example
* {"name": "not-ok.md", "label": "output"}
*
* 1:12-2:1: Use two spaces for hard line breaks
*/
/**
* @typedef {import('mdast').Root} Root
*/
import {lintRule} from 'unified-lint-rule'
import {visit} from 'unist-util-visit'
import {pointStart, pointEnd} from 'unist-util-position'
import {generated} from 'unist-util-generated'
const remarkLintHardBreakSpaces = lintRule(
{
origin: 'remark-lint:hard-break-spaces',
url: 'https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-hard-break-spaces#readme'
},
/** @type {import('unified-lint-rule').Rule<Root, void>} */
(tree, file) => {
const value = String(file)
visit(tree, 'break', (node) => {
if (!generated(node)) {
const slice = value
.slice(pointStart(node).offset, pointEnd(node).offset)
.split('\n', 1)[0]
.replace(/\r$/, '')
if (slice.length > 2) {
file.message('Use two spaces for hard line breaks', node)
}
}
})
}
)
export default remarkLintHardBreakSpaces