From f1293a8fc43e9611c11a832c8f8b53343dfc627f Mon Sep 17 00:00:00 2001 From: DropDemBits Date: Thu, 14 Dec 2023 23:04:07 -0500 Subject: [PATCH] Add newline to body when where clause is present --- .../src/handlers/generate_delegate_trait.rs | 6 ++++-- crates/syntax/src/ast/make.rs | 18 +++++++++++++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/crates/ide-assists/src/handlers/generate_delegate_trait.rs b/crates/ide-assists/src/handlers/generate_delegate_trait.rs index 37dd41f8ec9..7a60287f923 100644 --- a/crates/ide-assists/src/handlers/generate_delegate_trait.rs +++ b/crates/ide-assists/src/handlers/generate_delegate_trait.rs @@ -956,7 +956,8 @@ where impl AnotherTrait for S where T: AnotherTrait, -{}"#, +{ +}"#, ); } @@ -1446,7 +1447,8 @@ where impl AnotherTrait for S where T: AnotherTrait, -{}"#, +{ +}"#, ); } diff --git a/crates/syntax/src/ast/make.rs b/crates/syntax/src/ast/make.rs index b6e5e6a4e42..9d6ed673610 100644 --- a/crates/syntax/src/ast/make.rs +++ b/crates/syntax/src/ast/make.rs @@ -248,8 +248,11 @@ pub fn impl_( let gen_params = generic_params.map_or_else(String::new, |it| it.to_string()); + let body_newline = + if where_clause.is_some() && body.is_none() { "\n".to_string() } else { String::new() }; + let where_clause = match where_clause { - Some(pr) => pr.to_string(), + Some(pr) => format!("\n{pr}\n"), None => " ".to_string(), }; @@ -258,7 +261,9 @@ pub fn impl_( None => String::new(), }; - ast_from_text(&format!("impl{gen_params} {path_type}{gen_args}{where_clause}{{{body}}}")) + ast_from_text(&format!( + "impl{gen_params} {path_type}{gen_args}{where_clause}{{{body_newline}{body}}}" + )) } pub fn impl_trait( @@ -284,6 +289,13 @@ pub fn impl_trait( let is_negative = if is_negative { "! " } else { "" }; + let body_newline = + if (ty_where_clause.is_some() || trait_where_clause.is_some()) && body.is_none() { + "\n".to_string() + } else { + String::new() + }; + let where_clause = merge_where_clause(ty_where_clause, trait_where_clause) .map_or_else(|| " ".to_string(), |wc| format!("\n{}\n", wc)); @@ -292,7 +304,7 @@ pub fn impl_trait( None => String::new(), }; - ast_from_text(&format!("{is_unsafe}impl{gen_params} {is_negative}{path_type}{trait_gen_args} for {ty}{type_gen_args}{where_clause}{{{body}}}")) + ast_from_text(&format!("{is_unsafe}impl{gen_params} {is_negative}{path_type}{trait_gen_args} for {ty}{type_gen_args}{where_clause}{{{body_newline}{body}}}")) } pub fn impl_trait_type(bounds: ast::TypeBoundList) -> ast::ImplTraitType {