From 3443a2608995a0aa627c529bc254de8640dd4cf5 Mon Sep 17 00:00:00 2001 From: Dimitar Dimitrov Date: Thu, 19 Mar 2026 17:58:47 +0000 Subject: [PATCH 1/2] Show truncation indicator when display values exceed limit Signed-off-by: Dimitar Dimitrov trailer Signed-off-by: Robert Kruszewski skip: clean up ci prebuild image usage (#7025) Can Simplify Signed-off-by: Dimitar Dimitrov repeat_n instead of take Signed-off-by: Dimitar Dimitrov --- vortex-array/src/display/mod.rs | 35 ++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/vortex-array/src/display/mod.rs b/vortex-array/src/display/mod.rs index 9c34d6642b1..13620749c0c 100644 --- a/vortex-array/src/display/mod.rs +++ b/vortex-array/src/display/mod.rs @@ -477,20 +477,27 @@ impl dyn DynArray + '_ { DisplayOptions::CommaSeparatedScalars { omit_comma_after_space, } => { - write!(f, "{}", if f.alternate() { "[\n" } else { "[" })?; + let opening_brace= if f.alternate() { "[\n" } else { "[" }; + let closing_brace = if f.alternate() { "\n]" } else { "]" }; + let sep = if *omit_comma_after_space { "," } else { ", " }; let sep = if f.alternate() { ",\n" } else { sep }; - let limit = std::cmp::min(self.len(), f.precision().unwrap_or(DISPLAY_LIMIT)); + let limit = self.len().min(f.precision().unwrap_or(DISPLAY_LIMIT)); + let is_truncated = self.len() > limit; + + let fmt_scalar = |i| self + .scalar_at(i) + .map_or_else(|e| format!(""), |s| s.to_string()); + write!( f, - "{}", - (0..limit) - .map(|i| self - .scalar_at(i) - .map_or_else(|e| format!(""), |s| s.to_string())) + "{opening_brace}{}{closing_brace}", + (0..limit.saturating_sub(3)) + .map(fmt_scalar) + .chain(std::iter::repeat_n("...".to_string(), is_truncated as usize)) + .chain((self.len().saturating_sub(3)..self.len()).map(fmt_scalar)) .format(sep) - )?; - write!(f, "{}", if f.alternate() { "\n]" } else { "]" }) + ) } DisplayOptions::TreeDisplay { buffers, @@ -583,6 +590,7 @@ mod test { use crate::arrays::BoolArray; use crate::arrays::ListArray; use crate::arrays::StructArray; + use crate::display::DISPLAY_LIMIT; use crate::dtype::FieldNames; use crate::validity::Validity; @@ -596,6 +604,15 @@ mod test { let x = buffer![1, 2, 3, 4].into_array(); assert_eq!(x.display_values().to_string(), "[1i32, 2i32, 3i32, 4i32]"); + + let x = crate::arrays::PrimitiveArray::from_iter( + 0i32..i32::try_from(DISPLAY_LIMIT).unwrap() + 1, + ) + .into_array(); + assert_eq!( + x.display_values().to_string(), + "[0i32, 1i32, 2i32, 3i32, 4i32, 5i32, 6i32, 7i32, 8i32, 9i32, 10i32, 11i32, 12i32, ..., 14i32, 15i32, 16i32]" + ); } #[test] From 060580074a316304df5ae93f626f58063bc73a80 Mon Sep 17 00:00:00 2001 From: Dimitar Dimitrov Date: Fri, 20 Mar 2026 11:14:21 +0000 Subject: [PATCH 2/2] Fix formatting Signed-off-by: Dimitar Dimitrov --- vortex-array/src/display/mod.rs | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/vortex-array/src/display/mod.rs b/vortex-array/src/display/mod.rs index 13620749c0c..a8d1a9cd6d1 100644 --- a/vortex-array/src/display/mod.rs +++ b/vortex-array/src/display/mod.rs @@ -477,7 +477,7 @@ impl dyn DynArray + '_ { DisplayOptions::CommaSeparatedScalars { omit_comma_after_space, } => { - let opening_brace= if f.alternate() { "[\n" } else { "[" }; + let opening_brace = if f.alternate() { "[\n" } else { "[" }; let closing_brace = if f.alternate() { "\n]" } else { "]" }; let sep = if *omit_comma_after_space { "," } else { ", " }; @@ -485,16 +485,19 @@ impl dyn DynArray + '_ { let limit = self.len().min(f.precision().unwrap_or(DISPLAY_LIMIT)); let is_truncated = self.len() > limit; - let fmt_scalar = |i| self - .scalar_at(i) - .map_or_else(|e| format!(""), |s| s.to_string()); - + let fmt_scalar = |i| { + self.scalar_at(i) + .map_or_else(|e| format!(""), |s| s.to_string()) + }; write!( f, "{opening_brace}{}{closing_brace}", (0..limit.saturating_sub(3)) .map(fmt_scalar) - .chain(std::iter::repeat_n("...".to_string(), is_truncated as usize)) + .chain(std::iter::repeat_n( + "...".to_string(), + is_truncated as usize + )) .chain((self.len().saturating_sub(3)..self.len()).map(fmt_scalar)) .format(sep) )