UNPKG

1.41 kBJavaScriptView Raw
1'use strict';
2
3function 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 // a[href]
31 if (expression.attributes) {
32 analyzer.incrMetric('selectorsByAttribute');
33 }
34
35 // .bar
36 if (expression.classList) {
37 analyzer.incrMetric('selectorsByClass');
38 }
39
40 // @foo
41 if (expression.id) {
42 analyzer.incrMetric('selectorsById');
43 }
44
45 // a:hover
46 if (expression.pseudos) {
47 analyzer.incrMetric('selectorsByPseudo');
48 }
49
50 // header
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
62rule.description = 'Emit CSS stats';
63module.exports = rule;