UNPKG

1.38 kBJavaScriptView Raw
1'use strict';
2
3/** @typedef {import('stylelint').RangeType} RangeType */
4/** @typedef {import('stylelint').DisableReportRange} DisableReportRange */
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 const rangeData = result._postcssResult.stylelint.disabledRanges;
22
23 /** @type {import('stylelint').StylelintDisableReportEntry} */
24 const entry = { source: result.source, ranges: [] };
25
26 Object.keys(rangeData).forEach((rule) => {
27 rangeData[rule].forEach((range) => {
28 if (range.description) return;
29
30 // Avoid duplicates from stylelint-disable comments with multiple rules.
31 const alreadyReported = entry.ranges.find((existing) => {
32 return existing.start === range.start && existing.end === range.end;
33 });
34
35 if (alreadyReported) return;
36
37 entry.ranges.push({
38 rule,
39 start: range.start,
40 end: range.end,
41 unusedRule: rule,
42 });
43 });
44 });
45
46 if (entry.ranges.length > 0) {
47 report.push(entry);
48 }
49 });
50
51 return report;
52};