@@ -422,37 +422,36 @@ impl<'a> LintExtractor<'a> {
422
422
. filter ( |line| line. starts_with ( '{' ) )
423
423
. map ( serde_json:: from_str)
424
424
. collect :: < Result < Vec < serde_json:: Value > , _ > > ( ) ?;
425
- match msgs
425
+ // First try to find the messages with the `code` field set to our lint.
426
+ let matches: Vec < _ > = msgs
426
427
. iter ( )
427
- . find ( |msg| matches ! ( & msg[ "code" ] [ "code" ] , serde_json:: Value :: String ( s) if s==name) )
428
- {
429
- Some ( msg) => {
430
- let rendered = msg[ "rendered" ] . as_str ( ) . expect ( "rendered field should exist" ) ;
431
- Ok ( rendered. to_string ( ) )
432
- }
433
- None => {
434
- match msgs. iter ( ) . find (
435
- |msg| matches ! ( & msg[ "rendered" ] , serde_json:: Value :: String ( s) if s. contains( name) ) ,
436
- ) {
437
- Some ( msg) => {
438
- let rendered = msg[ "rendered" ] . as_str ( ) . expect ( "rendered field should exist" ) ;
439
- Ok ( rendered. to_string ( ) )
440
- }
441
- None => {
442
- let rendered: Vec < & str > =
443
- msgs. iter ( ) . filter_map ( |msg| msg[ "rendered" ] . as_str ( ) ) . collect ( ) ;
444
- let non_json: Vec < & str > =
445
- stderr. lines ( ) . filter ( |line| !line. starts_with ( '{' ) ) . collect ( ) ;
446
- Err ( format ! (
447
- "did not find lint `{}` in output of example, got:\n {}\n {}" ,
448
- name,
449
- non_json. join( "\n " ) ,
450
- rendered. join( "\n " )
451
- )
452
- . into ( ) )
453
- }
454
- }
428
+ . filter ( |msg| matches ! ( & msg[ "code" ] [ "code" ] , serde_json:: Value :: String ( s) if s==name) )
429
+ . map ( |msg| msg[ "rendered" ] . as_str ( ) . expect ( "rendered field should exist" ) . to_string ( ) )
430
+ . collect ( ) ;
431
+ if matches. is_empty ( ) {
432
+ // Some lints override their code to something else (E0566).
433
+ // Try to find something that looks like it could be our lint.
434
+ let matches: Vec < _ > = msgs. iter ( ) . filter ( |msg|
435
+ matches ! ( & msg[ "rendered" ] , serde_json:: Value :: String ( s) if s. contains( name) ) )
436
+ . map ( |msg| msg[ "rendered" ] . as_str ( ) . expect ( "rendered field should exist" ) . to_string ( ) )
437
+ . collect ( ) ;
438
+ if matches. is_empty ( ) {
439
+ let rendered: Vec < & str > =
440
+ msgs. iter ( ) . filter_map ( |msg| msg[ "rendered" ] . as_str ( ) ) . collect ( ) ;
441
+ let non_json: Vec < & str > =
442
+ stderr. lines ( ) . filter ( |line| !line. starts_with ( '{' ) ) . collect ( ) ;
443
+ Err ( format ! (
444
+ "did not find lint `{}` in output of example, got:\n {}\n {}" ,
445
+ name,
446
+ non_json. join( "\n " ) ,
447
+ rendered. join( "\n " )
448
+ )
449
+ . into ( ) )
450
+ } else {
451
+ Ok ( matches. join ( "\n " ) )
455
452
}
453
+ } else {
454
+ Ok ( matches. join ( "\n " ) )
456
455
}
457
456
}
458
457
0 commit comments