Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/fuzzy-dragons-invent.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@biomejs/biome": patch
---

Fixed [#7948](https://github.com/biomejs/biome/issues/7948): The `useReadonlyClassProperties` code fix when `checkAllProperties` is enabled will no longer insert a newline after `readonly` and the class property.
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ impl Rule for UseReadonlyClassProperties {
);

if let Some(modified_member) =
extract_property_member_name_trimmed_whitespace(member_name.clone())
extract_class_member_name_trimmed_whitespace(member_name.clone())
{
let mut builder =
make::js_property_class_member(replace_modifiers, modified_member);
Expand Down Expand Up @@ -353,10 +353,10 @@ fn collect_non_readonly_constructor_parameters(
.collect()
}

/// Removes leading whitespace from `#privateProperty` names. Without this, the name might include
/// unwanted whitespace (e.g., "\n #privateProperty"). This ensures that when adding modifiers like
/// `readonly`, they are appended correctly without being affected by the whitespace.
fn extract_property_member_name_trimmed_whitespace(
/// Removes leading trivia from class member names. Without this, the name might include
/// unwanted trivia (e.g., "\n #privateProperty"). This ensures that when adding modifiers like
/// `readonly`, they are appended correctly without being affected by the trivia.
fn extract_class_member_name_trimmed_whitespace(
member_name: AnyJsClassMemberName,
) -> Option<AnyJsClassMemberName> {
match member_name {
Expand All @@ -367,6 +367,13 @@ fn extract_property_member_name_trimmed_whitespace(

Some(AnyJsClassMemberName::JsPrivateClassMemberName(trimmed))
}
AnyJsClassMemberName::JsLiteralMemberName(name) => {
let value = name.value().ok()?;
let new_value = value.with_leading_trivia([]);
let trimmed = name.replace_token_discard_trivia(value, new_value)?;

Some(AnyJsClassMemberName::JsLiteralMemberName(trimmed))
}
_ => Some(member_name),
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ class Example1 {
private prop1: number = 42;
protected prop2: string;
public prop3: string;
prop4: string;
}

class Example2 {
Expand Down
Loading