@@ -97,16 +97,12 @@ macro_rules! parse {
97
97
// we're deriving for a newtype, where the inner type is defined in the same module, but not
98
98
// exported.
99
99
//
100
- // Solution: use the dummy const trick. For some reason, `extern crate` statements are allowed
100
+ // Solution: use the anonymous const trick. For some reason, `extern crate` statements are allowed
101
101
// here, but everything from the surrounding module is in scope. This trick is taken from serde.
102
- fn dummy_const_trick ( trait_ : & str , name : & Ident , exp : TokenStream2 ) -> TokenStream2 {
103
- let dummy_const = Ident :: new (
104
- & format ! ( "_IMPL_NUM_{}_FOR_{}" , trait_, unraw( name) ) ,
105
- Span :: call_site ( ) ,
106
- ) ;
102
+ fn anon_const_trick ( exp : TokenStream2 ) -> TokenStream2 {
107
103
quote ! {
108
104
#[ allow( non_upper_case_globals, unused_qualifications) ]
109
- const #dummy_const : ( ) = {
105
+ const _ : ( ) = {
110
106
#[ allow( clippy:: useless_attribute) ]
111
107
#[ allow( rust_2018_idioms) ]
112
108
extern crate num_traits as _num_traits;
@@ -115,10 +111,6 @@ fn dummy_const_trick(trait_: &str, name: &Ident, exp: TokenStream2) -> TokenStre
115
111
}
116
112
}
117
113
118
- fn unraw ( ident : & Ident ) -> String {
119
- ident. to_string ( ) . trim_start_matches ( "r#" ) . to_owned ( )
120
- }
121
-
122
114
// If `data` is a newtype, return the type it's wrapping.
123
115
fn newtype_inner ( data : & syn:: Data ) -> Option < syn:: Type > {
124
116
match * data {
@@ -189,11 +181,11 @@ impl NumTraits {
189
181
}
190
182
}
191
183
192
- fn wrap ( & self , trait_ : & str , name : & Ident , output : TokenStream2 ) -> TokenStream2 {
184
+ fn wrap ( & self , output : TokenStream2 ) -> TokenStream2 {
193
185
if self . explicit {
194
186
output
195
187
} else {
196
- dummy_const_trick ( trait_ , name , output)
188
+ anon_const_trick ( output)
197
189
}
198
190
}
199
191
}
@@ -369,7 +361,7 @@ pub fn from_primitive(input: TokenStream) -> TokenStream {
369
361
}
370
362
} ;
371
363
372
- import. wrap ( "FromPrimitive" , name , impl_) . into ( )
364
+ import. wrap ( impl_) . into ( )
373
365
}
374
366
375
367
/// Derives [`num_traits::ToPrimitive`][to] for simple enums and newtypes.
@@ -544,7 +536,7 @@ pub fn to_primitive(input: TokenStream) -> TokenStream {
544
536
}
545
537
} ;
546
538
547
- import. wrap ( "ToPrimitive" , name , impl_) . into ( )
539
+ import. wrap ( impl_) . into ( )
548
540
}
549
541
550
542
const NEWTYPE_ONLY : & str = "This trait can only be derived for newtypes" ;
@@ -623,7 +615,7 @@ pub fn num_cast(input: TokenStream) -> TokenStream {
623
615
}
624
616
} ;
625
617
626
- import. wrap ( "NumCast" , name , impl_) . into ( )
618
+ import. wrap ( impl_) . into ( )
627
619
}
628
620
629
621
/// Derives [`num_traits::Zero`][zero] for newtypes. The inner type must already implement `Zero`.
@@ -650,7 +642,7 @@ pub fn zero(input: TokenStream) -> TokenStream {
650
642
}
651
643
} ;
652
644
653
- import. wrap ( "Zero" , name , impl_) . into ( )
645
+ import. wrap ( impl_) . into ( )
654
646
}
655
647
656
648
/// Derives [`num_traits::One`][one] for newtypes. The inner type must already implement `One`.
@@ -677,7 +669,7 @@ pub fn one(input: TokenStream) -> TokenStream {
677
669
}
678
670
} ;
679
671
680
- import. wrap ( "One" , name , impl_) . into ( )
672
+ import. wrap ( impl_) . into ( )
681
673
}
682
674
683
675
/// Derives [`num_traits::Num`][num] for newtypes. The inner type must already implement `Num`.
@@ -701,7 +693,7 @@ pub fn num(input: TokenStream) -> TokenStream {
701
693
}
702
694
} ;
703
695
704
- import. wrap ( "Num" , name , impl_) . into ( )
696
+ import. wrap ( impl_) . into ( )
705
697
}
706
698
707
699
/// Derives [`num_traits::Float`][float] for newtypes. The inner type must already implement
@@ -950,7 +942,7 @@ pub fn float(input: TokenStream) -> TokenStream {
950
942
}
951
943
} ;
952
944
953
- import. wrap ( "Float" , name , impl_) . into ( )
945
+ import. wrap ( impl_) . into ( )
954
946
}
955
947
956
948
/// Derives [`num_traits::Signed`][signed] for newtypes. The inner type must already implement
@@ -990,7 +982,7 @@ pub fn signed(input: TokenStream) -> TokenStream {
990
982
}
991
983
} ;
992
984
993
- import. wrap ( "Signed" , & name , impl_) . into ( )
985
+ import. wrap ( impl_) . into ( )
994
986
}
995
987
996
988
/// Derives [`num_traits::Unsigned`][unsigned]. The inner type must already implement
@@ -1008,5 +1000,5 @@ pub fn unsigned(input: TokenStream) -> TokenStream {
1008
1000
impl #import:: Unsigned for #name { }
1009
1001
} ;
1010
1002
1011
- import. wrap ( "Unsigned" , & name , impl_) . into ( )
1003
+ import. wrap ( impl_) . into ( )
1012
1004
}
0 commit comments