Skip to content

Commit 7bd0709

Browse files
committed
Ensure class suggestions are unique
1 parent 2f5e2f2 commit 7bd0709

File tree

1 file changed

+19
-20
lines changed

1 file changed

+19
-20
lines changed

packages/tailwindcss/src/intellisense.ts

+19-20
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,18 @@ export type ClassEntry = [string, ClassMetadata]
2020
const IS_FRACTION = /^\d+\/\d+$/
2121

2222
export function getClassList(design: DesignSystem): ClassEntry[] {
23-
let list: ClassItem[] = []
23+
let items = new DefaultMap<string, ClassItem>((utility) => ({
24+
name: utility,
25+
utility,
26+
fraction: false,
27+
modifiers: [],
28+
}))
2429

2530
// Static utilities only work as-is
2631
for (let utility of design.utilities.keys('static')) {
27-
list.push({
28-
name: utility,
29-
utility,
30-
fraction: false,
31-
modifiers: [],
32-
})
32+
let item = items.get(utility)
33+
item.fraction = false
34+
item.modifiers = []
3335
}
3436

3537
// Functional utilities have their own list of completions
@@ -42,28 +44,25 @@ export function getClassList(design: DesignSystem): ClassEntry[] {
4244

4345
let name = value === null ? utility : `${utility}-${value}`
4446

45-
list.push({
46-
name,
47-
utility,
48-
fraction,
49-
modifiers: group.modifiers,
50-
})
47+
let item = items.get(name)
48+
item.utility = utility
49+
item.fraction ||= fraction
50+
item.modifiers.push(...group.modifiers)
5151

5252
if (group.supportsNegative) {
53-
list.push({
54-
name: `-${name}`,
55-
utility: `-${utility}`,
56-
fraction,
57-
modifiers: group.modifiers,
58-
})
53+
let item = items.get(`-${name}`)
54+
item.utility = `-${utility}`
55+
item.fraction ||= fraction
56+
item.modifiers.push(...group.modifiers)
5957
}
6058
}
6159
}
6260
}
6361

64-
if (list.length === 0) return []
62+
if (items.size === 0) return []
6563

6664
// Sort utilities by their class name
65+
let list = Array.from(items.values())
6766
list.sort((a, b) => compare(a.name, b.name))
6867

6968
let entries = sortFractionsLast(list)

0 commit comments

Comments
 (0)