@@ -58,16 +58,29 @@ macro_rules! into_diagnostic_arg_using_display {
5858 }
5959}
6060
61+ macro_rules! into_diagnostic_arg_for_number {
62+ ( $( $ty: ty ) ,+ $( , ) ?) => {
63+ $(
64+ impl IntoDiagnosticArg for $ty {
65+ fn into_diagnostic_arg( self ) -> DiagnosticArgValue <' static > {
66+ // HACK: `FluentNumber` the underline backing struct represent
67+ // numbers using a f64 which can't represent all the i128 numbers
68+ // So in order to be able to use fluent selectors and still
69+ // have all the numbers representable we only convert numbers
70+ // below a certain threshold.
71+ if let Ok ( n) = TryInto :: <i128 >:: try_into( self ) && n >= -100 && n <= 100 {
72+ DiagnosticArgValue :: Number ( n)
73+ } else {
74+ self . to_string( ) . into_diagnostic_arg( )
75+ }
76+ }
77+ }
78+ ) +
79+ }
80+ }
81+
6182into_diagnostic_arg_using_display ! (
6283 ast:: ParamKindOrd ,
63- i8 ,
64- u8 ,
65- i16 ,
66- u16 ,
67- u32 ,
68- i64 ,
69- i128 ,
70- u128 ,
7184 std:: io:: Error ,
7285 Box <dyn std:: error:: Error >,
7386 std:: num:: NonZeroU32 ,
@@ -82,17 +95,7 @@ into_diagnostic_arg_using_display!(
8295 ExitStatus ,
8396) ;
8497
85- impl IntoDiagnosticArg for i32 {
86- fn into_diagnostic_arg ( self ) -> DiagnosticArgValue < ' static > {
87- DiagnosticArgValue :: Number ( self . into ( ) )
88- }
89- }
90-
91- impl IntoDiagnosticArg for u64 {
92- fn into_diagnostic_arg ( self ) -> DiagnosticArgValue < ' static > {
93- DiagnosticArgValue :: Number ( self . into ( ) )
94- }
95- }
98+ into_diagnostic_arg_for_number ! ( i8 , u8 , i16 , u16 , i32 , u32 , i64 , u64 , i128 , u128 , isize , usize ) ;
9699
97100impl IntoDiagnosticArg for bool {
98101 fn into_diagnostic_arg ( self ) -> DiagnosticArgValue < ' static > {
@@ -154,12 +157,6 @@ impl IntoDiagnosticArg for PathBuf {
154157 }
155158}
156159
157- impl IntoDiagnosticArg for usize {
158- fn into_diagnostic_arg ( self ) -> DiagnosticArgValue < ' static > {
159- DiagnosticArgValue :: Number ( self as i128 )
160- }
161- }
162-
163160impl IntoDiagnosticArg for PanicStrategy {
164161 fn into_diagnostic_arg ( self ) -> DiagnosticArgValue < ' static > {
165162 DiagnosticArgValue :: Str ( Cow :: Owned ( self . desc ( ) . to_string ( ) ) )
0 commit comments