@@ -11,6 +11,7 @@ import { getLanguageBoundaries } from './getLanguageBoundaries'
11
11
import { resolveRange } from './resolveRange'
12
12
import dlv from 'dlv'
13
13
import { createMultiRegexp } from './createMultiRegexp'
14
+ import { rangesEqual } from './rangesEqual'
14
15
15
16
export function findAll ( re : RegExp , str : string ) : RegExpMatchArray [ ] {
16
17
let match : RegExpMatchArray
@@ -277,6 +278,13 @@ export async function findClassListsInHtmlRange(
277
278
return result
278
279
}
279
280
281
+ function dedupeClassLists ( classLists : DocumentClassList [ ] ) : DocumentClassList [ ] {
282
+ return classLists . filter (
283
+ ( classList , classListIndex ) =>
284
+ classListIndex === classLists . findIndex ( ( c ) => rangesEqual ( c . range , classList . range ) )
285
+ )
286
+ }
287
+
280
288
export async function findClassListsInRange (
281
289
state : State ,
282
290
doc : TextDocument ,
@@ -290,7 +298,10 @@ export async function findClassListsInRange(
290
298
} else {
291
299
classLists = await findClassListsInHtmlRange ( state , doc , range )
292
300
}
293
- return [ ...classLists , ...( includeCustom ? await findCustomClassLists ( state , doc , range ) : [ ] ) ]
301
+ return dedupeClassLists ( [
302
+ ...classLists ,
303
+ ...( includeCustom ? await findCustomClassLists ( state , doc , range ) : [ ] ) ,
304
+ ] )
294
305
}
295
306
296
307
export async function findClassListsInDocument (
@@ -304,17 +315,19 @@ export async function findClassListsInDocument(
304
315
let boundaries = getLanguageBoundaries ( state , doc )
305
316
if ( ! boundaries ) return [ ]
306
317
307
- return flatten ( [
308
- ...( await Promise . all (
309
- boundaries
310
- . filter ( ( b ) => b . type === 'html' || b . type === 'jsx' )
311
- . map ( ( { range } ) => findClassListsInHtmlRange ( state , doc , range ) )
312
- ) ) ,
313
- ...boundaries
314
- . filter ( ( b ) => b . type === 'css' )
315
- . map ( ( { range } ) => findClassListsInCssRange ( doc , range ) ) ,
316
- await findCustomClassLists ( state , doc ) ,
317
- ] )
318
+ return dedupeClassLists (
319
+ flatten ( [
320
+ ...( await Promise . all (
321
+ boundaries
322
+ . filter ( ( b ) => b . type === 'html' || b . type === 'jsx' )
323
+ . map ( ( { range } ) => findClassListsInHtmlRange ( state , doc , range ) )
324
+ ) ) ,
325
+ ...boundaries
326
+ . filter ( ( b ) => b . type === 'css' )
327
+ . map ( ( { range } ) => findClassListsInCssRange ( doc , range ) ) ,
328
+ await findCustomClassLists ( state , doc ) ,
329
+ ] )
330
+ )
318
331
}
319
332
320
333
export function findHelperFunctionsInDocument (
0 commit comments