sniff-cli 0.1.0

An exhaustive LLM-backed slop finder for codebases
Documentation
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "snake_case")]
pub enum FindingTier {
    Slop,
    KindaSlop,
    Clean,
}

impl FindingTier {
    pub fn label(self) -> &'static str {
        match self {
            FindingTier::Slop => "Slop",
            FindingTier::KindaSlop => "Kinda Slop",
            FindingTier::Clean => "Clean",
        }
    }

    pub fn json_label(self) -> &'static str {
        match self {
            FindingTier::Slop => "slop",
            FindingTier::KindaSlop => "kinda_slop",
            FindingTier::Clean => "clean",
        }
    }
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Reference {
    pub file_path: String,
    pub line: usize,
    pub snippet: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MethodRecord {
    pub name: String,
    pub file_path: String,
    pub source: String,
    pub loc: usize,
    pub param_count: usize,
    pub start_line: usize,
    pub end_line: usize,
    pub is_exported: bool,
    pub language: String,
    pub nesting_depth: usize,
    pub references: Vec<Reference>,
    pub real_ref_count: usize,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FileRecord {
    pub file_path: String,
    pub source: String,
    pub language: String,
    pub methods: Vec<MethodRecord>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum SymbolKind {
    Function,
    Method,
    Class,
    Variable,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SymbolDefinition {
    pub id: usize,
    pub name: String,
    pub kind: SymbolKind,
    pub start_line: usize,
    pub end_line: usize,
    pub is_exported: bool,
    pub owner_type: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ImportRecord {
    pub local_name: String,
    pub source_module: String,
    pub imported_name: String,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ExportRecord {
    pub exported_name: String,
    pub local_symbol_name: String,
    pub source_module: Option<String>,
    pub source_symbol_name: Option<String>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SymbolReference {
    pub name: String,
    pub line: usize,
    pub snippet: String,
    pub resolved_symbol: Option<ResolvedSymbol>,
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub enum ResolvedSymbol {
    Local(usize),
    External {
        file_path: String,
        symbol_name: String,
    },
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LocalFileSymbols {
    pub file_path: String,
    pub definitions: Vec<SymbolDefinition>,
    pub imports: Vec<ImportRecord>,
    pub exports: Vec<ExportRecord>,
    pub references: Vec<SymbolReference>,
}