use owo_colors::OwoColorize;
use rust_meth_lib::analyzer;
pub fn print_method(m: &analyzer::Method, name_width: usize, show_doc: bool) {
let padded_name = if name_width > 0 {
format!("{:<name_width$}", m.name)
} else {
m.name.clone()
};
let styled_name = padded_name.bold().green().to_string();
match &m.detail {
Some(detail) => println!(" {} {}", styled_name, detail.dimmed()),
None => println!(" {styled_name}"),
}
if show_doc && let Some(doc) = &m.documentation {
println!();
for line in doc.lines().take(6) {
println!(" {} {}", "│".dimmed(), line.dimmed());
}
if doc.lines().count() > 6 {
println!(" {} {}", "│".dimmed(), "…".dimmed());
}
if name_width > 0 {
println!();
}
}
}
pub fn print_snippet(m: &analyzer::Method) {
let Some(detail) = &m.detail else {
println!(" {}", m.name);
return;
};
println!(" {detail}");
let call_args = parse_call_args(detail);
println!(" → x.{}({})\n", m.name, call_args);
}
fn parse_call_args(detail: &str) -> String {
let Some(start) = detail.find('(') else {
return String::new();
};
let end = detail.find(')').unwrap_or(detail.len());
let params = &detail[start + 1..end];
params
.split(',')
.map(str::trim)
.filter(|p| *p != "self" && *p != "&self" && *p != "&mut self")
.map(|p| {
p.split(':').next().unwrap_or(p).trim()
})
.collect::<Vec<_>>()
.join(", ")
}