Skip to content

Commit

Permalink
feat(intellisense/context): optimize duplicated items
Browse files Browse the repository at this point in the history
  • Loading branch information
xlboy committed Aug 13, 2024
1 parent 1b76063 commit 1cd784c
Showing 1 changed file with 40 additions and 38 deletions.
78 changes: 40 additions & 38 deletions packages/intellisense/src/internal/create-context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,50 +79,52 @@ export function createIntellisenseContext(
) => {
if (completion.type === 'class' && isIgnored(completion.name)) return

if (
const isDuplicate =
target.get(completion.name) &&
JSON.stringify(target.get(completion.name), ['type', 'name', 'source']) ===
JSON.stringify(completion, ['type', 'name', 'source'])
) {
if (isDuplicate) {
console.warn(`Duplicate ${completion.type}: ${JSON.stringify(completion.name)}`)
} else {
completion.value ||= completion.name
completion.filter ||= spacify(completion.value)
completion.description ||= ''

target.set(completion.name, completion as T)
suggestions.push(completion as T)

if (modifiers && modifiers.length) {
suggestions.push({
...(completion as T),
name: completion.name + '/',
value: completion.value + '/',
filter: spacify(completion.value + '/'),
description: '',
})
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
;(completion as any).modifiers = modifiers
.map(({ modifier, theme, color, label }, position) => ({
...(completion as Omit<T, 'modifiers'>),
position,
name: `${completion.name}/${modifier}`,
value: `${completion.value}/${modifier}`,
filter: spacify(modifier),
description: label || '',
theme,
color: color && parseColor(color) ? color : undefined,
}))
.filter((suggestion) => {
if (completion.type === 'class' && isIgnored(completion.name)) {
return false
}
suggestions.splice(suggestions.indexOf(target.get(completion.name) as T), 1)
target.delete(completion.name)
}

target.set(suggestion.name, suggestion as T)
completion.value ||= completion.name
completion.filter ||= spacify(completion.value)
completion.description ||= ''

return true
})
}
target.set(completion.name, completion as T)
suggestions.push(completion as T)

if (modifiers && modifiers.length) {
suggestions.push({
...(completion as T),
name: completion.name + '/',
value: completion.value + '/',
filter: spacify(completion.value + '/'),
description: '',
})
// eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
;(completion as any).modifiers = modifiers
.map(({ modifier, theme, color, label }, position) => ({
...(completion as Omit<T, 'modifiers'>),
position,
name: `${completion.name}/${modifier}`,
value: `${completion.value}/${modifier}`,
filter: spacify(modifier),
description: label || '',
theme,
color: color && parseColor(color) ? color : undefined,
}))
.filter((suggestion) => {
if (completion.type === 'class' && isIgnored(completion.name)) {
return false
}

target.set(suggestion.name, suggestion as T)

return true
})
}
}

Expand Down

0 comments on commit 1cd784c

Please sign in to comment.