@@ -74,20 +74,29 @@ fn dummy_const_trick<T: quote::ToTokens>(
7474 exp : T ,
7575) -> proc_macro2:: TokenStream {
7676 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) ) ,
8278 Span :: call_site ( ) ,
8379 ) ;
8480 quote ! {
81+ #[ allow( non_upper_case_globals, unused_attributes, unused_qualifications) ]
8582 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;
8687 #exp
8788 } ;
8889 }
8990}
9091
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+
91100// If `data` is a newtype, return the type it's wrapping.
92101fn newtype_inner ( data : & syn:: Data ) -> Option < syn:: Type > {
93102 match data {
@@ -182,7 +191,6 @@ pub fn from_primitive(input: TokenStream) -> TokenStream {
182191 } ;
183192
184193 quote ! {
185- extern crate num_traits as _num_traits;
186194 impl _num_traits:: FromPrimitive for #name {
187195 fn from_i64( n: i64 ) -> Option <Self > {
188196 <#inner_ty as _num_traits:: FromPrimitive >:: from_i64( n) . map( #name)
@@ -261,9 +269,6 @@ pub fn from_primitive(input: TokenStream) -> TokenStream {
261269 } ;
262270
263271 quote ! {
264- #[ allow( unused_qualifications) ]
265- extern crate num_traits as _num_traits;
266-
267272 impl _num_traits:: FromPrimitive for #name {
268273 #[ allow( trivial_numeric_casts) ]
269274 fn from_i64( #from_i64_var: i64 ) -> Option <Self > {
@@ -350,7 +355,6 @@ pub fn to_primitive(input: TokenStream) -> TokenStream {
350355 } ;
351356
352357 quote ! {
353- extern crate num_traits as _num_traits;
354358 impl _num_traits:: ToPrimitive for #name {
355359 fn to_i64( & self ) -> Option <i64 > {
356360 <#inner_ty as _num_traits:: ToPrimitive >:: to_i64( & self . 0 )
@@ -432,9 +436,6 @@ pub fn to_primitive(input: TokenStream) -> TokenStream {
432436 } ;
433437
434438 quote ! {
435- #[ allow( unused_qualifications) ]
436- extern crate num_traits as _num_traits;
437-
438439 impl _num_traits:: ToPrimitive for #name {
439440 #[ allow( trivial_numeric_casts) ]
440441 fn to_i64( & self ) -> Option <i64 > {
@@ -518,7 +519,6 @@ pub fn num_cast(input: TokenStream) -> TokenStream {
518519 "NumCast" ,
519520 & name,
520521 quote ! {
521- extern crate num_traits as _num_traits;
522522 impl _num_traits:: NumCast for #name {
523523 fn from<T : _num_traits:: ToPrimitive >( n: T ) -> Option <Self > {
524524 <#inner_ty as _num_traits:: NumCast >:: from( n) . map( #name)
@@ -541,7 +541,6 @@ pub fn zero(input: TokenStream) -> TokenStream {
541541 "Zero" ,
542542 & name,
543543 quote ! {
544- extern crate num_traits as _num_traits;
545544 impl _num_traits:: Zero for #name {
546545 fn zero( ) -> Self {
547546 #name( <#inner_ty as _num_traits:: Zero >:: zero( ) )
@@ -567,7 +566,6 @@ pub fn one(input: TokenStream) -> TokenStream {
567566 "One" ,
568567 & name,
569568 quote ! {
570- extern crate num_traits as _num_traits;
571569 impl _num_traits:: One for #name {
572570 fn one( ) -> Self {
573571 #name( <#inner_ty as _num_traits:: One >:: one( ) )
@@ -593,7 +591,6 @@ pub fn num(input: TokenStream) -> TokenStream {
593591 "Num" ,
594592 & name,
595593 quote ! {
596- extern crate num_traits as _num_traits;
597594 impl _num_traits:: Num for #name {
598595 type FromStrRadixErr = <#inner_ty as _num_traits:: Num >:: FromStrRadixErr ;
599596 fn from_str_radix( s: & str , radix: u32 ) -> Result <Self , Self :: FromStrRadixErr > {
@@ -618,7 +615,6 @@ pub fn float(input: TokenStream) -> TokenStream {
618615 "Float" ,
619616 & name,
620617 quote ! {
621- extern crate num_traits as _num_traits;
622618 impl _num_traits:: Float for #name {
623619 fn nan( ) -> Self {
624620 #name( <#inner_ty as _num_traits:: Float >:: nan( ) )
0 commit comments