stylex_transform/transform/fold/
fold_var_declarators.rs1use swc_core::{
2 common::comments::Comments,
3 ecma::{
4 ast::{Pat, VarDeclarator},
5 visit::FoldWith,
6 },
7};
8
9use crate::StyleXTransform;
10use stylex_enums::core::TransformationCycle;
11
12impl<C> StyleXTransform<C>
13where
14 C: Comments,
15{
16 pub(crate) fn fold_var_declarators_impl(
17 &mut self,
18 mut var_declarators: Vec<VarDeclarator>,
19 ) -> Vec<VarDeclarator> {
20 match self.state.cycle {
21 TransformationCycle::Skip => return var_declarators,
22 TransformationCycle::Cleaning => {
23 var_declarators.retain(|decl| {
24 if let Pat::Ident(bind_ident) = &decl.name {
25 let decl_id = &bind_ident.sym;
26
27 if let Some(&count) = self.state.var_decl_count_map.get(decl_id) {
28 let is_used = count > 1
30 || self
31 .state
32 .style_vars_to_keep
33 .iter()
34 .any(|style_var| &style_var.0 == decl_id);
35
36 if !is_used {
37 self.state.cycle = TransformationCycle::Recounting;
38
39 decl.clone().fold_children_with(self);
40
41 self.state.cycle = TransformationCycle::Cleaning;
42 }
43
44 return is_used;
45 }
46 }
47
48 true
49 });
50 },
51 _ => {},
52 };
53
54 var_declarators.fold_children_with(self)
55 }
56}