symgraph 2026.6.14

Semantic code intelligence library and MCP server - build knowledge graphs of codebases
Documentation
//! Symbol search handler

use crate::db::Database;
use crate::mcp::types::SearchRequest;
use crate::ops::constants::DEFAULT_SEARCH_LIMIT;
use crate::ops::format::format_node_with_signature;

pub fn handle_search(db: &Database, req: &SearchRequest) -> Result<String, String> {
    let semantic = req.semantic.unwrap_or(false);
    let results = if semantic {
        db.semantic_search(&req.query, DEFAULT_SEARCH_LIMIT)
            .map_err(|e| e.to_string())?
    } else {
        db.search_nodes(&req.query, None, DEFAULT_SEARCH_LIMIT)
            .map_err(|e| e.to_string())?
    };

    if results.is_empty() {
        return Ok(format!("No symbols found matching '{}'", req.query));
    }

    let mode = if semantic { "semantic " } else { "" };
    let mut output = format!(
        "Found {} symbols ({}match) for '{}':\n\n",
        results.len(),
        mode,
        req.query
    );

    for node in results {
        output.push_str(&format_node_with_signature(&node));
    }

    Ok(output)
}