Skip to content

Commit b97e237

Browse files
authored
feat: make nesting available as countableCollection as well (#469)
follow-up of #468 related to #466
1 parent 330af62 commit b97e237

File tree

6 files changed

+81
-8
lines changed

6 files changed

+81
-8
lines changed

src/atrules/atrules.test.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -980,7 +980,14 @@ AtRules('tracks nesting depth', () => {
980980
mode: 1,
981981
range: 1,
982982
sum: 2,
983-
items: [1, 0, 1]
983+
items: [1, 0, 1],
984+
total: 3,
985+
totalUnique: 2,
986+
unique: {
987+
0: 1,
988+
1: 2,
989+
},
990+
uniquenessRatio: 2 / 3,
984991
}
985992
assert.equal(actual, expected)
986993
})

src/declarations/declarations.test.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,15 @@ Declarations('tracks nesting depth', () => {
182182
mode: 0,
183183
range: 2,
184184
sum: 4,
185-
items: [0, 0, 1, 0, 1, 2]
185+
items: [0, 0, 1, 0, 1, 2],
186+
total: 6,
187+
totalUnique: 3,
188+
unique: {
189+
0: 3,
190+
1: 2,
191+
2: 1,
192+
},
193+
uniquenessRatio: 3 / 6,
186194
}
187195
assert.equal(actual, expected)
188196
})

src/index.js

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ export function analyze(css, options = {}) {
129129
let containerNames = new Collection(useLocations)
130130
let registeredProperties = new Collection(useLocations)
131131
let atruleNesting = new AggregateCollection()
132+
let uniqueAtruleNesting = new Collection(useLocations)
132133

133134
// Rules
134135
let totalRules = 0
@@ -140,6 +141,7 @@ export function analyze(css, options = {}) {
140141
let uniqueSelectorsPerRule = new Collection(useLocations)
141142
let uniqueDeclarationsPerRule = new Collection(useLocations)
142143
let ruleNesting = new AggregateCollection()
144+
let uniqueRuleNesting = new Collection(useLocations)
143145

144146
// Selectors
145147
let keyframeSelectors = new Collection(useLocations)
@@ -162,6 +164,7 @@ export function analyze(css, options = {}) {
162164
let pseudoClasses = new Collection(useLocations)
163165
let combinators = new Collection(useLocations)
164166
let selectorNesting = new AggregateCollection()
167+
let uniqueSelectorNesting = new Collection(useLocations)
165168

166169
// Declarations
167170
let uniqueDeclarations = new Set()
@@ -171,6 +174,7 @@ export function analyze(css, options = {}) {
171174
let importantsInKeyframes = 0
172175
let importantCustomProperties = new Collection(useLocations)
173176
let declarationNesting = new AggregateCollection()
177+
let uniqueDeclarationNesting = new Collection(useLocations)
174178

175179
// Properties
176180
let properties = new Collection(useLocations)
@@ -207,6 +211,7 @@ export function analyze(css, options = {}) {
207211
case Atrule: {
208212
totalAtRules++
209213
atruleNesting.push(nestingDepth)
214+
uniqueAtruleNesting.p(nestingDepth, node.loc)
210215

211216
let atRuleName = node.name
212217

@@ -318,6 +323,7 @@ export function analyze(css, options = {}) {
318323
declarationsPerRule.push(numDeclarations)
319324
uniqueDeclarationsPerRule.p(numDeclarations, block.loc)
320325
ruleNesting.push(nestingDepth)
326+
uniqueRuleNesting.p(nestingDepth, node.loc)
321327

322328
totalRules++
323329

@@ -355,6 +361,7 @@ export function analyze(css, options = {}) {
355361
selectorComplexities.push(complexity)
356362
uniqueSelectorComplexities.p(complexity, node.loc)
357363
selectorNesting.push(nestingDepth - 1)
364+
uniqueSelectorNesting.p(nestingDepth - 1, node.loc)
358365

359366
// #region specificity
360367
let specificity = calculateForAST(node).toArray()
@@ -713,6 +720,7 @@ export function analyze(css, options = {}) {
713720

714721
uniqueDeclarations.add(stringifyNode(node))
715722
declarationNesting.push(nestingDepth - 1)
723+
uniqueDeclarationNesting.p(nestingDepth - 1, node.loc)
716724

717725
if (node.important === true) {
718726
importantDeclarations++
@@ -856,7 +864,8 @@ export function analyze(css, options = {}) {
856864
atruleNesting.aggregate(),
857865
{
858866
items: atruleNesting.toArray(),
859-
}
867+
},
868+
uniqueAtruleNesting.c(),
860869
),
861870
},
862871
rules: {
@@ -876,7 +885,8 @@ export function analyze(css, options = {}) {
876885
ruleNesting.aggregate(),
877886
{
878887
items: ruleNesting.toArray(),
879-
}
888+
},
889+
uniqueRuleNesting.c(),
880890
),
881891
selectors: assign(
882892
selectorsPerRule.aggregate(),
@@ -925,7 +935,8 @@ export function analyze(css, options = {}) {
925935
selectorNesting.aggregate(),
926936
{
927937
items: selectorNesting.toArray(),
928-
}
938+
},
939+
uniqueSelectorNesting.c(),
929940
),
930941
id: assign(
931942
ids.c(), {
@@ -962,7 +973,8 @@ export function analyze(css, options = {}) {
962973
declarationNesting.aggregate(),
963974
{
964975
items: declarationNesting.toArray(),
965-
}
976+
},
977+
uniqueDeclarationNesting.c(),
966978
),
967979
},
968980
properties: assign(

src/index.test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,10 @@ Api("handles empty input gracefully", () => {
189189
range: 0,
190190
sum: 0,
191191
items: [],
192+
total: 0,
193+
totalUnique: 0,
194+
unique: {},
195+
uniquenessRatio: 0,
192196
}
193197
},
194198
rules: {
@@ -218,6 +222,10 @@ Api("handles empty input gracefully", () => {
218222
range: 0,
219223
sum: 0,
220224
items: [],
225+
total: 0,
226+
totalUnique: 0,
227+
unique: {},
228+
uniquenessRatio: 0,
221229
},
222230
selectors: {
223231
min: 0,
@@ -283,6 +291,10 @@ Api("handles empty input gracefully", () => {
283291
range: 0,
284292
sum: 0,
285293
items: [],
294+
total: 0,
295+
totalUnique: 0,
296+
unique: {},
297+
uniquenessRatio: 0,
286298
},
287299
id: {
288300
total: 0,
@@ -352,6 +364,10 @@ Api("handles empty input gracefully", () => {
352364
range: 0,
353365
sum: 0,
354366
items: [],
367+
total: 0,
368+
totalUnique: 0,
369+
unique: {},
370+
uniquenessRatio: 0,
355371
}
356372
},
357373
properties: {

src/rules/rules.test.js

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ Rules('should handle CSS without rules', () => {
6969
range: 0,
7070
sum: 0,
7171
items: [],
72+
total: 0,
73+
totalUnique: 0,
74+
unique: {},
75+
uniquenessRatio: 0,
7276
}
7377
}
7478
assert.equal(actual.rules, expected)
@@ -441,7 +445,15 @@ Rules('tracks nesting depth', () => {
441445
mode: 0,
442446
range: 2,
443447
sum: 3,
444-
items: [0, 0, 1, 2]
448+
items: [0, 0, 1, 2],
449+
total: 4,
450+
totalUnique: 3,
451+
unique: {
452+
0: 2,
453+
1: 1,
454+
2: 1,
455+
},
456+
uniquenessRatio: 3 / 4,
445457
}
446458
assert.equal(actual, expected)
447459
})

src/selectors/selectors.test.js

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ Selectors('handles CSS without selectors', () => {
110110
range: 0,
111111
sum: 0,
112112
items: [],
113+
total: 0,
114+
totalUnique: 0,
115+
unique: {},
116+
uniquenessRatio: 0,
113117
},
114118
}
115119
assert.equal(actual, expected)
@@ -368,6 +372,12 @@ Selectors('handles emoji selectors', () => {
368372
range: 0,
369373
sum: 0,
370374
items: [0],
375+
total: 1,
376+
totalUnique: 1,
377+
unique: {
378+
0: 1,
379+
},
380+
uniquenessRatio: 1 / 1,
371381
},
372382
}
373383
assert.equal(actual, expected)
@@ -529,7 +539,15 @@ Selectors('tracks nesting depth', () => {
529539
mode: 0,
530540
range: 2,
531541
sum: 3,
532-
items: [0, 0, 1, 2]
542+
items: [0, 0, 1, 2],
543+
total: 4,
544+
totalUnique: 3,
545+
unique: {
546+
0: 2,
547+
1: 1,
548+
2: 1,
549+
},
550+
uniquenessRatio: 3 / 4,
533551
}
534552
assert.equal(actual, expected)
535553
})

0 commit comments

Comments
 (0)