pub mod ast;
pub mod cve;
pub mod deptree;
pub mod diff;
pub mod hallucination;
pub mod install_scripts;
pub mod maintainer;
pub mod obfuscation;
pub mod static_code;
use std::path::PathBuf;
use crate::types::Finding;
pub trait Analyzer {
fn analyze(
&self,
files: &[(PathBuf, String)],
package_json: &serde_json::Value,
) -> Vec<Finding>;
}
pub(crate) fn truncate(s: &str, max: usize) -> String {
let trimmed = s.trim();
if trimmed.chars().count() <= max {
trimmed.to_string()
} else {
let truncated: String = trimmed.chars().take(max).collect();
format!("{truncated}...")
}
}