@@ -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,11 +116,13 @@ 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 ( ) ;
119
+ fn create_warning ( name : Ident , ty : & Type , expr : & Expr ) -> TokenStream {
120
+ let Expr :: Type ( ExprType { expr : stripped, .. } ) = expr else {
121
+ return quote ! ( ) ;
122
+ } ;
129
123
let current = quote ! ( #stripped: #ty) . to_string ( ) ;
130
124
let fix = quote ! ( #stripped as #ty) . to_string ( ) ;
125
+ let name = Ident :: new ( & format ! ( "warning_{name}" ) , expr. span ( ) ) ;
131
126
132
127
let message = format ! (
133
128
"
@@ -140,12 +135,15 @@ fn create_warning(name: Ident, ty: Type, expr: Expr) -> TokenStream {
140
135
\t \t See <https://github.com/rust-lang/rfcs/pull/3307> for more information
141
136
"
142
137
) ;
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;
138
+
139
+ quote_spanned ! ( expr. span( ) =>
140
+ // this shouldn't actually run
141
+ if false {
142
+ #[ deprecated( note = #message) ]
143
+ #[ allow( non_upper_case_globals) ]
144
+ const #name: ( ) = ( ) ;
145
+ let _ = #name;
146
+ }
149
147
)
150
148
}
151
149
0 commit comments