use std::path::PathBuf;
use crate::fingerprint::Fingerprint;
use crate::node::NormalizedNode;
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq, Hash, serde::Serialize)]
pub enum CodeUnitKind {
Function,
Method,
Closure,
Class,
ImplBlock,
TraitImplBlock,
IfBranch,
MatchArm,
LoopBody,
Block,
}
impl fmt::Display for CodeUnitKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Function => write!(f, "function"),
Self::Method => write!(f, "method"),
Self::Closure => write!(f, "closure"),
Self::Class => write!(f, "class"),
Self::ImplBlock => write!(f, "impl block"),
Self::TraitImplBlock => write!(f, "trait impl block"),
Self::IfBranch => write!(f, "if branch"),
Self::MatchArm => write!(f, "match arm"),
Self::LoopBody => write!(f, "loop body"),
Self::Block => write!(f, "block"),
}
}
}
#[derive(Debug, Clone)]
pub struct CodeUnit {
pub kind: CodeUnitKind,
pub name: String,
pub file: PathBuf,
pub line_start: usize,
pub line_end: usize,
pub signature: NormalizedNode,
pub body: NormalizedNode,
pub fingerprint: Fingerprint,
pub node_count: usize,
pub parent_name: Option<String>,
pub is_test: bool,
}