refactored counting functions to use `std::iter::successors`

pull/909/head
adamnemecek 2025-10-26 12:39:23 +07:00
parent 62ad5cecf9
commit 8832da028c
3 changed files with 12 additions and 31 deletions

@ -156,33 +156,20 @@ fn edge_between<'s, 'v>(before: &Vertex<'s, 'v>, after: &Vertex<'s, 'v>) -> Edge
/// What is the total number of AST nodes?
fn node_count(root: Option<&Syntax>) -> u32 {
let mut node = root;
let mut count = 0;
while let Some(current_node) = node {
let current_count = match current_node {
let iter = std::iter::successors(root, |node| node.next_sibling());
iter.map(|node| match node {
Syntax::List {
num_descendants, ..
} => *num_descendants,
Syntax::Atom { .. } => 1,
};
count += current_count;
node = current_node.next_sibling();
}
count
})
.sum::<u32>()
}
/// How many top-level AST nodes do we have?
fn tree_count(root: Option<&Syntax>) -> u32 {
let mut node = root;
let mut count = 0;
while let Some(current_node) = node {
count += 1;
node = current_node.next_sibling();
}
count
std::iter::successors(root, |node| node.next_sibling()).count() as _
}
pub(crate) fn mark_syntax<'a>(

@ -39,13 +39,7 @@ impl<'b, T> Stack<'b, T> {
// O(n)
pub(crate) fn size(&self) -> usize {
let mut count = 0;
let mut node = &self.head;
while let Some(next) = node {
count += 1;
node = &next.next;
}
count
std::iter::successors(self.head, |&n| n.next).count()
}
pub(crate) fn is_empty(&self) -> bool {

@ -569,7 +569,7 @@ fn from_emacs_mode_header(src: &str) -> Option<Language> {
"yaml" => Yaml,
"zig" => Zig,
_ => continue,
})
});
}
None