UNPKG

1.49 kBJavaScriptView Raw
1'use strict';
2
3/** @typedef {import('stylelint').RangeType} RangeType */
4/** @typedef {import('stylelint').UnusedRange} UnusedRange */
5/** @typedef {import('stylelint').StylelintDisableOptionsReport} StylelintDisableOptionsReport */
6
7/**
8 * @param {import('stylelint').StylelintResult[]} results
9 * @returns {StylelintDisableOptionsReport}
10 */
11module.exports = function (results) {
12 /** @type {StylelintDisableOptionsReport} */
13 const report = [];
14
15 results.forEach((result) => {
16 // File with `CssSyntaxError` have not `_postcssResult`
17 if (!result._postcssResult) {
18 return;
19 }
20
21 if (!result._postcssResult.stylelint.config) {
22 // Linting error
23 return;
24 }
25
26 const configRules = result._postcssResult.stylelint.config.rules || {};
27
28 const usedRules = new Set(Object.keys(configRules));
29
30 usedRules.add('all');
31
32 /** @type {import('stylelint').StylelintDisableReportEntry} */
33 const sourceReport = { source: result.source, ranges: [] };
34 const rangeData = result._postcssResult.stylelint.disabledRanges;
35 const disabledRules = Object.keys(rangeData);
36
37 disabledRules.forEach((rule) => {
38 if (usedRules.has(rule)) {
39 return;
40 }
41
42 rangeData[rule].forEach((range) => {
43 if (!range.strictStart && !range.strictEnd) {
44 return;
45 }
46
47 sourceReport.ranges.push({
48 unusedRule: rule,
49 start: range.start,
50 end: range.end,
51 });
52 });
53 });
54
55 if (sourceReport.ranges.length > 0) {
56 report.push(sourceReport);
57 }
58 });
59
60 return report;
61};