1 | 'use strict';
|
2 |
|
3 | function rule(analyzer) {
|
4 | var selectors = 0,
|
5 | selectorsLength = 0;
|
6 |
|
7 | analyzer.setMetric('selectors');
|
8 | analyzer.setMetric('selectorLengthAvg');
|
9 |
|
10 | analyzer.setMetric('selectorsByAttribute');
|
11 | analyzer.setMetric('selectorsByClass');
|
12 | analyzer.setMetric('selectorsById');
|
13 | analyzer.setMetric('selectorsByPseudo');
|
14 | analyzer.setMetric('selectorsByTag');
|
15 |
|
16 | analyzer.on('rule', function() {
|
17 | analyzer.incrMetric('rules');
|
18 | });
|
19 |
|
20 | analyzer.on('selector', function(rule, selector, expressions) {
|
21 | selectors += 1;
|
22 | selectorsLength += expressions.length;
|
23 | });
|
24 |
|
25 | analyzer.on('declaration', function() {
|
26 | analyzer.incrMetric('declarations');
|
27 | });
|
28 |
|
29 | analyzer.on('expression', function(selector, expression) {
|
30 |
|
31 | if (expression.attributes) {
|
32 | analyzer.incrMetric('selectorsByAttribute');
|
33 | }
|
34 |
|
35 |
|
36 | if (expression.classList) {
|
37 | analyzer.incrMetric('selectorsByClass');
|
38 | }
|
39 |
|
40 |
|
41 | if (expression.id) {
|
42 | analyzer.incrMetric('selectorsById');
|
43 | }
|
44 |
|
45 |
|
46 | if (expression.pseudos) {
|
47 | analyzer.incrMetric('selectorsByPseudo');
|
48 | }
|
49 |
|
50 |
|
51 | if (expression.tag && expression.tag !== '*') {
|
52 | analyzer.incrMetric('selectorsByTag');
|
53 | }
|
54 | });
|
55 |
|
56 | analyzer.on('report', function() {
|
57 | analyzer.setMetric('selectors', selectors);
|
58 | analyzer.setMetric('selectorLengthAvg', selectorsLength / selectors);
|
59 | });
|
60 | }
|
61 |
|
62 | rule.description = 'Emit CSS stats';
|
63 | module.exports = rule;
|