From ebb249d69e84df66f183b45b45c51e21ad0d0988 Mon Sep 17 00:00:00 2001 From: Oli Scherer Date: Wed, 23 Jul 2025 14:29:01 +0000 Subject: [PATCH] Fix formatting of const trait aliases --- src/tools/rustfmt/src/items.rs | 15 +++++++-------- src/tools/rustfmt/src/visitor.rs | 9 +-------- src/tools/rustfmt/tests/target/const_trait.rs | 5 +++++ src/tools/rustfmt/tests/target/trait.rs | 2 +- 4 files changed, 14 insertions(+), 17 deletions(-) create mode 100644 src/tools/rustfmt/tests/target/const_trait.rs diff --git a/src/tools/rustfmt/src/items.rs b/src/tools/rustfmt/src/items.rs index a2e89c10a480..ecaa4670f61d 100644 --- a/src/tools/rustfmt/src/items.rs +++ b/src/tools/rustfmt/src/items.rs @@ -1375,22 +1375,21 @@ fn rewrite_result(&self, context: &RewriteContext<'_>, shape: Shape) -> RewriteR pub(crate) fn format_trait_alias( context: &RewriteContext<'_>, - ident: symbol::Ident, + ta: &ast::TraitAlias, vis: &ast::Visibility, - generics: &ast::Generics, - generic_bounds: &ast::GenericBounds, shape: Shape, ) -> Option { - let alias = rewrite_ident(context, ident); + let alias = rewrite_ident(context, ta.ident); // 6 = "trait ", 2 = " =" let g_shape = shape.offset_left(6)?.sub_width(2)?; - let generics_str = rewrite_generics(context, alias, generics, g_shape).ok()?; + let generics_str = rewrite_generics(context, alias, &ta.generics, g_shape).ok()?; let vis_str = format_visibility(context, vis); - let lhs = format!("{vis_str}trait {generics_str} ="); + let constness = format_constness(ta.constness); + let lhs = format!("{vis_str}{constness}trait {generics_str} ="); // 1 = ";" let trait_alias_bounds = TraitAliasBounds { - generic_bounds, - generics, + generic_bounds: &ta.bounds, + generics: &ta.generics, }; rewrite_assign_rhs( context, diff --git a/src/tools/rustfmt/src/visitor.rs b/src/tools/rustfmt/src/visitor.rs index 633a17a40108..c521b497a2d9 100644 --- a/src/tools/rustfmt/src/visitor.rs +++ b/src/tools/rustfmt/src/visitor.rs @@ -499,14 +499,7 @@ pub(crate) fn visit_item(&mut self, item: &ast::Item) { } ast::ItemKind::TraitAlias(ref ta) => { let shape = Shape::indented(self.block_indent, self.config); - let rw = format_trait_alias( - &self.get_context(), - ta.ident, - &item.vis, - &ta.generics, - &ta.bounds, - shape, - ); + let rw = format_trait_alias(&self.get_context(), ta, &item.vis, shape); self.push_rewrite(item.span, rw); } ast::ItemKind::ExternCrate(..) => { diff --git a/src/tools/rustfmt/tests/target/const_trait.rs b/src/tools/rustfmt/tests/target/const_trait.rs new file mode 100644 index 000000000000..c4c88b17fc50 --- /dev/null +++ b/src/tools/rustfmt/tests/target/const_trait.rs @@ -0,0 +1,5 @@ +#![feature(trait_alias, const_trait_impl)] + +const trait Bar {} + +const trait Foo = Bar; diff --git a/src/tools/rustfmt/tests/target/trait.rs b/src/tools/rustfmt/tests/target/trait.rs index cc2b59dc6162..7a65b13d629e 100644 --- a/src/tools/rustfmt/tests/target/trait.rs +++ b/src/tools/rustfmt/tests/target/trait.rs @@ -219,4 +219,4 @@ trait Visible { pub fn g() {} } -trait Foomp = Hash; +const trait Foomp = Hash;