1 | 'use strict';
|
2 |
|
3 | const _ = require('lodash');
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | module.exports = function (results) {
|
17 |
|
18 | const report = [];
|
19 |
|
20 | results.forEach((result) => {
|
21 |
|
22 | if (!result._postcssResult) {
|
23 | return;
|
24 | }
|
25 |
|
26 |
|
27 | const reported = { source: result.source || '', ranges: [] };
|
28 |
|
29 |
|
30 | const rangeData = result._postcssResult.stylelint.disabledRanges;
|
31 |
|
32 | if (!rangeData) return;
|
33 |
|
34 | const config = result._postcssResult.stylelint.config;
|
35 |
|
36 |
|
37 |
|
38 | if (!Object.values(_.get(config, 'rules', {})).some(reportDisablesForRule)) {
|
39 | return [];
|
40 | }
|
41 |
|
42 | Object.keys(rangeData).forEach((rule) => {
|
43 | rangeData[rule].forEach((range) => {
|
44 | if (!reportDisablesForRule(_.get(config, ['rules', rule], []))) return;
|
45 |
|
46 | reported.ranges.push({
|
47 | rule,
|
48 | start: range.start,
|
49 | end: range.end,
|
50 | unusedRule: rule,
|
51 | });
|
52 | });
|
53 | });
|
54 |
|
55 | reported.ranges = _.sortBy(reported.ranges, ['start', 'end']);
|
56 |
|
57 | report.push(reported);
|
58 | });
|
59 |
|
60 | return report;
|
61 | };
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 | function reportDisablesForRule(options) {
|
68 | if (!options) return false;
|
69 |
|
70 | return _.get(options[1], 'reportDisables', false);
|
71 | }
|