Skip to content

Commit e3cc585

Browse files
authored
add analysis for container names (#462)
closes #332
1 parent 1ac5341 commit e3cc585

File tree

3 files changed

+110
-3
lines changed

3 files changed

+110
-3
lines changed

src/atrules/atrules.test.js

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,85 @@ AtRules('analyzes container queries', () => {
792792
'card (inline-size > 30em) and (--responsive = true)': 1,
793793
'type(inline-size)': 1,
794794
},
795-
uniquenessRatio: 7 / 7
795+
uniquenessRatio: 7 / 7,
796+
names: {
797+
total: 3,
798+
totalUnique: 3,
799+
unique: {
800+
'card': 1,
801+
'page-layout': 1,
802+
'component-library': 1,
803+
},
804+
uniquenessRatio: 1 / 1,
805+
},
806+
}
807+
808+
assert.equal(actual, expected)
809+
})
810+
811+
AtRules('finds named containers in @container', () => {
812+
const fixture = `
813+
@container test1 (inline-size > 30em) {}
814+
@container test2 (inline-size > 30em) and style(--responsive: true) {}
815+
@container style(--responsive: true) {}
816+
`
817+
const actual = analyze(fixture).atrules.container.names
818+
const TOTAL = 2
819+
const UNIQUE = 2
820+
const expected = {
821+
total: TOTAL,
822+
totalUnique: TOTAL,
823+
unique: {
824+
'test1': 1,
825+
'test2': 1,
826+
},
827+
uniquenessRatio: UNIQUE / TOTAL,
828+
}
829+
830+
assert.equal(actual, expected)
831+
})
832+
833+
AtRules('finds named containers in the `container-name` property', () => {
834+
const fixture = `
835+
a {
836+
container-name: my-layout;
837+
container-name: my-component;
838+
}
839+
`
840+
const actual = analyze(fixture).atrules.container.names
841+
const TOTAL = 2
842+
const UNIQUE = 2
843+
const expected = {
844+
total: TOTAL,
845+
totalUnique: TOTAL,
846+
unique: {
847+
'my-layout': 1,
848+
'my-component': 1,
849+
},
850+
uniquenessRatio: UNIQUE / TOTAL,
851+
}
852+
853+
assert.equal(actual, expected)
854+
})
855+
856+
AtRules('finds named containers in the `container` shorthand', () => {
857+
const fixture = `
858+
a {
859+
container: my-layout / size;
860+
container: my-component / inline-size;
861+
}
862+
`
863+
const actual = analyze(fixture).atrules.container.names
864+
const TOTAL = 2
865+
const UNIQUE = 2
866+
const expected = {
867+
total: TOTAL,
868+
totalUnique: TOTAL,
869+
unique: {
870+
'my-layout': 1,
871+
'my-component': 1,
872+
},
873+
uniquenessRatio: UNIQUE / TOTAL,
796874
}
797875

798876
assert.equal(actual, expected)

src/index.js

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ export function analyze(css, options = {}) {
126126
let keyframes = new Collection(useLocations)
127127
let prefixedKeyframes = new Collection(useLocations)
128128
let containers = new Collection(useLocations)
129+
let containerNames = new Collection(useLocations)
129130
let registeredProperties = new Collection(useLocations)
130131

131132
// Rules
@@ -264,6 +265,12 @@ export function analyze(css, options = {}) {
264265
charsets.p(preludeStr, loc)
265266
} else if (atRuleName === 'container') {
266267
containers.p(preludeStr, loc)
268+
269+
if (prelude.children.first?.type === 'Identifier') {
270+
let containerName = prelude.children.first.name
271+
console.log(containerName)
272+
containerNames.p(containerName, loc)
273+
}
267274
// TODO: calculate complexity of container 'declaration'
268275
} else if (atRuleName === 'property') {
269276
registeredProperties.p(preludeStr, loc)
@@ -546,7 +553,18 @@ export function analyze(css, options = {}) {
546553
timingFunctions.p(stringifyNode(node), loc)
547554
}
548555
break
549-
} else if (border_radius_properties.has(basename(property))) {
556+
}
557+
else if (isProperty('container-name', property)) {
558+
containerNames.p(stringifyNode(node), loc)
559+
}
560+
else if (isProperty('container', property)) {
561+
// The first identifier is the container name
562+
// Example: container: my-layout / inline-size;
563+
if (children.first?.type === 'Identifier') {
564+
containerNames.p(children.first.name, loc)
565+
}
566+
}
567+
else if (border_radius_properties.has(basename(property))) {
550568
if (!isValueKeyword(node)) {
551569
borderRadiuses.push(stringifyNode(node), property, loc)
552570
}
@@ -769,7 +787,12 @@ export function analyze(css, options = {}) {
769787
ratio: ratio(prefixedKeyframes.size(), keyframes.size())
770788
}),
771789
}),
772-
container: containers.c(),
790+
container: assign(
791+
containers.c(),
792+
{
793+
names: containerNames.c(),
794+
}
795+
),
773796
layer: layers.c(),
774797
property: registeredProperties.c(),
775798
total: totalAtRules,

src/index.test.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,12 @@ Api("handles empty input gracefully", () => {
153153
totalUnique: 0,
154154
unique: {},
155155
uniquenessRatio: 0,
156+
names: {
157+
total: 0,
158+
totalUnique: 0,
159+
unique: {},
160+
uniquenessRatio: 0,
161+
},
156162
},
157163
layer: {
158164
total: 0,

0 commit comments

Comments
 (0)