use crate::query;
use super::refs::{render_refs_compact, render_refs_text};
fn read_def_line(model: &query::ReadModel) -> String {
let sites = &model.refs.sites;
if sites.is_empty() {
return "def: -".to_string();
}
let rendered: Vec<String> = sites
.iter()
.enumerate()
.map(|(i, s)| match (i, &model.span) {
(0, Some(sp)) => format!("{}:{}-{}", sp.file, sp.start_line, sp.end_line),
_ => format!("{}:{}", s.file, s.line),
})
.collect();
format!("def: {}", rendered.join(" "))
}
pub fn render_read_text(model: &query::ReadModel) -> String {
let rendered = render_refs_text(&model.refs);
let mut out: Vec<String> = rendered.split('\n').map(str::to_string).collect();
if out.len() > 1 {
out[1] = read_def_line(model);
}
if let Some(sp) = &model.span {
out.splice(2..2, sp.source.split('\n').map(str::to_string));
}
out.join("\n")
}
pub fn render_read_compact(model: &query::ReadModel) -> String {
let rendered = render_refs_compact(&model.refs);
let mut out: Vec<String> = rendered.split('\n').map(str::to_string).collect();
if out.len() > 1 {
out[1] = read_def_line(model);
}
out.join("\n")
}