Skip to content

Commit 6d9aadb

Browse files
committed
Refactor code
1 parent 1d8a3cb commit 6d9aadb

50 files changed

Lines changed: 2889 additions & 2518 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.toml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,53 @@
22
resolver = "2"
33
members = ["libs/extractor", "bindings/devup-ui-wasm", "libs/sheet", "libs/css"]
44

5+
[workspace.lints.rust]
6+
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin_include)'] }
7+
8+
[workspace.lints.rustdoc]
9+
bare_urls = "deny"
10+
broken_intra_doc_links = "deny"
11+
12+
[workspace.lints.clippy]
13+
all = { level = "deny", priority = -1 }
14+
cargo = { level = "deny", priority = -1 }
15+
nursery = { level = "deny", priority = -1 }
16+
pedantic = { level = "deny", priority = -1 }
17+
expect_used = "deny"
18+
unwrap_used = "deny"
19+
# Explicitly excluded from strict groups because they are noisy or conflict with
20+
# this workspace's public API, Oxc AST-builder ergonomics, WASM boundary shape,
21+
# or transitive dependency graph. Everything else in all/cargo/nursery/pedantic
22+
# is denied workspace-wide.
23+
cast_possible_truncation = "allow"
24+
cast_sign_loss = "allow"
25+
default_trait_access = "allow"
26+
from_iter_instead_of_collect = "allow"
27+
implicit_hasher = "allow"
28+
inline_always = "allow"
29+
fallible_impl_from = "allow"
30+
manual_let_else = "allow"
31+
missing_errors_doc = "allow"
32+
missing_fields_in_debug = "allow"
33+
missing_panics_doc = "allow"
34+
match_same_arms = "deny"
35+
must_use_candidate = "allow"
36+
needless_for_each = "allow"
37+
needless_pass_by_value = "allow"
38+
multiple_crate_versions = "allow"
39+
option_if_let_else = "allow"
40+
range_plus_one = "deny"
41+
ref_option = "allow"
42+
redundant_closure_for_method_calls = "deny"
43+
redundant_else = "deny"
44+
redundant_pub_crate = "allow"
45+
return_self_not_must_use = "allow"
46+
similar_names = "allow"
47+
too_many_lines = "allow"
48+
trivially_copy_pass_by_ref = "allow"
49+
use_self = "allow"
50+
used_underscore_binding = "allow"
51+
552
[profile.release]
653
# Optimize for small code size (critical for WASM binary)
754
opt-level = "s"

bindings/devup-ui-wasm/Cargo.toml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ description = "Devup UI WASM bindings"
77
license = "Apache-2.0"
88
repository = "https://github.com/dev-five-git/devup-ui"
99
documentation = "https://devup-ui.com"
10+
keywords = ["css", "wasm", "react", "devup-ui"]
11+
categories = ["development-tools", "wasm", "web-programming"]
1012

1113
[lib]
1214
crate-type = ["cdylib"]
@@ -38,8 +40,8 @@ serial_test = "3.4.0"
3840
insta = "1.47.2"
3941
rstest = "0.26.1"
4042

41-
[lints.rust]
42-
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin_include)'] }
43+
[lints]
44+
workspace = true
4345

4446
[package.metadata.wasm-pack.profile.release]
4547
wasm-opt = ["-Oz", "--enable-bulk-memory", "--enable-nontrapping-float-to-int"]

bindings/devup-ui-wasm/src/lib.rs

Lines changed: 104 additions & 73 deletions
Large diffs are not rendered by default.

bindings/devup-ui-wasm/tests/wasm.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#![allow(clippy::expect_used, clippy::unwrap_used)]
2+
13
use js_sys::{Object, Reflect};
24
use sheet::theme::Typography;
35
use wasm_bindgen::JsValue;

libs/css/Cargo.toml

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,14 @@
22
name = "css"
33
version = "0.1.0"
44
edition = "2024"
5+
description = "CSS utilities and selector optimization for Devup UI"
6+
license = "Apache-2.0"
7+
repository = "https://github.com/dev-five-git/devup-ui"
8+
keywords = ["css", "selectors", "optimization", "react", "devup-ui"]
9+
categories = ["development-tools", "wasm", "web-programming"]
510

6-
[lints.rust]
7-
unexpected_cfgs = { level = "warn", check-cfg = ['cfg(tarpaulin_include)'] }
11+
[lints]
12+
workspace = true
813

914
[dependencies]
1015
phf = { version = "0.13", features = ["macros"] }

libs/css/benches/css_benchmark.rs

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ fn bench_sheet_to_classname(c: &mut Criterion) {
3030
black_box(None),
3131
black_box(None),
3232
)
33-
})
33+
});
3434
});
3535

3636
group.bench_function("with_selector", |b| {
@@ -44,7 +44,7 @@ fn bench_sheet_to_classname(c: &mut Criterion) {
4444
black_box(None),
4545
black_box(None),
4646
)
47-
})
47+
});
4848
});
4949

5050
group.bench_function("with_filename", |b| {
@@ -58,7 +58,7 @@ fn bench_sheet_to_classname(c: &mut Criterion) {
5858
black_box(None),
5959
black_box(Some("test.tsx")),
6060
)
61-
})
61+
});
6262
});
6363

6464
group.bench_function("all_params", |b| {
@@ -72,7 +72,7 @@ fn bench_sheet_to_classname(c: &mut Criterion) {
7272
black_box(Some(1)),
7373
black_box(Some("test.tsx")),
7474
)
75-
})
75+
});
7676
});
7777

7878
group.bench_function("multiple_sequential", |b| {
@@ -88,7 +88,7 @@ fn bench_sheet_to_classname(c: &mut Criterion) {
8888
sheet_to_classname("width", 0, Some("100%"), None, None, None);
8989
sheet_to_classname("height", 0, Some("50vh"), None, None, None);
9090
sheet_to_classname("border-radius", 0, Some("8px"), None, None, None);
91-
})
91+
});
9292
});
9393

9494
group.finish();
@@ -98,29 +98,29 @@ fn bench_optimize_value(c: &mut Criterion) {
9898
let mut group = c.benchmark_group("optimize_value");
9999

100100
group.bench_function("simple_keyword", |b| {
101-
b.iter(|| optimize_value(black_box("red")))
101+
b.iter(|| optimize_value(black_box("red")));
102102
});
103103

104104
group.bench_function("simple_px", |b| {
105-
b.iter(|| optimize_value(black_box("14px")))
105+
b.iter(|| optimize_value(black_box("14px")));
106106
});
107107

108108
group.bench_function("zero_unit", |b| b.iter(|| optimize_value(black_box("0px"))));
109109

110110
group.bench_function("rgba_color", |b| {
111-
b.iter(|| optimize_value(black_box("rgba(255, 0, 0, 0.5)")))
111+
b.iter(|| optimize_value(black_box("rgba(255, 0, 0, 0.5)")));
112112
});
113113

114114
group.bench_function("translate", |b| {
115-
b.iter(|| optimize_value(black_box("translate(10px, 0px)")))
115+
b.iter(|| optimize_value(black_box("translate(10px, 0px)")));
116116
});
117117

118118
group.bench_function("complex_multi", |b| {
119-
b.iter(|| optimize_value(black_box("0px 0px 10px rgba(0,0,0,0.1)")))
119+
b.iter(|| optimize_value(black_box("0px 0px 10px rgba(0,0,0,0.1)")));
120120
});
121121

122122
group.bench_function("theme_var", |b| {
123-
b.iter(|| optimize_value(black_box("$primary")))
123+
b.iter(|| optimize_value(black_box("$primary")));
124124
});
125125

126126
group.finish();
@@ -130,23 +130,23 @@ fn bench_to_kebab_case(c: &mut Criterion) {
130130
let mut group = c.benchmark_group("to_kebab_case");
131131

132132
group.bench_function("backgroundColor", |b| {
133-
b.iter(|| to_kebab_case(black_box("backgroundColor")))
133+
b.iter(|| to_kebab_case(black_box("backgroundColor")));
134134
});
135135

136136
group.bench_function("borderRadius", |b| {
137-
b.iter(|| to_kebab_case(black_box("borderRadius")))
137+
b.iter(|| to_kebab_case(black_box("borderRadius")));
138138
});
139139

140140
group.bench_function("justifyContent", |b| {
141-
b.iter(|| to_kebab_case(black_box("justifyContent")))
141+
b.iter(|| to_kebab_case(black_box("justifyContent")));
142142
});
143143

144144
group.bench_function("WebkitTransform", |b| {
145-
b.iter(|| to_kebab_case(black_box("WebkitTransform")))
145+
b.iter(|| to_kebab_case(black_box("WebkitTransform")));
146146
});
147147

148148
group.bench_function("simple_color", |b| {
149-
b.iter(|| to_kebab_case(black_box("color")))
149+
b.iter(|| to_kebab_case(black_box("color")));
150150
});
151151

152152
group.finish();
@@ -156,15 +156,15 @@ fn bench_merge_selector(c: &mut Criterion) {
156156
let mut group = c.benchmark_group("merge_selector");
157157

158158
group.bench_function("no_selector", |b| {
159-
b.iter(|| merge_selector(black_box("a"), black_box(None)))
159+
b.iter(|| merge_selector(black_box("a"), black_box(None)));
160160
});
161161

162162
group.bench_function("hover", |b| {
163-
b.iter(|| merge_selector(black_box("a"), black_box(Some(&"hover".into()))))
163+
b.iter(|| merge_selector(black_box("a"), black_box(Some(&"hover".into()))));
164164
});
165165

166166
group.bench_function("theme_dark", |b| {
167-
b.iter(|| merge_selector(black_box("a"), black_box(Some(&"theme-dark".into()))))
167+
b.iter(|| merge_selector(black_box("a"), black_box(Some(&"theme-dark".into()))));
168168
});
169169

170170
group.finish();

libs/css/src/class_map.rs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ where
3030
}
3131
#[cfg(not(target_arch = "wasm32"))]
3232
{
33-
f(&GLOBAL_CLASS_MAP.lock().unwrap())
33+
let guard = GLOBAL_CLASS_MAP
34+
.lock()
35+
.unwrap_or_else(std::sync::PoisonError::into_inner);
36+
f(&guard)
3437
}
3538
}
3639

@@ -46,21 +49,24 @@ where
4649
}
4750
#[cfg(not(target_arch = "wasm32"))]
4851
{
49-
f(&mut GLOBAL_CLASS_MAP.lock().unwrap())
52+
let mut guard = GLOBAL_CLASS_MAP
53+
.lock()
54+
.unwrap_or_else(std::sync::PoisonError::into_inner);
55+
f(&mut guard)
5056
}
5157
}
5258

5359
/// for test
5460
pub fn reset_class_map() {
55-
with_class_map_mut(|map| map.clear());
61+
with_class_map_mut(HashMap::clear);
5662
}
5763

5864
pub fn set_class_map(new_map: HashMap<String, HashMap<String, usize>>) {
5965
with_class_map_mut(|map| *map = new_map);
6066
}
6167

6268
pub fn get_class_map() -> HashMap<String, HashMap<String, usize>> {
63-
with_class_map(|map| map.clone())
69+
with_class_map(Clone::clone)
6470
}
6571

6672
#[cfg(test)]
@@ -73,7 +79,7 @@ mod tests {
7379
#[serial]
7480
fn test_set_and_get_class_map() {
7581
let mut test_map = HashMap::new();
76-
test_map.insert("".to_string(), HashMap::new());
82+
test_map.insert(String::new(), HashMap::new());
7783
set_class_map(test_map.clone());
7884
let got = get_class_map();
7985
assert_eq!(got.get(""), Some(&HashMap::new()));
@@ -83,7 +89,7 @@ mod tests {
8389
#[serial]
8490
fn test_reset_class_map() {
8591
let mut test_map = HashMap::new();
86-
test_map.insert("".to_string(), HashMap::new());
92+
test_map.insert(String::new(), HashMap::new());
8793
set_class_map(test_map);
8894
reset_class_map();
8995
let got = get_class_map();

libs/css/src/constant.rs

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ use phf::{phf_map, phf_set};
44
use regex_lite::Regex;
55
use std::sync::LazyLock;
66

7+
fn compile_regex(pattern: &str) -> Regex {
8+
Regex::new(pattern)
9+
.unwrap_or_else(|err| panic!("invalid built-in regex pattern `{pattern}`: {err}"))
10+
}
11+
712
pub(super) static SELECTOR_ORDER_MAP: LazyLock<HashMap<String, u8>> = LazyLock::new(|| {
813
let mut map = HashMap::new();
914
for (idx, selector) in [
@@ -161,43 +166,40 @@ pub(super) static ZERO_PERCENT_FUNCTION: phf::Set<&str> = phf_set! {
161166
"tan(",
162167
};
163168

164-
pub(super) static F_SPACE_RE: LazyLock<Regex> = LazyLock::new(|| Regex::new(r"\s*,\s*").unwrap());
169+
pub(super) static F_SPACE_RE: LazyLock<Regex> = LazyLock::new(|| compile_regex(r"\s*,\s*"));
165170
pub(super) static CSS_FUNCTION_RE: LazyLock<Regex> =
166-
LazyLock::new(|| Regex::new(r"^[a-zA-Z-]+(\(.*\))").unwrap());
167-
pub(super) static CHECK_QUOTES_RE: LazyLock<Regex> =
168-
LazyLock::new(|| Regex::new(r"[()\s]").unwrap());
171+
LazyLock::new(|| compile_regex(r"^[a-zA-Z-]+(\(.*\))"));
172+
pub(super) static CHECK_QUOTES_RE: LazyLock<Regex> = LazyLock::new(|| compile_regex(r"[()\s]"));
169173

170174
pub(super) static CSS_COMMENT_RE: LazyLock<Regex> =
171-
LazyLock::new(|| Regex::new(r"/\*[\s\S]*?\*/").unwrap());
175+
LazyLock::new(|| compile_regex(r"/\*[\s\S]*?\*/"));
172176

173-
pub(super) static F_DOT_RE: LazyLock<Regex> =
174-
LazyLock::new(|| Regex::new(r"(\b|,)0\.(\d+)").unwrap());
177+
pub(super) static F_DOT_RE: LazyLock<Regex> = LazyLock::new(|| compile_regex(r"(\b|,)0\.(\d+)"));
175178
pub(super) static DOT_ZERO_RE: LazyLock<Regex> =
176-
LazyLock::new(|| Regex::new(r"(\b|,)-?0\.0+([^\d])").unwrap());
179+
LazyLock::new(|| compile_regex(r"(\b|,)-?0\.0+([^\d])"));
177180

178-
pub(super) static COLOR_HASH: LazyLock<Regex> =
179-
LazyLock::new(|| Regex::new(r"#([0-9a-zA-Z]+)").unwrap());
181+
pub(super) static COLOR_HASH: LazyLock<Regex> = LazyLock::new(|| compile_regex(r"#([0-9a-zA-Z]+)"));
180182
pub(super) static INNER_TRIM_RE: LazyLock<Regex> =
181-
LazyLock::new(|| Regex::new(r"\(\s*([^)]*?)\s*\)").unwrap());
183+
LazyLock::new(|| compile_regex(r"\(\s*([^)]*?)\s*\)"));
182184

183185
pub(super) static RM_MINUS_ZERO_RE: LazyLock<Regex> = LazyLock::new(|| {
184-
Regex::new(r"-0(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg|\)|,)").unwrap()
186+
compile_regex(r"-0(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg|\)|,)")
185187
});
186188

187189
pub(super) static NUM_TRIM_RE: LazyLock<Regex> = LazyLock::new(|| {
188-
Regex::new(r"(\d(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg)?)\s+(\d)")
189-
.unwrap()
190+
compile_regex(r"(\d(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg)?)\s+(\d)")
190191
});
191192
pub(super) static ZERO_RE: LazyLock<Regex> = LazyLock::new(|| {
192-
Regex::new(r"(\b|,|\(|^|\s)-?0(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg)")
193-
.unwrap()
193+
compile_regex(
194+
r"(\b|,|\(|^|\s)-?0(px|em|rem|vh|vw|%|dvh|dvw|vmax|vmin|mm|cm|in|pt|pc|lh|ic|deg)",
195+
)
194196
});
195197

196198
pub(super) static F_RGBA_RE: LazyLock<Regex> =
197-
LazyLock::new(|| Regex::new(r"rgba\((\d+),(\d+),(\d+),(\d*\.?\d*)\)").unwrap());
199+
LazyLock::new(|| compile_regex(r"rgba\((\d+),(\d+),(\d+),(\d*\.?\d*)\)"));
198200

199201
pub(super) static F_RGB_RE: LazyLock<Regex> =
200-
LazyLock::new(|| Regex::new(r"rgb\((\d+),(\d+),(\d+)\)").unwrap());
202+
LazyLock::new(|| compile_regex(r"rgb\((\d+),(\d+),(\d+)\)"));
201203

202204
pub(super) static N_BASE_ARRAY: [char; 27] = [
203205
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',

0 commit comments

Comments
 (0)