@@ -130,6 +130,7 @@ fn expand_requires_tts(
130
130
) -> Result < TokenStream , ErrorGuaranteed > {
131
131
let feature_span = ecx. with_def_site_ctxt ( attr_span) ;
132
132
expand_contract_clause ( ecx, attr_span, annotated, |new_tts| {
133
+ add_allow_unused_parens ( new_tts, attr_span) ;
133
134
new_tts. push_tree ( TokenTree :: Token (
134
135
token:: Token :: from_ast_ident ( Ident :: new ( kw:: ContractRequires , feature_span) ) ,
135
136
Spacing :: Joint ,
@@ -156,10 +157,12 @@ fn expand_ensures_tts(
156
157
) -> Result < TokenStream , ErrorGuaranteed > {
157
158
let feature_span = ecx. with_def_site_ctxt ( attr_span) ;
158
159
expand_contract_clause ( ecx, attr_span, annotated, |new_tts| {
160
+ add_allow_unused_parens ( new_tts, attr_span) ;
159
161
new_tts. push_tree ( TokenTree :: Token (
160
162
token:: Token :: from_ast_ident ( Ident :: new ( kw:: ContractEnsures , feature_span) ) ,
161
163
Spacing :: Joint ,
162
164
) ) ;
165
+
163
166
new_tts. push_tree ( TokenTree :: Delimited (
164
167
DelimSpan :: from_single ( attr_span) ,
165
168
DelimSpacing :: new ( Spacing :: JointHidden , Spacing :: JointHidden ) ,
@@ -169,3 +172,34 @@ fn expand_ensures_tts(
169
172
Ok ( ( ) )
170
173
} )
171
174
}
175
+
176
+ fn add_allow_unused_parens ( new_tts : & mut TokenStream , attr_span : Span ) {
177
+ // push_tree `#[allow(unused_parens)]` to avoid linting on the contract expression
178
+ new_tts. push_tree ( TokenTree :: Token (
179
+ token:: Token :: new ( token:: TokenKind :: Pound , attr_span) ,
180
+ Spacing :: Joint ,
181
+ ) ) ;
182
+ new_tts. push_tree ( TokenTree :: Delimited (
183
+ DelimSpan :: from_single ( attr_span) ,
184
+ DelimSpacing :: new ( Spacing :: JointHidden , Spacing :: JointHidden ) ,
185
+ token:: Delimiter :: Parenthesis ,
186
+ TokenStream :: from_iter ( vec ! [
187
+ TokenTree :: Token (
188
+ token:: Token :: from_ast_ident( Ident :: new( Symbol :: intern( "allow" ) , attr_span) ) ,
189
+ Spacing :: Joint ,
190
+ ) ,
191
+ TokenTree :: Delimited (
192
+ DelimSpan :: from_single( attr_span) ,
193
+ DelimSpacing :: new( Spacing :: JointHidden , Spacing :: JointHidden ) ,
194
+ token:: Delimiter :: Parenthesis ,
195
+ TokenStream :: from_iter( vec![ TokenTree :: Token (
196
+ token:: Token :: from_ast_ident( Ident :: new(
197
+ Symbol :: intern( "unused_parens" ) ,
198
+ attr_span,
199
+ ) ) ,
200
+ Spacing :: Joint ,
201
+ ) ] ) ,
202
+ ) ,
203
+ ] ) ,
204
+ ) ) ;
205
+ }
0 commit comments