Procházet zdrojové kódy

fix: correct comment handling for first line

Jonathan Kelley před 3 roky
rodič
revize
47f3cc2529

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

@@ -92,29 +92,18 @@ impl Buffer {
                 let start = child.span().start();
                 let line_start = start.line;
 
-                // make sure the comments are actually relevant to this element.
-                let this_line = self.src[line_start - 1].as_str();
-
-                let beginning = if this_line.len() > start.column {
-                    this_line[..start.column].trim()
-                } else {
-                    ""
-                };
-
-                if beginning.is_empty() {
+                if self.current_element_has_comments(child) {
                     for (id, line) in self.src[..line_start - 1].iter().enumerate().rev() {
                         if line.trim().starts_with("//") || line.is_empty() {
-                            comments.push(id);
+                            if id != 0 {
+                                comments.push(id);
+                            }
                         } else {
                             break;
                         }
                     }
                 }
 
-                if comments.len() == 1 && self.src[comments[0]].is_empty() {
-                    comments.pop();
-                }
-
                 let mut last_was_empty = false;
                 for comment_line in comments.drain(..).rev() {
                     let line = &self.src[comment_line];

+ 17 - 13
packages/autofmt/src/element.rs

@@ -216,6 +216,22 @@ impl Buffer {
         Ok(())
     }
 
+    pub fn current_element_has_comments(&self, child: &BodyNode) -> bool {
+        let start = child.span().start();
+        let line_start = start.line;
+
+        // make sure the comments are actually relevant to this element.
+        let this_line = self.src[line_start - 1].as_str();
+
+        let beginning = if this_line.len() > start.column {
+            this_line[..start.column].trim()
+        } else {
+            ""
+        };
+
+        beginning.is_empty()
+    }
+
     // check if the children are short enough to be on the same line
     // We don't have the notion of current line depth - each line tries to be < 80 total
     // returns the total line length if it's short
@@ -229,19 +245,7 @@ impl Buffer {
         }
 
         for child in children {
-            let start = child.span().start();
-            let line_start = start.line;
-
-            // make sure the comments are actually relevant to this element.
-            let this_line = self.src[line_start - 1].as_str();
-
-            let beginning = if this_line.len() > start.column {
-                this_line[..start.column].trim()
-            } else {
-                ""
-            };
-
-            if beginning.is_empty() {
+            if self.current_element_has_comments(child) {
                 'line: for line in self.src[..child.span().start().line - 1].iter().rev() {
                     match (line.trim().starts_with("//"), line.is_empty()) {
                         (true, _) => return None,

+ 24 - 0
packages/autofmt/tests/samples/comments.rsx

@@ -14,5 +14,29 @@ rsx! {
 
         // body
         div { "text" }
+
+        div {
+
+
+
+
+
+            // adadsasd
+
+
+
+            // adadsasd
+            // adadsasd
+
+
+
+            // adadsasd
+            // adadsasd
+            // adadsasd
+
+
+
+            div {}
+        }
     }
 }