From abf7c207f8aa1633da597174e22c30cf17849fae Mon Sep 17 00:00:00 2001 From: dean-starkware Date: Thu, 28 Nov 2024 10:41:04 +0200 Subject: [PATCH] If any child has non-trivial trivia, do not sort (#6761) --- .../src/formatter_impl.rs | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/crates/cairo-lang-formatter/src/formatter_impl.rs b/crates/cairo-lang-formatter/src/formatter_impl.rs index ee12dccbd23..bf896a8fd79 100644 --- a/crates/cairo-lang-formatter/src/formatter_impl.rs +++ b/crates/cairo-lang-formatter/src/formatter_impl.rs @@ -1037,24 +1037,7 @@ impl<'a> FormatterImpl<'a> { OrderedHashMap::default(); for node in section_nodes { - // Check if the node has any non-trivial trivia (i.e., comments). - let has_non_whitespace_trivia = !node.descendants(self.db).all(|descendant| { - if descendant.kind(self.db) == SyntaxKind::Trivia { - ast::Trivia::from_syntax_node(self.db, descendant) - .elements(self.db) - .into_iter() - .all(|element| { - matches!( - element, - ast::Trivium::Whitespace(_) | ast::Trivium::Newline(_) - ) - }) - } else { - true - } - }); - - if has_non_whitespace_trivia { + if !self.has_only_whitespace_trivia(node) { new_children.push(node.clone()); continue; } @@ -1097,8 +1080,28 @@ impl<'a> FormatterImpl<'a> { *children = new_children; } + /// Returns whether the node has only whitespace trivia. + fn has_only_whitespace_trivia(&self, node: &SyntaxNode) -> bool { + node.descendants(self.db).all(|descendant| { + if descendant.kind(self.db) == SyntaxKind::Trivia { + ast::Trivia::from_syntax_node(self.db, descendant) + .elements(self.db) + .into_iter() + .all(|element| { + matches!(element, ast::Trivium::Whitespace(_) | ast::Trivium::Newline(_)) + }) + } else { + true + } + }) + } + /// Sorting function for `UsePathMulti` children. fn sort_inner_use_path(&self, children: &mut Vec) { + // If any child has non-trivial trivia, do not sort. + if children.iter().any(|child| !self.has_only_whitespace_trivia(child)) { + return; + } // Split list into `use` path parts and TokenComma. let (mut sorted_elements, commas): (Vec<_>, Vec<_>) = std::mem::take(children) .into_iter()