MCPcopy Create free account
hub / github.com/csskit/csskit / visit_length

Method visit_length

crates/csskit_transform/src/reduce_lengths.rs:47–79  ·  view source on GitHub ↗
(&mut self, length: &Length)

Source from the content-addressed store, hash-verified

45 }
46
47 fn visit_length(&mut self, length: &Length) {
48 enum ResolvedType {
49 UnitlessZero,
50 UnitedZero,
51 Resolved(f32),
52 Unresolved,
53 }
54
55 let resolved = match length {
56 Length::Zero(_) => ResolvedType::UnitlessZero,
57 _ if Into::<f32>::into(*length) == 0.0 => ResolvedType::UnitedZero,
58 _ => {
59 if let Some(px) = length.to_px() {
60 ResolvedType::Resolved(px)
61 } else {
62 ResolvedType::Unresolved
63 }
64 }
65 };
66
67 let can_reduce_to_unitless = self.unitless_zero_resolves.get() == UnitlessZeroResolves::Length;
68
69 if can_reduce_to_unitless && matches!(resolved, ResolvedType::UnitedZero | ResolvedType::Resolved(0.0)) {
70 self.transformer.replace(length, self.transformer.parse_value::<Length>("0"));
71 } else if let ResolvedType::Resolved(px) = resolved {
72 let replacement = bumpalo::format!(in self.transformer.bump(), "{}px", px);
73 let original_span = length.to_span();
74 let original_len = (original_span.end().0 - original_span.start().0) as usize;
75 if replacement.len() <= original_len {
76 self.transformer.replace(length, self.transformer.parse_value::<Length>(replacement.into_bump_str()));
77 }
78 }
79 }
80}
81
82#[cfg(test)]

Callers

nothing calls this directly

Calls 7

to_pxMethod · 0.80
replaceMethod · 0.80
getMethod · 0.45
to_spanMethod · 0.45
endMethod · 0.45
startMethod · 0.45
lenMethod · 0.45

Tested by

no test coverage detected