slash_lang/parser/
normalize.rs1pub fn normalize_name(raw: &str) -> String {
2 let s = raw.trim_start_matches('/');
3 let mut out = String::new();
4 for ch in s.chars() {
5 if ch == '_' || ch == '-' || ch == '.' || ch == '/' {
6 continue;
7 }
8 if ch.is_ascii_uppercase() {
9 out.push(ch.to_ascii_lowercase());
10 } else {
11 out.push(ch);
12 }
13 }
14 out
15}
16
17pub fn parse_test_id(raw: &str) -> Option<u32> {
18 let s = raw.trim_start_matches('/');
19 if !s.to_ascii_lowercase().starts_with("test") {
20 return None;
21 }
22 let tail = s.get(4..)?;
23 let digits = tail.trim_start_matches(['-', '_']);
24 if digits.is_empty() {
25 return None;
26 }
27 digits.parse::<u32>().ok()
28}