From 33cb45569dfb22d4cc3c3fa859ee9b7baf1fa38f Mon Sep 17 00:00:00 2001 From: Kevin Amado Date: Fri, 11 Apr 2025 12:40:23 -0600 Subject: [PATCH] perf: control recursion depth --- src/alejandra/src/builder.rs | 28 ++++++++++++++++++++-------- src/alejandra/src/format.rs | 1 + 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/src/alejandra/src/builder.rs b/src/alejandra/src/builder.rs index a264bbf..2c4765d 100644 --- a/src/alejandra/src/builder.rs +++ b/src/alejandra/src/builder.rs @@ -16,13 +16,14 @@ pub(crate) enum Step { #[derive(Clone)] pub(crate) struct BuildCtx { - pub config: Config, - pub force_wide: bool, - pub force_wide_success: bool, - pub indentation: usize, - pub pos_old: crate::position::Position, - pub path: String, - pub vertical: bool, + pub config: Config, + pub fitting_in_single_line_depth: usize, + pub force_wide: bool, + pub force_wide_success: bool, + pub indentation: usize, + pub pos_old: crate::position::Position, + pub path: String, + pub vertical: bool, } pub(crate) fn build( @@ -262,6 +263,7 @@ fn format_wider( match element { rnix::SyntaxElement::Node(node) => { let mut build_ctx_clone = build_ctx.clone(); + build_ctx_clone.vertical = !fits_in_single_line(build_ctx, node.clone().into()); @@ -284,7 +286,17 @@ pub(crate) fn fits_in_single_line( ..build_ctx_old.clone() }; - build(&mut build_ctx, element).is_some() + build_ctx.fitting_in_single_line_depth += 1; + + if build_ctx.fitting_in_single_line_depth >= 2 { + return true; + } + + let fits = build(&mut build_ctx, element).is_some(); + + build_ctx.fitting_in_single_line_depth -= 1; + + fits } pub(crate) fn make_isolated_token( diff --git a/src/alejandra/src/format.rs b/src/alejandra/src/format.rs index 4c0e3d8..4e9df33 100644 --- a/src/alejandra/src/format.rs +++ b/src/alejandra/src/format.rs @@ -33,6 +33,7 @@ pub fn in_memory( let mut build_ctx = crate::builder::BuildCtx { config, + fitting_in_single_line_depth: 0, force_wide: false, force_wide_success: true, indentation: 0,