Skip to main content

slash_lang/parser/
priority.rs

1use crate::parser::ast::Priority;
2
3pub fn infer_priority(raw: &str) -> Priority {
4    let s = raw.trim_start_matches('/');
5    if s.is_empty() {
6        return Priority::Low;
7    }
8    let has_underscore = s.contains('_');
9    let has_dash = s.contains('-');
10    let has_upper = s.chars().any(|c| c.is_ascii_uppercase());
11    let is_all_upper = s.chars().all(|c| !c.is_ascii_lowercase()) && has_upper;
12    if is_all_upper {
13        return Priority::Max;
14    }
15    if has_underscore {
16        return Priority::Lowest;
17    }
18    if has_dash {
19        return Priority::Low;
20    }
21    if !has_upper {
22        return Priority::Low;
23    }
24    let first = s.chars().next().unwrap();
25    if first.is_ascii_uppercase() {
26        return Priority::High;
27    }
28    Priority::Medium
29}