#![forbid(unsafe_code)]
pub mod app;
pub mod cli;
pub mod config;
pub mod domain;
pub mod error;
#[cfg(feature = "eval")]
pub mod eval;
pub mod services;
pub use app::App;
pub use cli::Cli;
pub use config::Config;
pub use error::{Error, Result};
pub fn sanitize_commit_message(
raw: &str,
include_body: bool,
include_scope: bool,
) -> Result<String> {
let format = config::CommitFormat {
include_body,
include_scope,
lowercase_subject: true,
};
services::sanitizer::CommitSanitizer::sanitize(raw, &format)
}
pub fn scan_full_diff_for_secrets(diff: &str) -> Vec<services::safety::SecretMatch> {
services::safety::scan_full_diff_for_secrets(diff)
}
pub fn parse_diff_hunks(diff: &str) -> Vec<services::analyzer::DiffHunk> {
services::analyzer::DiffHunk::parse_from_diff(diff)
}
#[cfg(feature = "lang-rust")]
pub fn extract_rust_signature(source: &str) -> Option<String> {
use tree_sitter::Parser;
let mut parser = Parser::new();
if parser
.set_language(&tree_sitter_rust::LANGUAGE.into())
.is_err()
{
return None;
}
let tree = parser.parse(source, None)?;
let root = tree.root_node();
let first_child = root.child(0)?;
services::analyzer::AnalyzerService::extract_signature(first_child, source)
}
pub fn classify_diff_span(
diff: &str,
new_start: usize,
new_end: usize,
old_start: usize,
old_end: usize,
) -> Option<bool> {
services::context::ContextBuilder::classify_span_change(
diff, new_start, new_end, old_start, old_end,
)
}