Skip to content
This repository has been archived by the owner on Aug 31, 2023. It is now read-only.

Commit

Permalink
feat(rome_js_formatter): object pattern formatting (#2729)
Browse files Browse the repository at this point in the history
  • Loading branch information
ematipico authored Jun 22, 2022
1 parent 8bd41b8 commit 08633d8
Show file tree
Hide file tree
Showing 14 changed files with 610 additions and 125 deletions.
5 changes: 5 additions & 0 deletions crates/rome_formatter/src/buffer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,11 @@ impl<'a, Context> VecBuffer<'a, Context> {
FormatElement::List(List::new(std::mem::take(&mut self.elements)))
}
}

/// Returns a reference to the current context
pub fn context(&self) -> &Context {
&self.state.context
}
}

impl<Context> Deref for VecBuffer<'_, Context> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
use crate::prelude::*;

use crate::utils::JsObjectPatternLike;
use rome_formatter::write;
use rome_js_syntax::JsObjectAssignmentPattern;
use rome_js_syntax::JsObjectAssignmentPatternFields;

#[derive(Debug, Clone, Default)]
pub struct FormatJsObjectAssignmentPattern;
Expand All @@ -13,18 +12,6 @@ impl FormatNodeRule<JsObjectAssignmentPattern> for FormatJsObjectAssignmentPatte
node: &JsObjectAssignmentPattern,
f: &mut JsFormatter,
) -> FormatResult<()> {
let JsObjectAssignmentPatternFields {
l_curly_token,
properties,
r_curly_token,
} = node.as_fields();

write!(
f,
[
format_delimited(&l_curly_token?, &properties.format(), &r_curly_token?,)
.soft_block_spaces()
]
)
write!(f, [JsObjectPatternLike::from(node.clone())])
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
use crate::prelude::*;
use crate::utils::JsAnyAssignmentLike;
use rome_formatter::write;

use crate::utils::FormatMemberName;
use rome_js_syntax::JsObjectAssignmentPatternProperty;
use rome_js_syntax::JsObjectAssignmentPatternPropertyFields;

#[derive(Debug, Clone, Default)]
pub struct FormatJsObjectAssignmentPatternProperty;
Expand All @@ -14,27 +12,6 @@ impl FormatNodeRule<JsObjectAssignmentPatternProperty> for FormatJsObjectAssignm
node: &JsObjectAssignmentPatternProperty,
f: &mut JsFormatter,
) -> FormatResult<()> {
let JsObjectAssignmentPatternPropertyFields {
member,
colon_token,
pattern,
init,
} = node.as_fields();

write!(
f,
[
FormatMemberName::from(member?),
colon_token.format(),
space_token(),
pattern.format(),
]
)?;

if let Some(init) = init {
write!(f, [space_token(), init.format()])?;
}

Ok(())
write!(f, [JsAnyAssignmentLike::from(node.clone())])
}
}
17 changes: 2 additions & 15 deletions crates/rome_js_formatter/src/js/bindings/object_binding_pattern.rs
Original file line number Diff line number Diff line change
@@ -1,26 +1,13 @@
use crate::prelude::*;

use crate::utils::JsObjectPatternLike;
use rome_formatter::write;
use rome_js_syntax::JsObjectBindingPattern;
use rome_js_syntax::JsObjectBindingPatternFields;

#[derive(Debug, Clone, Default)]
pub struct FormatJsObjectBindingPattern;

impl FormatNodeRule<JsObjectBindingPattern> for FormatJsObjectBindingPattern {
fn fmt_fields(&self, node: &JsObjectBindingPattern, f: &mut JsFormatter) -> FormatResult<()> {
let JsObjectBindingPatternFields {
l_curly_token,
properties,
r_curly_token,
} = node.as_fields();

write!(
f,
[
format_delimited(&l_curly_token?, &properties.format(), &r_curly_token?,)
.soft_block_spaces()
]
)
write!(f, [JsObjectPatternLike::from(node.clone())])
}
}
5 changes: 3 additions & 2 deletions crates/rome_js_formatter/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -511,8 +511,9 @@ mod test {
// use this test check if your snippet prints as you wish, without using a snapshot
fn quick_test() {
let src = r#"
bifornCringerMoshedPerplex =
bifornCringerMoshedPerplexSawder = arrayOfNumb = a = "test"; "#;
({aaaaaaaaaa,bbbbbbbbbb=cccccccccc,dddddddddd:eeeeeeeeee,ffffffffff:gggggggggg=hhhhhhhhhh,...jjjjjjjjjj} = x)
"#;
let syntax = SourceType::ts();
let tree = parse(src, 0, syntax);
let result = format_node(JsFormatContext::default(), &tree.syntax())
Expand Down
Loading

0 comments on commit 08633d8

Please sign in to comment.