@@ -1057,6 +1057,132 @@ Error: oops::my::bad
1057
1057
Ok ( ( ) )
1058
1058
}
1059
1059
1060
+ #[ test]
1061
+ fn related_severity ( ) -> Result < ( ) , MietteError > {
1062
+ #[ derive( Debug , Diagnostic , Error ) ]
1063
+ #[ error( "oops!" ) ]
1064
+ #[ diagnostic( code( oops:: my:: bad) , help( "try doing it better next time?" ) ) ]
1065
+ struct MyBad {
1066
+ #[ source_code]
1067
+ src : NamedSource ,
1068
+ #[ label( "this bit here" ) ]
1069
+ highlight : SourceSpan ,
1070
+ #[ related]
1071
+ related : Vec < MyRelated > ,
1072
+ }
1073
+
1074
+ #[ derive( Debug , Diagnostic , Error ) ]
1075
+ enum MyRelated {
1076
+ #[ error( "oops!" ) ]
1077
+ #[ diagnostic(
1078
+ severity( Error ) ,
1079
+ code( oops:: my:: related:: error) ,
1080
+ help( "try doing it better next time?" )
1081
+ ) ]
1082
+ Error {
1083
+ #[ source_code]
1084
+ src : NamedSource ,
1085
+ #[ label( "this bit here" ) ]
1086
+ highlight : SourceSpan ,
1087
+ } ,
1088
+
1089
+ #[ error( "oops!" ) ]
1090
+ #[ diagnostic(
1091
+ severity( Warning ) ,
1092
+ code( oops:: my:: related:: warning) ,
1093
+ help( "try doing it better next time?" )
1094
+ ) ]
1095
+ Warning {
1096
+ #[ source_code]
1097
+ src : NamedSource ,
1098
+ #[ label( "this bit here" ) ]
1099
+ highlight : SourceSpan ,
1100
+ } ,
1101
+
1102
+ #[ error( "oops!" ) ]
1103
+ #[ diagnostic(
1104
+ severity( Advice ) ,
1105
+ code( oops:: my:: related:: advice) ,
1106
+ help( "try doing it better next time?" )
1107
+ ) ]
1108
+ Advice {
1109
+ #[ source_code]
1110
+ src : NamedSource ,
1111
+ #[ label( "this bit here" ) ]
1112
+ highlight : SourceSpan ,
1113
+ } ,
1114
+ }
1115
+
1116
+ let src = "source\n text\n here" . to_string ( ) ;
1117
+ let err = MyBad {
1118
+ src : NamedSource :: new ( "bad_file.rs" , src. clone ( ) ) ,
1119
+ highlight : ( 9 , 4 ) . into ( ) ,
1120
+ related : vec ! [
1121
+ MyRelated :: Error {
1122
+ src: NamedSource :: new( "bad_file.rs" , src. clone( ) ) ,
1123
+ highlight: ( 0 , 6 ) . into( ) ,
1124
+ } ,
1125
+ MyRelated :: Warning {
1126
+ src: NamedSource :: new( "bad_file.rs" , src. clone( ) ) ,
1127
+ highlight: ( 0 , 6 ) . into( ) ,
1128
+ } ,
1129
+ MyRelated :: Advice {
1130
+ src: NamedSource :: new( "bad_file.rs" , src) ,
1131
+ highlight: ( 0 , 6 ) . into( ) ,
1132
+ } ,
1133
+ ] ,
1134
+ } ;
1135
+ let out = fmt_report ( err. into ( ) ) ;
1136
+ println ! ( "Error: {}" , out) ;
1137
+ let expected = r#"oops::my::bad
1138
+
1139
+ × oops!
1140
+ ╭─[bad_file.rs:1:1]
1141
+ 1 │ source
1142
+ 2 │ text
1143
+ · ──┬─
1144
+ · ╰── this bit here
1145
+ 3 │ here
1146
+ ╰────
1147
+ help: try doing it better next time?
1148
+
1149
+ Error: oops::my::related::error
1150
+
1151
+ × oops!
1152
+ ╭─[bad_file.rs:1:1]
1153
+ 1 │ source
1154
+ · ───┬──
1155
+ · ╰── this bit here
1156
+ 2 │ text
1157
+ ╰────
1158
+ help: try doing it better next time?
1159
+ Warning: oops::my::related::warning
1160
+
1161
+ ⚠ oops!
1162
+ ╭─[bad_file.rs:1:1]
1163
+ 1 │ source
1164
+ · ───┬──
1165
+ · ╰── this bit here
1166
+ 2 │ text
1167
+ ╰────
1168
+ help: try doing it better next time?
1169
+ Advice: oops::my::related::advice
1170
+
1171
+ ☞ oops!
1172
+ ╭─[bad_file.rs:1:1]
1173
+ 1 │ source
1174
+ · ───┬──
1175
+ · ╰── this bit here
1176
+ 2 │ text
1177
+ ╰────
1178
+ help: try doing it better next time?
1179
+ "#
1180
+ . trim_start ( )
1181
+ . to_string ( ) ;
1182
+ assert_eq ! ( expected, out) ;
1183
+ Ok ( ( ) )
1184
+ }
1185
+
1060
1186
#[ test]
1061
1187
fn zero_length_eol_span ( ) {
1062
1188
#[ derive( Error , Debug , Diagnostic ) ]
0 commit comments