gobby-code 1.3.2

Fast Rust CLI for Gobby's code index — AST-aware search, symbol navigation, and dependency graph
Documentation
use super::super::super::*;
use super::types::*;

pub(super) fn all_input_spans(files: &[FileDoc], modules: &[ModuleDoc]) -> Vec<SourceSpan> {
    let mut spans = std::collections::BTreeSet::new();
    for file in files {
        spans.extend(file.source_spans.iter().cloned());
    }
    for module in modules {
        spans.extend(module.source_spans.iter().cloned());
    }
    spans.into_iter().collect()
}

pub(super) fn narrative_spans(
    page: &NarrativePage,
    concepts: &[ConceptModule],
    module_lookup: &std::collections::BTreeMap<&str, &ModuleDoc>,
    file_lookup: &std::collections::BTreeMap<&str, &FileDoc>,
) -> Vec<SourceSpan> {
    let mut spans = std::collections::BTreeSet::new();
    spans.extend(item_spans(
        &page.modules,
        &page.files,
        module_lookup,
        file_lookup,
    ));
    for concept_slug in &page.concepts {
        if let Some(concept) = concepts
            .iter()
            .find(|concept| &concept.slug == concept_slug)
        {
            spans.extend(item_spans(
                &concept.modules,
                &concept.files,
                module_lookup,
                file_lookup,
            ));
        }
    }
    spans.into_iter().collect()
}

pub(super) fn item_spans(
    modules: &[String],
    files: &[String],
    module_lookup: &std::collections::BTreeMap<&str, &ModuleDoc>,
    file_lookup: &std::collections::BTreeMap<&str, &FileDoc>,
) -> Vec<SourceSpan> {
    let mut spans = std::collections::BTreeSet::new();
    for module in modules {
        if let Some(module) = module_lookup.get(module.as_str()) {
            spans.extend(module.source_spans.iter().cloned());
        }
    }
    for file in files {
        if let Some(file) = file_lookup.get(file.as_str()) {
            spans.extend(file.source_spans.iter().cloned());
        }
    }
    spans.into_iter().collect()
}