1use std::mem::take;
2
3use swc_common::EqIgnoreSpan;
4
5pub(crate) fn dedup<T>(v: &mut Vec<T>)
6where
7 T: EqIgnoreSpan,
8{
9 let mut remove_list = Vec::new();
10
11 for (i, i1) in v.iter().enumerate() {
12 for (j, j1) in v.iter().enumerate() {
13 if i < j && i1.eq_ignore_span(j1) {
14 remove_list.push(j);
15 }
16 }
17 }
18
19 if remove_list.is_empty() {
21 return;
22 }
23
24 let new = take(v)
25 .into_iter()
26 .enumerate()
27 .filter_map(|(idx, value)| {
28 if remove_list.contains(&idx) {
29 None
30 } else {
31 Some(value)
32 }
33 })
34 .collect::<Vec<_>>();
35
36 *v = new;
37}