use tree_sitter::Node;
use crate::{token::Token, Renderer};
#[derive(Debug, Default)]
pub(crate) struct EmptyLines(usize);
impl EmptyLines {
pub(crate) fn maybe_insert<W>(
&mut self,
node: &Node<'_>,
out: &mut Renderer<'_, W>,
) -> Result<bool, std::io::Error>
where
W: std::io::Write,
{
let existing = node.start_position().row.saturating_sub(self.0);
self.0 = node.end_position().row;
match existing {
0 => return Ok(false),
1 => out.push(Token::SourceNewline)?,
_ => {
out.push(Token::SourceNewline)?;
out.push(Token::SourceNewline)?
}
}
Ok(true)
}
pub(crate) fn suppress(&mut self, node: &Node<'_>) {
self.0 = node.end_position().row;
}
}