codefold-core 0.8.0

Structural code reader for LLM agents — `Read`, with zoom levels. Python, TypeScript, Rust, Go.
Documentation
use tree_sitter::{Parser, Tree};

use crate::{Error, Language};

pub fn parse(language: Language, source: &str) -> Result<Tree, Error> {
    let mut parser = Parser::new();
    let ts_language = match language {
        Language::Python => tree_sitter_python::language(),
        Language::TypeScript => tree_sitter_typescript::language_typescript(),
        Language::Rust => tree_sitter_rust::language(),
        Language::Go => tree_sitter_go::language(),
    };
    parser
        .set_language(&ts_language)
        .map_err(|_| Error::Parse {
            path: Default::default(),
        })?;
    parser.parse(source, None).ok_or(Error::Parse {
        path: Default::default(),
    })
}