@@ -138,6 +138,7 @@ export function completionsFromClassList(
138
138
}
139
139
140
140
let items : CompletionItem [ ] = [ ]
141
+ let seenVariants = new Set < string > ( )
141
142
142
143
if ( ! important ) {
143
144
let variantOrder = 0
@@ -163,85 +164,82 @@ export function completionsFromClassList(
163
164
}
164
165
}
165
166
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 )
182
193
)
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
+ }
193
195
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 ,
218
218
} ,
219
219
} ,
220
- ]
221
- : [ ] ,
222
- } )
223
- )
224
- }
220
+ } ,
221
+ ]
222
+ : [ ] ,
223
+ } )
224
+ )
225
+ }
225
226
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
240
230
}
241
231
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
+ }
245
243
}
246
244
247
245
if ( state . classList ) {
0 commit comments