/
type-test.ts
116 lines (102 loc) · 2.79 KB
/
type-test.ts
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/**
* This file is never executed. It's just here to check that the type
* definitions for this package are correct when the lint:types script is run.
*
* If the type definitions are correct, the script should pass. If they are not,
* it should fail.
*/
import type {
LinterOptions,
FormatterType,
LintResult,
LinterResult,
Plugin,
Warning,
} from 'stylelint';
import stylelint from 'stylelint';
const options: Partial<LinterOptions> = {
allowEmptyInput: true,
code: 'div { color: red }',
files: ['**/**.scss'],
formatter: 'json',
globbyOptions: {
cwd: './',
},
cache: true,
cacheLocation: './stylelint.cache.json',
ignoreDisables: true,
reportDescriptionlessDisables: true,
reportInvalidScopeDisables: true,
reportNeedlessDisables: true,
ignorePath: 'foo',
customSyntax: 'postcss-scss',
syntax: 'scss', // Removed but still accepted in type definition
config: {
overrides: [
{
files: ['**/*.scss'],
customSyntax: 'postcss-scss',
},
],
},
};
stylelint.lint(options).then((x: LinterResult) => {
const err: boolean = x.errored;
const output: string = x.output;
const results: LintResult[] = x.results;
if (results.length > 0) {
const warnings: Warning[] = results[0].warnings;
}
});
stylelint.resolveConfig('path').then((config) => stylelint.lint({ config }));
stylelint.resolveConfig('path', { config: options }).then((config) => stylelint.lint({ config }));
stylelint
.resolveConfig('path', { configBasedir: 'path' })
.then((config) => stylelint.lint({ config }));
stylelint
.resolveConfig('path', { configFile: 'path' })
.then((config) => stylelint.lint({ config }));
stylelint.resolveConfig('path', { cwd: 'path' }).then((config) => stylelint.lint({ config }));
stylelint
.resolveConfig('path', {
config: options,
configBasedir: 'path',
configFile: 'path',
cwd: 'path',
})
.then((config) => stylelint.lint({ config }));
const formatter: FormatterType = 'json';
const ruleName = 'sample-rule';
const messages = stylelint.utils.ruleMessages(ruleName, {
problem: 'This a rule problem message',
warning: (reason: string) => `This is not allowed because ${reason}`,
});
const problemMessage: string = messages.problem;
const problemFunc: (reason: string) => string = messages.warning;
const testPlugin: Plugin = (options) => {
return (root, result) => {
const validOptions = stylelint.utils.validateOptions(result, ruleName, { actual: options });
if (!validOptions) {
return;
}
stylelint.utils.checkAgainstRule(
{
ruleName: 'at-rule-empty-line-before',
ruleSettings: ['always'],
root,
},
(warning) => {
stylelint.utils.report({
ruleName,
result,
message: messages.warning(warning.text),
node: root,
index: 1,
word: 'foo',
line: 2,
});
},
);
};
};
stylelint.createPlugin(ruleName, testPlugin);