diff --git a/crates/oxc_prettier/src/format/array.rs b/crates/oxc_prettier/src/format/array.rs index cfdf33189..16fd01d86 100644 --- a/crates/oxc_prettier/src/format/array.rs +++ b/crates/oxc_prettier/src/format/array.rs @@ -6,10 +6,12 @@ use oxc_allocator::Vec; use super::Format; +#[allow(clippy::enum_variant_names)] pub enum Array<'a, 'b> { ArrayExpression(&'b ArrayExpression<'a>), #[allow(unused)] TSTupleType(&'b TSTupleType<'a>), + ArrayPattern(&'b ArrayPattern<'a>), } impl<'a, 'b> Array<'a, 'b> { @@ -17,6 +19,7 @@ impl<'a, 'b> Array<'a, 'b> { match self { Self::ArrayExpression(array) => array.elements.len(), Self::TSTupleType(tuple) => tuple.element_types.len(), + Self::ArrayPattern(array) => array.elements.len(), } } } @@ -64,6 +67,24 @@ fn print_elements<'a>(p: &mut Prettier<'a>, array: &Array<'a, '_>) -> Vec<'a, Do parts.push(element.format(p)); } } + Array::ArrayPattern(array_pat) => { + for (i, element) in array_pat.elements.iter().enumerate() { + if i > 0 && i < array_pat.elements.len() { + parts.push(ss!(",")); + parts.push(Doc::Line); + } + + if let Some(binding_pat) = element { + parts.push(binding_pat.format(p)); + } + } + + if let Some(rest) = &array_pat.rest { + parts.push(ss!(",")); + parts.push(Doc::Line); + parts.push(rest.format(p)); + } + } } parts diff --git a/crates/oxc_prettier/src/format/mod.rs b/crates/oxc_prettier/src/format/mod.rs index b57b0494e..15a0d66bf 100644 --- a/crates/oxc_prettier/src/format/mod.rs +++ b/crates/oxc_prettier/src/format/mod.rs @@ -1632,7 +1632,7 @@ impl<'a> Format<'a> for RestElement<'a> { impl<'a> Format<'a> for ArrayPattern<'a> { fn format(&self, p: &mut Prettier<'a>) -> Doc<'a> { - Doc::Line + array::print_array(p, &Array::ArrayPattern(self)) } }