@@ -32,8 +32,6 @@ pub fn quote_args<DB: DatabaseExt>(
32
32
#( let #arg_name = & ( #arg_expr) ; ) *
33
33
} ;
34
34
35
- let mut args_warnings: Vec < TokenStream > = vec ! [ ] ;
36
-
37
35
let args_check = match info. parameters ( ) {
38
36
None | Some ( Either :: Right ( _) ) => {
39
37
// all we can do is check arity which we did
@@ -52,14 +50,11 @@ pub fn quote_args<DB: DatabaseExt>(
52
50
. enumerate ( )
53
51
. map ( |( i, ( param_ty, ( name, expr) ) ) | -> crate :: Result < _ > {
54
52
let param_ty = match get_type_override ( expr) {
55
- // cast or type ascription will fail to compile if the type does not match
53
+ // cast will fail to compile if the type does not match
56
54
// and we strip casts to wildcard
57
55
Some ( ( _, false ) ) => return Ok ( quote ! ( ) ) ,
58
- Some ( ( ty, true ) ) => {
59
- let warning = create_warning ( name. clone ( ) , ty. clone ( ) , expr. clone ( ) ) ;
60
- args_warnings. push ( warning) ;
61
- return Ok ( quote ! ( ) )
62
- } ,
56
+ // type ascription is deprecated
57
+ Some ( ( ty, true ) ) => return Ok ( create_warning ( name. clone ( ) , & ty, & expr) ) ,
63
58
None => {
64
59
DB :: param_type_for_id ( & param_ty)
65
60
. ok_or_else ( || {
@@ -108,8 +103,6 @@ pub fn quote_args<DB: DatabaseExt>(
108
103
let args_count = input. arg_exprs . len ( ) ;
109
104
110
105
Ok ( quote ! {
111
- #( #args_warnings) *
112
-
113
106
#arg_bindings
114
107
115
108
#args_check
@@ -123,12 +116,12 @@ pub fn quote_args<DB: DatabaseExt>(
123
116
} )
124
117
}
125
118
126
- fn create_warning ( name : Ident , ty : Type , expr : Expr ) -> TokenStream {
127
- let span = expr. span ( ) ;
128
- let stripped = strip_wildcard ( expr) . to_token_stream ( ) ;
129
- let current = quote ! ( #stripped: #ty) . to_string ( ) ;
119
+ fn create_warning ( name : Ident , ty : & Type , expr : & Expr ) -> TokenStream {
120
+ let current = expr. to_token_stream ( ) . to_string ( ) ;
121
+ let Expr :: Type ( ExprType { expr : stripped, .. } ) = expr else {
122
+ return quote ! ( ) ;
123
+ } ;
130
124
let fix = quote ! ( #stripped as #ty) . to_string ( ) ;
131
-
132
125
let message = format ! (
133
126
"
134
127
\t \t Type ascription pattern is deprecated, prefer casting
@@ -140,12 +133,15 @@ fn create_warning(name: Ident, ty: Type, expr: Expr) -> TokenStream {
140
133
\t \t See <https://github.com/rust-lang/rfcs/pull/3307> for more information
141
134
"
142
135
) ;
143
- let name = Ident :: new ( & format ! ( "warning_{name}" ) , span) ;
144
- quote_spanned ! ( span =>
145
- #[ deprecated( note = #message) ]
146
- #[ allow( non_upper_case_globals) ]
147
- const #name: ( ) = ( ) ;
148
- let _ = #name;
136
+ let name = Ident :: new ( & format ! ( "warning_{name}" ) , expr. span ( ) ) ;
137
+ quote_spanned ! ( expr. span( ) =>
138
+ // this shouldn't actually run
139
+ if false {
140
+ #[ deprecated( note = #message) ]
141
+ #[ allow( non_upper_case_globals) ]
142
+ const #name: ( ) = ( ) ;
143
+ let _ = #name;
144
+ }
149
145
)
150
146
}
151
147
0 commit comments