use rust_meth::analyzer;
pub fn print_method(m: &analyzer::Method, name_width: usize, show_doc: bool) {
match &m.detail {
Some(detail) if name_width > 0 => println!(" {:<name_width$} {detail}", m.name),
Some(detail) => println!(" {} {detail}", m.name),
None => println!(" {}", m.name),
}
if show_doc && let Some(doc) = &m.documentation {
println!();
for line in doc.lines().take(6) {
println!(" {line}");
}
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(", ")
}