@@ -4,7 +4,7 @@ use syn::spanned::Spanned;
4
4
use syn:: { Data , Fields , Ident } ;
5
5
use synstructure:: Structure ;
6
6
7
- fn print_fields ( name : & Ident , fields : & Fields ) -> ( TokenStream , TokenStream , TokenStream ) {
7
+ fn print_fields ( name : & Ident , fields : & Fields ) -> ( TokenStream , TokenStream ) {
8
8
let string_name = name. to_string ( ) ;
9
9
let mut disps = vec ! [ quote! { let mut __printed_anything = false ; } ] ;
10
10
@@ -43,7 +43,6 @@ fn print_fields(name: &Ident, fields: &Fields) -> (TokenStream, TokenStream, Tok
43
43
#( #disps) *
44
44
__p. word( "}" ) ;
45
45
} ,
46
- quote ! { true } ,
47
46
)
48
47
}
49
48
Fields :: Unnamed ( fields_unnamed) => {
@@ -76,10 +75,9 @@ fn print_fields(name: &Ident, fields: &Fields) -> (TokenStream, TokenStream, Tok
76
75
#( #disps) *
77
76
__p. pclose( ) ;
78
77
} ,
79
- quote ! { true } ,
80
78
)
81
79
}
82
- Fields :: Unit => ( quote ! { } , quote ! { __p. word( #string_name) } , quote ! { true } ) ,
80
+ Fields :: Unit => ( quote ! { } , quote ! { __p. word( #string_name) } ) ,
83
81
}
84
82
}
85
83
@@ -89,51 +87,33 @@ pub(crate) fn print_attribute(input: Structure<'_>) -> TokenStream {
89
87
} ;
90
88
91
89
// Must be applied to an enum type.
92
- let ( code, printed ) = match & input. ast ( ) . data {
90
+ let code = match & input. ast ( ) . data {
93
91
Data :: Enum ( e) => {
94
- let ( arms, printed ) = e
92
+ let arms = e
95
93
. variants
96
94
. iter ( )
97
95
. map ( |x| {
98
96
let ident = & x. ident ;
99
- let ( pat, code, printed ) = print_fields ( ident, & x. fields ) ;
97
+ let ( pat, code) = print_fields ( ident, & x. fields ) ;
100
98
101
- (
102
- quote ! {
103
- Self :: #ident #pat => { #code}
104
- } ,
105
- quote ! {
106
- Self :: #ident #pat => { #printed}
107
- } ,
108
- )
99
+ quote ! {
100
+ Self :: #ident #pat => { #code}
101
+ }
109
102
} )
110
- . unzip :: < _ , _ , Vec < _ > , Vec < _ > > ( ) ;
103
+ . collect :: < Vec < _ > > ( ) ;
111
104
112
- (
113
- quote ! {
114
- match self {
115
- #( #arms) *
116
- }
117
- } ,
118
- quote ! {
119
- match self {
120
- #( #printed) *
121
- }
122
- } ,
123
- )
105
+ quote ! {
106
+ match self {
107
+ #( #arms) *
108
+ }
109
+ }
124
110
}
125
111
Data :: Struct ( s) => {
126
- let ( pat, code, printed) = print_fields ( & input. ast ( ) . ident , & s. fields ) ;
127
- (
128
- quote ! {
129
- let Self #pat = self ;
130
- #code
131
- } ,
132
- quote ! {
133
- let Self #pat = self ;
134
- #printed
135
- } ,
136
- )
112
+ let ( pat, code) = print_fields ( & input. ast ( ) . ident , & s. fields ) ;
113
+ quote ! {
114
+ let Self #pat = self ;
115
+ #code
116
+ }
137
117
}
138
118
Data :: Union ( u) => {
139
119
return span_error ( u. union_token . span ( ) , "can't derive PrintAttribute on unions" ) ;
@@ -144,7 +124,7 @@ pub(crate) fn print_attribute(input: Structure<'_>) -> TokenStream {
144
124
input. gen_impl ( quote ! {
145
125
#[ allow( unused) ]
146
126
gen impl PrintAttribute for @Self {
147
- fn should_render( & self ) -> bool { #printed }
127
+ fn should_render( & self ) -> bool { true }
148
128
fn print_attribute( & self , __p: & mut rustc_ast_pretty:: pp:: Printer ) { #code }
149
129
}
150
130
} )
0 commit comments