gobby-code 1.3.3

Fast Rust CLI for Gobby's code index — AST-aware search, symbol navigation, and dependency graph
Documentation
pub(super) fn degraded_sources(degraded: bool) -> Vec<String> {
    if degraded {
        vec!["model-unavailable".to_string()]
    } else {
        Vec::new()
    }
}

pub(super) fn concept_title(module: &str) -> String {
    module
        .rsplit('/')
        .next()
        .unwrap_or(module)
        .split(['_', '-'])
        .filter(|part| !part.is_empty())
        .map(|part| {
            let mut chars = part.chars();
            match chars.next() {
                Some(first) => first.to_uppercase().chain(chars).collect::<String>(),
                None => String::new(),
            }
        })
        .collect::<Vec<_>>()
        .join(" ")
}

pub(super) fn concept_doc_path(slug: &str) -> String {
    format!("{}.md", concept_doc_stem(slug))
}

pub(super) fn concept_doc_stem(slug: &str) -> String {
    format!("code/concepts/{slug}")
}

pub(super) fn narrative_doc_path(slug: &str) -> String {
    format!("code/narrative/{slug}.md")
}

pub(super) fn slugify(value: &str) -> String {
    let mut slug = String::new();
    let mut previous_dash = false;
    for raw in value.chars() {
        let ch = raw.to_ascii_lowercase();
        if ch.is_ascii_alphanumeric() {
            slug.push(ch);
            previous_dash = false;
        } else if !previous_dash && !slug.is_empty() {
            slug.push('-');
            previous_dash = true;
        }
    }
    slug.trim_matches('-').to_string()
}