From 8832da028c3a8dbdf3d33e221fed1a7a942a7fb9 Mon Sep 17 00:00:00 2001 From: adamnemecek Date: Sun, 26 Oct 2025 12:39:23 -0700 Subject: [PATCH] refactored counting functions to use `std::iter::successors` --- src/diff/dijkstra.rs | 33 ++++++++++----------------------- src/diff/stack.rs | 8 +------- src/parse/guess_language.rs | 2 +- 3 files changed, 12 insertions(+), 31 deletions(-) diff --git a/src/diff/dijkstra.rs b/src/diff/dijkstra.rs index 8fe86748c..627e7280d 100644 --- a/src/diff/dijkstra.rs +++ b/src/diff/dijkstra.rs @@ -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 { - Syntax::List { - num_descendants, .. - } => *num_descendants, - Syntax::Atom { .. } => 1, - }; - count += current_count; - - node = current_node.next_sibling(); - } - - count + let iter = std::iter::successors(root, |node| node.next_sibling()); + + iter.map(|node| match node { + Syntax::List { + num_descendants, .. + } => *num_descendants, + Syntax::Atom { .. } => 1, + }) + .sum::() } /// 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>( diff --git a/src/diff/stack.rs b/src/diff/stack.rs index 6ca1d379f..1e845c223 100644 --- a/src/diff/stack.rs +++ b/src/diff/stack.rs @@ -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 { diff --git a/src/parse/guess_language.rs b/src/parse/guess_language.rs index 565b4dee1..d2c96dd08 100644 --- a/src/parse/guess_language.rs +++ b/src/parse/guess_language.rs @@ -569,7 +569,7 @@ fn from_emacs_mode_header(src: &str) -> Option { "yaml" => Yaml, "zig" => Zig, _ => continue, - }) + }); } None