use sv_parser::RefNode;
pub(crate) fn node_text<'a>(node: &RefNode, src: &'a str) -> &'a str {
let mut start: Option<usize> = None;
let mut end: usize = 0;
for n in node.clone().into_iter() {
if let RefNode::Locate(loc) = n {
let s = loc.offset;
let e = loc.offset + loc.len;
if start.is_none() {
start = Some(s);
}
if e > end {
end = e;
}
}
}
if let Some(s) = start
&& end <= src.len()
&& s <= end
{
&src[s..end]
} else {
""
}
}
pub(crate) fn node_line(node: &RefNode) -> usize {
for n in node.clone().into_iter() {
if let RefNode::Locate(loc) = n {
return loc.line as usize;
}
}
0
}
pub(crate) fn node_span(node: &RefNode) -> (usize, usize) {
for n in node.clone().into_iter() {
if let RefNode::Locate(loc) = n {
return (loc.offset, loc.len);
}
}
(0, 0)
}