@@ -138,6 +138,7 @@ export function completionsFromClassList(
138138 }
139139
140140 let items : CompletionItem [ ] = [ ]
141+ let seenVariants = new Set < string > ( )
141142
142143 if ( ! important ) {
143144 let variantOrder = 0
@@ -163,85 +164,82 @@ export function completionsFromClassList(
163164 }
164165 }
165166
166- items . push (
167- ...state . variants . flatMap ( ( variant ) => {
168- let items : CompletionItem [ ] = [ ]
169-
170- if ( variant . isArbitrary ) {
171- items . push (
172- variantItem ( {
173- label : `${ variant . name } ${ variant . hasDash ? '-' : '' } []${ sep } ` ,
174- insertTextFormat : 2 ,
175- textEditText : `${ variant . name } ${ variant . hasDash ? '-' : '' } [\${1}]${ sep } \${0}` ,
176- // command: {
177- // title: '',
178- // command: 'tailwindCSS.onInsertArbitraryVariantSnippet',
179- // arguments: [variant.name, replacementRange],
180- // },
181- } )
167+ for ( let variant of state . variants ) {
168+ if ( existingVariants . includes ( variant . name ) ) {
169+ continue
170+ }
171+
172+ if ( variant . isArbitrary ) {
173+ items . push (
174+ variantItem ( {
175+ label : `${ variant . name } ${ variant . hasDash ? '-' : '' } []${ sep } ` ,
176+ insertTextFormat : 2 ,
177+ textEditText : `${ variant . name } ${ variant . hasDash ? '-' : '' } [\${1}]${ sep } \${0}` ,
178+ // command: {
179+ // title: '',
180+ // command: 'tailwindCSS.onInsertArbitraryVariantSnippet',
181+ // arguments: [variant.name, replacementRange],
182+ // },
183+ } )
184+ )
185+ } else {
186+ let shouldSortVariants = ! semver . gte ( state . version , '2.99.0' )
187+ let resultingVariants = [ ...existingVariants , variant . name ]
188+
189+ if ( shouldSortVariants ) {
190+ let allVariants = state . variants . map ( ( { name } ) => name )
191+ resultingVariants = resultingVariants . sort (
192+ ( a , b ) => allVariants . indexOf ( b ) - allVariants . indexOf ( a )
182193 )
183- } else if ( ! existingVariants . includes ( variant . name ) ) {
184- let shouldSortVariants = ! semver . gte ( state . version , '2.99.0' )
185- let resultingVariants = [ ...existingVariants , variant . name ]
186-
187- if ( shouldSortVariants ) {
188- let allVariants = state . variants . map ( ( { name } ) => name )
189- resultingVariants = resultingVariants . sort (
190- ( a , b ) => allVariants . indexOf ( b ) - allVariants . indexOf ( a )
191- )
192- }
194+ }
193195
194- items . push (
195- variantItem ( {
196- label : `${ variant . name } ${ sep } ` ,
197- detail : variant
198- . selectors ( )
199- . map ( ( selector ) => addPixelEquivalentsToMediaQuery ( selector , rootFontSize ) )
200- . join ( ', ' ) ,
201- textEditText : resultingVariants [ resultingVariants . length - 1 ] + sep ,
202- additionalTextEdits :
203- shouldSortVariants && resultingVariants . length > 1
204- ? [
205- {
206- newText :
207- resultingVariants . slice ( 0 , resultingVariants . length - 1 ) . join ( sep ) +
208- sep ,
209- range : {
210- start : {
211- ...classListRange . start ,
212- character : classListRange . end . character - partialClassName . length ,
213- } ,
214- end : {
215- ...replacementRange . start ,
216- character : replacementRange . start . character ,
217- } ,
196+ items . push (
197+ variantItem ( {
198+ label : `${ variant . name } ${ sep } ` ,
199+ detail : variant
200+ . selectors ( )
201+ . map ( ( selector ) => addPixelEquivalentsToMediaQuery ( selector , rootFontSize ) )
202+ . join ( ', ' ) ,
203+ textEditText : resultingVariants [ resultingVariants . length - 1 ] + sep ,
204+ additionalTextEdits :
205+ shouldSortVariants && resultingVariants . length > 1
206+ ? [
207+ {
208+ newText :
209+ resultingVariants . slice ( 0 , resultingVariants . length - 1 ) . join ( sep ) + sep ,
210+ range : {
211+ start : {
212+ ...classListRange . start ,
213+ character : classListRange . end . character - partialClassName . length ,
214+ } ,
215+ end : {
216+ ...replacementRange . start ,
217+ character : replacementRange . start . character ,
218218 } ,
219219 } ,
220- ]
221- : [ ] ,
222- } )
223- )
224- }
220+ } ,
221+ ]
222+ : [ ] ,
223+ } )
224+ )
225+ }
225226
226- if ( variant . values . length ) {
227- items . push (
228- ...variant . values
229- . filter ( ( value ) => ! existingVariants . includes ( `${ variant . name } -${ value } ` ) )
230- . map ( ( value ) =>
231- variantItem ( {
232- label :
233- value === 'DEFAULT'
234- ? `${ variant . name } ${ sep } `
235- : `${ variant . name } ${ variant . hasDash ? '-' : '' } ${ value } ${ sep } ` ,
236- detail : variant . selectors ( { value } ) . join ( ', ' ) ,
237- } )
238- )
239- )
227+ for ( let value of variant . values ?? [ ] ) {
228+ if ( existingVariants . includes ( `${ variant . name } -${ value } ` ) ) {
229+ continue
240230 }
241231
242- return items
243- } )
244- )
232+ items . push (
233+ variantItem ( {
234+ label :
235+ value === 'DEFAULT'
236+ ? `${ variant . name } ${ sep } `
237+ : `${ variant . name } ${ variant . hasDash ? '-' : '' } ${ value } ${ sep } ` ,
238+ detail : variant . selectors ( { value } ) . join ( ', ' ) ,
239+ } )
240+ )
241+ }
242+ }
245243 }
246244
247245 if ( state . classList ) {
0 commit comments