ソースを参照

fix comments being eaten in autofmt

Jonathan Kelley 2 年 前
コミット
74421d47fd

+ 6 - 4
packages/autofmt/src/buffer.rs

@@ -126,8 +126,13 @@ impl Buffer {
 
     pub fn write_body_no_indent(&mut self, children: &[BodyNode]) -> Result {
         let last_child = children.len();
+        let iter = children.iter().peekable().enumerate();
+
+        for (idx, child) in iter {
+            if self.current_span_is_primary(child.span()) {
+                self.write_comments(child.span())?;
+            }
 
-        for (idx, child) in children.iter().enumerate() {
             match child {
                 // check if the expr is a short
                 BodyNode::RawExpr { .. } => {
@@ -138,9 +143,6 @@ impl Buffer {
                     }
                 }
                 _ => {
-                    if self.current_span_is_primary(child.span()) {
-                        self.write_comments(child.span())?;
-                    }
                     self.tabbed_line()?;
                     self.write_ident(child)?;
                 }

+ 1 - 0
packages/autofmt/src/element.rs

@@ -124,6 +124,7 @@ impl Buffer {
                 if !children.is_empty() {
                     self.write_body_indented(children)?;
                 }
+
                 self.tabbed_line()?;
             }
         }

+ 3 - 0
packages/autofmt/tests/samples.rs

@@ -30,3 +30,6 @@ twoway! ("key" => key);
 
 // Disabled because we can't handle comments on exprs yet
 twoway! ("multirsx" => multirsx);
+
+// Disabled because we can't handle comments on exprs yet
+twoway! ("commentshard" => commentshard);

+ 23 - 0
packages/autofmt/tests/samples/commentshard.rsx

@@ -0,0 +1,23 @@
+rsx! {
+    // Comments
+    div {
+        // Comments
+        class: "asdasd",
+
+        // Comments
+        "hello world",
+
+        // Comments
+        expr1,
+
+        // Comments
+        expr2,
+
+        // Comments
+        // Comments
+        // Comments
+        // Comments
+        // Comments
+        expr3
+    }
+}