@@ -74,20 +74,29 @@ fn dummy_const_trick<T: quote::ToTokens>(
74
74
exp : T ,
75
75
) -> proc_macro2:: TokenStream {
76
76
let dummy_const = Ident :: new (
77
- & format ! (
78
- "_IMPL_NUM_{}_FOR_{}" ,
79
- trait_. to_uppercase( ) ,
80
- format!( "{}" , name) . to_uppercase( )
81
- ) ,
77
+ & format ! ( "_IMPL_NUM_{}_FOR_{}" , trait_, unraw( name) ) ,
82
78
Span :: call_site ( ) ,
83
79
) ;
84
80
quote ! {
81
+ #[ allow( non_upper_case_globals, unused_attributes, unused_qualifications) ]
85
82
const #dummy_const: ( ) = {
83
+ #[ allow( unknown_lints) ]
84
+ #[ cfg_attr( feature = "cargo-clippy" , allow( useless_attribute) ) ]
85
+ #[ allow( rust_2018_idioms) ]
86
+ extern crate num_traits as _num_traits;
86
87
#exp
87
88
} ;
88
89
}
89
90
}
90
91
92
+ #[ allow( deprecated) ]
93
+ fn unraw ( ident : & proc_macro2:: Ident ) -> String {
94
+ // str::trim_start_matches was added in 1.30, trim_left_matches deprecated
95
+ // in 1.33. We currently support rustc back to 1.15 so we need to continue
96
+ // to use the deprecated one.
97
+ ident. to_string ( ) . trim_left_matches ( "r#" ) . to_owned ( )
98
+ }
99
+
91
100
// If `data` is a newtype, return the type it's wrapping.
92
101
fn newtype_inner ( data : & syn:: Data ) -> Option < syn:: Type > {
93
102
match data {
@@ -182,7 +191,6 @@ pub fn from_primitive(input: TokenStream) -> TokenStream {
182
191
} ;
183
192
184
193
quote ! {
185
- extern crate num_traits as _num_traits;
186
194
impl _num_traits:: FromPrimitive for #name {
187
195
fn from_i64( n: i64 ) -> Option <Self > {
188
196
<#inner_ty as _num_traits:: FromPrimitive >:: from_i64( n) . map( #name)
@@ -261,9 +269,6 @@ pub fn from_primitive(input: TokenStream) -> TokenStream {
261
269
} ;
262
270
263
271
quote ! {
264
- #[ allow( unused_qualifications) ]
265
- extern crate num_traits as _num_traits;
266
-
267
272
impl _num_traits:: FromPrimitive for #name {
268
273
#[ allow( trivial_numeric_casts) ]
269
274
fn from_i64( #from_i64_var: i64 ) -> Option <Self > {
@@ -350,7 +355,6 @@ pub fn to_primitive(input: TokenStream) -> TokenStream {
350
355
} ;
351
356
352
357
quote ! {
353
- extern crate num_traits as _num_traits;
354
358
impl _num_traits:: ToPrimitive for #name {
355
359
fn to_i64( & self ) -> Option <i64 > {
356
360
<#inner_ty as _num_traits:: ToPrimitive >:: to_i64( & self . 0 )
@@ -432,9 +436,6 @@ pub fn to_primitive(input: TokenStream) -> TokenStream {
432
436
} ;
433
437
434
438
quote ! {
435
- #[ allow( unused_qualifications) ]
436
- extern crate num_traits as _num_traits;
437
-
438
439
impl _num_traits:: ToPrimitive for #name {
439
440
#[ allow( trivial_numeric_casts) ]
440
441
fn to_i64( & self ) -> Option <i64 > {
@@ -518,7 +519,6 @@ pub fn num_cast(input: TokenStream) -> TokenStream {
518
519
"NumCast" ,
519
520
& name,
520
521
quote ! {
521
- extern crate num_traits as _num_traits;
522
522
impl _num_traits:: NumCast for #name {
523
523
fn from<T : _num_traits:: ToPrimitive >( n: T ) -> Option <Self > {
524
524
<#inner_ty as _num_traits:: NumCast >:: from( n) . map( #name)
@@ -541,7 +541,6 @@ pub fn zero(input: TokenStream) -> TokenStream {
541
541
"Zero" ,
542
542
& name,
543
543
quote ! {
544
- extern crate num_traits as _num_traits;
545
544
impl _num_traits:: Zero for #name {
546
545
fn zero( ) -> Self {
547
546
#name( <#inner_ty as _num_traits:: Zero >:: zero( ) )
@@ -567,7 +566,6 @@ pub fn one(input: TokenStream) -> TokenStream {
567
566
"One" ,
568
567
& name,
569
568
quote ! {
570
- extern crate num_traits as _num_traits;
571
569
impl _num_traits:: One for #name {
572
570
fn one( ) -> Self {
573
571
#name( <#inner_ty as _num_traits:: One >:: one( ) )
@@ -593,7 +591,6 @@ pub fn num(input: TokenStream) -> TokenStream {
593
591
"Num" ,
594
592
& name,
595
593
quote ! {
596
- extern crate num_traits as _num_traits;
597
594
impl _num_traits:: Num for #name {
598
595
type FromStrRadixErr = <#inner_ty as _num_traits:: Num >:: FromStrRadixErr ;
599
596
fn from_str_radix( s: & str , radix: u32 ) -> Result <Self , Self :: FromStrRadixErr > {
@@ -618,7 +615,6 @@ pub fn float(input: TokenStream) -> TokenStream {
618
615
"Float" ,
619
616
& name,
620
617
quote ! {
621
- extern crate num_traits as _num_traits;
622
618
impl _num_traits:: Float for #name {
623
619
fn nan( ) -> Self {
624
620
#name( <#inner_ty as _num_traits:: Float >:: nan( ) )
0 commit comments