sniff-cli 0.1.1

An exhaustive LLM-backed slop finder for codebases
Documentation
use super::ResolveContext;
use crate::types::ResolvedSymbol;

fn resolve_go_qualified_reference(
    ctx: &ResolveContext<'_>,
    reference_name: &str,
) -> Option<ResolvedSymbol> {
    let (qualifier, member) = reference_name.rsplit_once('.')?;
    let qualifier = qualifier.trim();
    let member = member.trim();
    if qualifier.is_empty() || member.is_empty() {
        return None;
    }

    let resolved_path = super::resolve_module_path(ctx, qualifier)?;
    Some(ResolvedSymbol::External {
        file_path: resolved_path,
        symbol_name: member.to_string(),
    })
}

fn resolve_rust_qualified_reference_name(
    ctx: &ResolveContext<'_>,
    reference_name: &str,
) -> Option<ResolvedSymbol> {
    let (module_path, symbol_name) = reference_name.rsplit_once("::")?;
    let module_path = module_path.trim();
    let symbol_name = symbol_name.trim();
    if module_path.is_empty() || symbol_name.is_empty() {
        return None;
    }

    let resolved_path = super::resolve_module_path(ctx, module_path)?;
    Some(ResolvedSymbol::External {
        file_path: resolved_path,
        symbol_name: symbol_name.to_string(),
    })
}

pub(crate) fn resolve_qualified_reference(
    ctx: &ResolveContext<'_>,
    reference_name: &str,
) -> Option<ResolvedSymbol> {
    match ctx.language {
        "go" => resolve_go_qualified_reference(ctx, reference_name),
        "rust" => resolve_rust_qualified_reference_name(ctx, reference_name),
        _ => None,
    }
}