Skip to content

Commit

Permalink
fix(css_formatter): don't ident css selector when comments before
Browse files Browse the repository at this point in the history
  • Loading branch information
fireairforce committed Oct 26, 2024
1 parent 6c209ef commit 98a4175
Show file tree
Hide file tree
Showing 5 changed files with 88 additions and 4 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,10 @@ our [guidelines for writing a good changelog entry](https://github.com/biomejs/b

### Formatter

### Bug fixes

- Fix [#4121](https://github.com/biomejs/biome/issues/4326), don't ident css selector when comments before. Contributed by @fireairforce

### JavaScript APIs

### Linter
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,27 @@ impl FormatRule<CssRelativeSelectorList> for FormatCssRelativeSelectorList {
// For example, a selector like `div span a` is structured like
// `[div, [span, [a]]]`, so `a` would end up double-indented if it
// was handled by the selector rather than here.
joiner.entry(&group(&indent(&formatted)));
let mut has_comments_before = false;
if let Some(relative_selector) = formatted.node()?.as_css_relative_selector() {
if let Some(computed_selector) =
relative_selector.selector()?.as_css_compound_selector()
{
if let Some(simple_selector) = computed_selector.simple_selector() {
if let Some(type_selector) = simple_selector.as_css_type_selector() {
let value_token = type_selector.ident()?.value_token()?;
if value_token.has_leading_comments() {
has_comments_before = true;
}
}
}
}
}

if has_comments_before {
joiner.entry(&group(&formatted));
} else {
joiner.entry(&group(&indent(&formatted)));
}
}

joiner.finish()
Expand Down
18 changes: 15 additions & 3 deletions crates/biome_css_formatter/tests/quick_test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,26 @@ mod language {
// use this test check if your snippet prints as you wish, without using a snapshot
fn quick_test() {
let src = r#"
.container {
&:has(.child) {
.with-comments {
zz,
/* x */
a {
color: green;
}
/* y */
b {
color: blue;
}
}
.no {
zz,
button {
color: xxx;
}
}
"#;
let parse = parse_css(src, CssParserOptions::default());
println!("{parse:#?}");
// println!("{parse:#?}");

let options = CssFormatOptions::default()
.with_line_width(LineWidth::try_from(80).unwrap())
Expand Down
16 changes: 16 additions & 0 deletions crates/biome_css_formatter/tests/specs/css/declaration_list.css
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,20 @@ a {

a {
color: red;;;;
}

.with-comments {
/* hello */
a,
/* world */
button {
color: blue;
}
}

.without-comments {
a,
button {
color: blue;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,22 @@ a {
a {
color: red;;;;
}

.with-comments {
/* hello */
a,
/* world */
button {
color: blue;
}
}

.without-comments {
a,
button {
color: blue;
}
}
```


Expand Down Expand Up @@ -103,4 +119,20 @@ a {
a {
color: red;
}

.with-comments {
/* hello */
a,
/* world */
button {
color: blue;
}
}

.without-comments {
a,
button {
color: blue;
}
}
```

0 comments on commit 98a4175

Please sign in to comment.