/
single-line-comment-double-slash-space-after.js
89 lines (75 loc) · 2.22 KB
/
single-line-comment-double-slash-space-after.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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
"use strict"
const {
utils: { ruleMessages, validateOptions, report },
} = require("stylelint")
const ruleName = "stylus/single-line-comment-double-slash-space-after"
module.exports = {
ruleName,
rule,
meta: {
docs: {
description:
"require or disallow whitespace after the double-slash of single-line comments.",
category: "standard",
},
fixable: true,
},
}
const messages = ruleMessages(ruleName, {
expected: 'Expected whitespace after "//"',
rejected: 'Unexpected whitespace after "//"',
})
function rule(expectation, _secondary, context) {
return (root, result) => {
const validOptions = validateOptions(result, ruleName, {
actual: expectation,
possible: ["always", "never"],
})
if (!validOptions) {
return
}
root.walkComments(verifyNode)
function verifyNode(comment) {
if (!comment.raws.inline) {
return
}
// To ignore comments that are empty
if (!comment.text || comment.text.length === 0) {
return
}
const commentLeft = comment.raws.left || ""
const hasSpace = /^\s/u.test(commentLeft)
if (expectation === "always") {
if (hasSpace) {
return
}
if (context.fix) {
comment.raws.left = ` ${commentLeft}`
return
}
report({
message: messages.rejected,
node: comment,
index: 2,
result,
ruleName,
})
} else {
if (!hasSpace) {
return
}
if (context.fix) {
comment.raws.left = commentLeft.replace(/^\s+/u, "")
return
}
report({
message: messages.expected,
node: comment,
index: 2,
result,
ruleName,
})
}
}
}
}