@@ -1223,6 +1223,7 @@ pub(crate) fn format_trait(
12231223 pos_before_where,
12241224 option,
12251225 ) ?;
1226+
12261227 // If the where-clause cannot fit on the same line,
12271228 // put the where-clause on a new line
12281229 if !where_clause_str. contains ( '\n' )
@@ -1901,15 +1902,15 @@ pub(crate) fn rewrite_struct_field_prefix(
19011902 field : & ast:: FieldDef ,
19021903) -> RewriteResult {
19031904 let vis = format_visibility ( context, & field. vis ) ;
1905+ let safety = format_safety ( field. safety ) ;
19041906 let type_annotation_spacing = type_annotation_spacing ( context. config ) ;
19051907 Ok ( match field. ident {
19061908 Some ( name) => format ! (
1907- "{}{}{}:" ,
1908- vis,
1909+ "{vis}{safety}{}{}:" ,
19091910 rewrite_ident( context, name) ,
19101911 type_annotation_spacing. 0
19111912 ) ,
1912- None => vis . to_string ( ) ,
1913+ None => format ! ( "{vis}{safety}" ) ,
19131914 } )
19141915}
19151916
@@ -1994,6 +1995,7 @@ pub(crate) struct StaticParts<'a> {
19941995 safety : ast:: Safety ,
19951996 vis : & ' a ast:: Visibility ,
19961997 ident : symbol:: Ident ,
1998+ generics : Option < & ' a ast:: Generics > ,
19971999 ty : & ' a ast:: Ty ,
19982000 mutability : ast:: Mutability ,
19992001 expr_opt : Option < & ' a ptr:: P < ast:: Expr > > ,
@@ -2003,15 +2005,18 @@ pub(crate) struct StaticParts<'a> {
20032005
20042006impl < ' a > StaticParts < ' a > {
20052007 pub ( crate ) fn from_item ( item : & ' a ast:: Item ) -> Self {
2006- let ( defaultness, prefix, safety, ty, mutability, expr) = match & item. kind {
2007- ast:: ItemKind :: Static ( s) => ( None , "static" , s. safety , & s. ty , s. mutability , & s. expr ) ,
2008+ let ( defaultness, prefix, safety, ty, mutability, expr, generics) = match & item. kind {
2009+ ast:: ItemKind :: Static ( s) => {
2010+ ( None , "static" , s. safety , & s. ty , s. mutability , & s. expr , None )
2011+ }
20082012 ast:: ItemKind :: Const ( c) => (
20092013 Some ( c. defaultness ) ,
20102014 "const" ,
20112015 ast:: Safety :: Default ,
20122016 & c. ty ,
20132017 ast:: Mutability :: Not ,
20142018 & c. expr ,
2019+ Some ( & c. generics ) ,
20152020 ) ,
20162021 _ => unreachable ! ( ) ,
20172022 } ;
@@ -2020,6 +2025,7 @@ impl<'a> StaticParts<'a> {
20202025 safety,
20212026 vis : & item. vis ,
20222027 ident : item. ident ,
2028+ generics,
20232029 ty,
20242030 mutability,
20252031 expr_opt : expr. as_ref ( ) ,
@@ -2029,15 +2035,16 @@ impl<'a> StaticParts<'a> {
20292035 }
20302036
20312037 pub ( crate ) fn from_trait_item ( ti : & ' a ast:: AssocItem ) -> Self {
2032- let ( defaultness, ty, expr_opt) = match & ti. kind {
2033- ast:: AssocItemKind :: Const ( c) => ( c. defaultness , & c. ty , & c. expr ) ,
2038+ let ( defaultness, ty, expr_opt, generics ) = match & ti. kind {
2039+ ast:: AssocItemKind :: Const ( c) => ( c. defaultness , & c. ty , & c. expr , Some ( & c . generics ) ) ,
20342040 _ => unreachable ! ( ) ,
20352041 } ;
20362042 StaticParts {
20372043 prefix : "const" ,
20382044 safety : ast:: Safety :: Default ,
20392045 vis : & ti. vis ,
20402046 ident : ti. ident ,
2047+ generics,
20412048 ty,
20422049 mutability : ast:: Mutability :: Not ,
20432050 expr_opt : expr_opt. as_ref ( ) ,
@@ -2047,15 +2054,16 @@ impl<'a> StaticParts<'a> {
20472054 }
20482055
20492056 pub ( crate ) fn from_impl_item ( ii : & ' a ast:: AssocItem ) -> Self {
2050- let ( defaultness, ty, expr) = match & ii. kind {
2051- ast:: AssocItemKind :: Const ( c) => ( c. defaultness , & c. ty , & c. expr ) ,
2057+ let ( defaultness, ty, expr, generics ) = match & ii. kind {
2058+ ast:: AssocItemKind :: Const ( c) => ( c. defaultness , & c. ty , & c. expr , Some ( & c . generics ) ) ,
20522059 _ => unreachable ! ( ) ,
20532060 } ;
20542061 StaticParts {
20552062 prefix : "const" ,
20562063 safety : ast:: Safety :: Default ,
20572064 vis : & ii. vis ,
20582065 ident : ii. ident ,
2066+ generics,
20592067 ty,
20602068 mutability : ast:: Mutability :: Not ,
20612069 expr_opt : expr. as_ref ( ) ,
@@ -2070,6 +2078,14 @@ fn rewrite_static(
20702078 static_parts : & StaticParts < ' _ > ,
20712079 offset : Indent ,
20722080) -> Option < String > {
2081+ // For now, if this static (or const) has generics, then bail.
2082+ if static_parts
2083+ . generics
2084+ . is_some_and ( |g| !g. params . is_empty ( ) || !g. where_clause . is_empty ( ) )
2085+ {
2086+ return None ;
2087+ }
2088+
20732089 let colon = colon_spaces ( context. config ) ;
20742090 let mut prefix = format ! (
20752091 "{}{}{}{} {}{}{}" ,
@@ -3420,21 +3436,14 @@ impl Rewrite for ast::ForeignItem {
34203436 ref generics,
34213437 ref body,
34223438 } = * * fn_kind;
3423- if let Some ( ref body) = body {
3439+ if body. is_some ( ) {
34243440 let mut visitor = FmtVisitor :: from_context ( context) ;
34253441 visitor. block_indent = shape. indent ;
34263442 visitor. last_pos = self . span . lo ( ) ;
34273443 let inner_attrs = inner_attributes ( & self . attrs ) ;
34283444 let fn_ctxt = visit:: FnCtxt :: Foreign ;
34293445 visitor. visit_fn (
3430- visit:: FnKind :: Fn (
3431- fn_ctxt,
3432- self . ident ,
3433- sig,
3434- & self . vis ,
3435- generics,
3436- Some ( body) ,
3437- ) ,
3446+ visit:: FnKind :: Fn ( fn_ctxt, & self . ident , sig, & self . vis , generics, body) ,
34383447 & sig. decl ,
34393448 self . span ,
34403449 defaultness,
0 commit comments