diff --git a/packages/autofmt/src/buffer.rs b/packages/autofmt/src/buffer.rs index 8fa4c3c1d..fc45e622e 100644 --- a/packages/autofmt/src/buffer.rs +++ b/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]; diff --git a/packages/autofmt/src/element.rs b/packages/autofmt/src/element.rs index 1279bdb7c..70a70b0d2 100644 --- a/packages/autofmt/src/element.rs +++ b/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, diff --git a/packages/autofmt/tests/samples/comments.rsx b/packages/autofmt/tests/samples/comments.rsx index ce5e39937..5cf18edc0 100644 --- a/packages/autofmt/tests/samples/comments.rsx +++ b/packages/autofmt/tests/samples/comments.rsx @@ -14,5 +14,29 @@ rsx! { // body div { "text" } + + div { + + + + + + // adadsasd + + + + // adadsasd + // adadsasd + + + + // adadsasd + // adadsasd + // adadsasd + + + + div {} + } } }