@@ -130,6 +130,7 @@ fn expand_requires_tts(
130130) -> Result < TokenStream , ErrorGuaranteed > {
131131 let feature_span = ecx. with_def_site_ctxt ( attr_span) ;
132132 expand_contract_clause ( ecx, attr_span, annotated, |new_tts| {
133+ add_allow_unused_parens ( new_tts, attr_span) ;
133134 new_tts. push_tree ( TokenTree :: Token (
134135 token:: Token :: from_ast_ident ( Ident :: new ( kw:: ContractRequires , feature_span) ) ,
135136 Spacing :: Joint ,
@@ -156,10 +157,12 @@ fn expand_ensures_tts(
156157) -> Result < TokenStream , ErrorGuaranteed > {
157158 let feature_span = ecx. with_def_site_ctxt ( attr_span) ;
158159 expand_contract_clause ( ecx, attr_span, annotated, |new_tts| {
160+ add_allow_unused_parens ( new_tts, attr_span) ;
159161 new_tts. push_tree ( TokenTree :: Token (
160162 token:: Token :: from_ast_ident ( Ident :: new ( kw:: ContractEnsures , feature_span) ) ,
161163 Spacing :: Joint ,
162164 ) ) ;
165+
163166 new_tts. push_tree ( TokenTree :: Delimited (
164167 DelimSpan :: from_single ( attr_span) ,
165168 DelimSpacing :: new ( Spacing :: JointHidden , Spacing :: JointHidden ) ,
@@ -169,3 +172,34 @@ fn expand_ensures_tts(
169172 Ok ( ( ) )
170173 } )
171174}
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