fix: handle comments around attributes better

This commit is contained in:
Jonathan Kelley 2022-07-05 02:06:54 -04:00
parent 4471ccba49
commit 2634755620
3 changed files with 31 additions and 8 deletions

View file

@ -136,8 +136,14 @@ impl Buffer {
let mut total = 0;
for attr in attributes {
if self.current_element_has_comments(attr.span()) {
return 100000;
if self.current_span_is_primary(attr.attr.start()) {
'line: for line in self.src[..attr.attr.start().start().line - 1].iter().rev() {
match (line.trim().starts_with("//"), line.is_empty()) {
(true, _) => return 100000,
(_, true) => continue 'line,
_ => break 'line,
}
}
}
total += match &attr.attr {
@ -182,7 +188,7 @@ impl Buffer {
pub fn retrieve_formatted_expr(&mut self, expr: &Expr) -> &str {
self.cached_formats
.entry(Location::new(expr.span().start()))
.or_insert(prettyplease::unparse_expr(expr))
.or_insert_with(|| prettyplease::unparse_expr(expr))
.as_str()
}
}

View file

@ -222,12 +222,13 @@ impl Buffer {
Ok(())
}
pub fn current_element_has_comments(&self, location: Span) -> bool {
// make sure the comments are actually relevant to this element.
// test by making sure this element is the primary element on this line
pub fn current_span_is_primary(&self, location: Span) -> bool {
let start = location.start();
let line_start = start.line;
let line_start = start.line - 1;
// make sure the comments are actually relevant to this element.
let this_line = self.src[line_start - 1].as_str();
let this_line = self.src[line_start].as_str();
let beginning = if this_line.len() > start.column {
this_line[..start.column].trim()
@ -235,6 +236,8 @@ impl Buffer {
""
};
// dbg!(beginning);
beginning.is_empty()
}
@ -251,7 +254,7 @@ impl Buffer {
}
for child in children {
if self.current_element_has_comments(child.span()) {
if self.current_span_is_primary(child.span()) {
'line: for line in self.src[..child.span().start().line - 1].iter().rev() {
match (line.trim().starts_with("//"), line.is_empty()) {
(true, _) => return None,

View file

@ -18,4 +18,18 @@ rsx! {
// This here
"hi"
}
// Comment head
div {
class: "asd",
"Jon"
}
// Comment head
div {
// Collapse
class: "asd",
"Jon"
}
}