slash-lang 0.1.0

Parser and AST for the slash-command language
Documentation
use crate::parser::ast::Priority;

pub fn infer_priority(raw: &str) -> Priority {
    let s = raw.trim_start_matches('/');
    if s.is_empty() {
        return Priority::Low;
    }
    let has_underscore = s.contains('_');
    let has_dash = s.contains('-');
    let has_upper = s.chars().any(|c| c.is_ascii_uppercase());
    let is_all_upper = s.chars().all(|c| !c.is_ascii_lowercase()) && has_upper;
    if is_all_upper {
        return Priority::Max;
    }
    if has_underscore {
        return Priority::Lowest;
    }
    if has_dash {
        return Priority::Low;
    }
    if !has_upper {
        return Priority::Low;
    }
    let first = s.chars().next().unwrap();
    if first.is_ascii_uppercase() {
        return Priority::High;
    }
    Priority::Medium
}