diff --git a/src/selector/extend/functions.rs b/src/selector/extend/functions.rs index c2ba5cc..a4aad5f 100644 --- a/src/selector/extend/functions.rs +++ b/src/selector/extend/functions.rs @@ -66,28 +66,25 @@ pub(crate) fn unify_complex( /// /// The selector `.D (.A .B)` is represented as the list `[[.D], [.A, .B]]`. pub(crate) fn weave( - complexes: Vec>, + mut complexes: Vec>, ) -> Vec> { - let mut prefixes: Vec> = vec![complexes.first().unwrap().clone()]; + let mut prefixes: Vec> = vec![complexes.remove(0)]; - for complex in complexes.into_iter().skip(1) { + for mut complex in complexes.into_iter() { if complex.is_empty() { continue; } - let target = complex.last().unwrap().clone(); + let target = complex.pop().unwrap(); - let complex_len = complex.len(); - - if complex_len == 1 { + if complex.is_empty() { for prefix in &mut prefixes { prefix.push(target.clone()); } continue; } - let parents: Vec = - complex.into_iter().take(complex_len - 1).collect(); + let parents: Vec = complex; let mut new_prefixes: Vec> = Vec::new(); for prefix in prefixes {