Skip to content

Commit 2e1c60d

Browse files
committed
Fix className logic
1 parent 34c2ef8 commit 2e1c60d

File tree

6 files changed

+132
-629
lines changed

6 files changed

+132
-629
lines changed

.changeset/chilly-mice-leave.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@devup-ui/wasm": patch
3+
---
4+
5+
Refactor className logic

libs/extractor/src/lib.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2285,6 +2285,40 @@ e(o, { className: "a", bg: variable, style: { color: "blue" }, ...props })
22852285
)
22862286
.unwrap()
22872287
));
2288+
2289+
reset_class_map();
2290+
assert_debug_snapshot!(ToBTreeSet::from(
2291+
extract(
2292+
"test.jsx",
2293+
r#"import { VStack } from '@devup-ui/core'
2294+
2295+
export default function Card({
2296+
children,
2297+
className,
2298+
...props
2299+
}) {
2300+
return (
2301+
<VStack
2302+
_active={{
2303+
boxShadow: 'none',
2304+
transform: 'scale(0.95)',
2305+
}}
2306+
className={className}
2307+
{...props}
2308+
>
2309+
{children}
2310+
</VStack>
2311+
)
2312+
}
2313+
2314+
"#,
2315+
ExtractOption {
2316+
package: "@devup-ui/core".to_string(),
2317+
css_file: None
2318+
}
2319+
)
2320+
.unwrap()
2321+
));
22882322
}
22892323

22902324
#[test]

libs/extractor/src/prop_modify_utils.rs

Lines changed: 36 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -245,76 +245,67 @@ fn merge_string_expressions<'a>(
245245
let mut string_literals: std::vec::Vec<String> = vec![];
246246
let mut other_expressions = vec![];
247247
let mut prev_str = String::new();
248-
for (idx, ex) in expressions.iter().enumerate() {
248+
for ex in expressions.iter() {
249249
match ex {
250250
Expression::StringLiteral(literal) => {
251-
prev_str.push_str(
252-
format!(
253-
"{}{}",
254-
if prev_str.trim().is_empty() && other_expressions.is_empty() {
255-
""
256-
} else {
257-
" "
258-
},
259-
literal.value.trim()
260-
)
261-
.as_str(),
251+
let target_prev = prev_str.trim();
252+
let target = literal.value.trim();
253+
prev_str = format!(
254+
"{}{}{}",
255+
target_prev,
256+
if target_prev.is_empty() { "" } else { " " },
257+
target
262258
);
263259
}
264260
Expression::TemplateLiteral(template) => {
265261
for (idx, q) in template.quasis.iter().enumerate() {
266-
if !prev_str.is_empty() {
262+
let target_prev = prev_str.trim();
263+
let target = q.value.raw.trim();
264+
if idx < template.quasis.len() - 1 {
267265
string_literals.push(format!(
268-
"{}{}{}{}",
269-
prev_str.trim(),
270-
if !prev_str.trim().is_empty() { " " } else { "" },
271-
q.value.raw.trim(),
272-
if idx == template.quasis.len() - 1 {
273-
""
274-
} else {
266+
"{}{}{}{}{}",
267+
if !other_expressions.is_empty() || idx > 0 {
275268
" "
276-
}
277-
));
278-
prev_str = String::new();
279-
} else if q.tail {
280-
prev_str = q.value.raw.trim().to_string();
281-
} else {
282-
string_literals.push(format!(
283-
"{}{}{}",
284-
if idx == 0
285-
&& other_expressions.is_empty()
286-
&& string_literals.is_empty()
287-
{
288-
""
289269
} else {
290-
" "
291-
},
292-
q.value.raw.trim(),
293-
if q.value.raw.trim().is_empty() || !q.value.raw.ends_with(' ') {
294270
""
295-
} else {
271+
},
272+
target_prev,
273+
if !target_prev.is_empty() { " " } else { "" },
274+
target,
275+
if !target.is_empty() && !target.ends_with("typo-") {
296276
" "
277+
} else {
278+
""
297279
}
298280
));
299-
prev_str = String::new();
281+
} else {
282+
prev_str = q.value.raw.trim().to_string();
300283
}
301284
}
302285
other_expressions.extend(template.expressions.clone_in(ast_builder.allocator));
303286
}
304287
ex => {
288+
let target_prev = prev_str.trim();
305289
string_literals.push(format!(
306-
"{}{}",
307-
prev_str.trim(),
308-
if idx > 0 { " " } else { "" }
290+
"{}{}{}",
291+
if !other_expressions.is_empty() {
292+
" "
293+
} else {
294+
""
295+
},
296+
target_prev,
297+
if !target_prev.is_empty() { " " } else { "" }
309298
));
310299
other_expressions.push(ex.clone_in(ast_builder.allocator));
311300
prev_str = String::new();
312301
}
313302
}
314303
}
315-
if !prev_str.is_empty() {
316-
string_literals.push(prev_str.trim_end().to_string());
317-
}
304+
string_literals.push(format!(
305+
"{}{}",
306+
if !prev_str.trim().is_empty() { " " } else { "" },
307+
prev_str.trim(),
308+
));
318309
if other_expressions.is_empty() {
319310
return Some(ast_builder.expression_string_literal(
320311
SPAN,

0 commit comments

Comments
 (0)