Skip to main content

slash_lang/parser/
normalize.rs

1pub 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}