-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathplugin-foo.js
56 lines (43 loc) · 1.25 KB
/
plugin-foo.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
import stylelint from 'stylelint';
const {
// @ts-expect-error -- TS2339: Property 'createPlugin' does not exist on type 'typeof import("...").'
createPlugin,
// @ts-expect-error -- TS2339: Property 'utils' does not exist on type 'typeof import("...")'.
utils: { report, ruleMessages, validateOptions },
} = stylelint;
const ruleName = 'plugin/foo';
const messages = ruleMessages(ruleName, {
rejected: (/** @type {string} */ selector) => `No "${selector}" selector`,
});
/** @type {(value: unknown) => boolean} */
const isString = (value) => typeof value === 'string';
/** @type {import('stylelint').Rule} */
const ruleFunction = (primary, _secondaryOptions, { fix }) => {
return (root, result) => {
const validOptions = validateOptions(result, ruleName, {
actual: primary,
possible: [isString],
});
if (!validOptions) {
return;
}
root.walkRules((rule) => {
const { selector } = rule;
if (primary === selector) return;
if (fix) {
rule.selector = primary;
return;
}
report({
result,
ruleName,
message: messages.rejected(selector),
node: rule,
word: selector,
});
});
};
};
ruleFunction.ruleName = ruleName;
ruleFunction.messages = messages;
export default createPlugin(ruleName, ruleFunction);