@@ -518,8 +518,12 @@ impl AnyDiagnostic {
518
518
d : & InferenceDiagnostic ,
519
519
source_map : & hir_def:: body:: BodySourceMap ,
520
520
) -> Option < AnyDiagnostic > {
521
- let expr_syntax = |expr| source_map. expr_syntax ( expr) . expect ( "unexpected synthetic" ) ;
522
- let pat_syntax = |pat| source_map. pat_syntax ( pat) . expect ( "unexpected synthetic" ) ;
521
+ let expr_syntax = |expr| {
522
+ source_map. expr_syntax ( expr) . inspect_err ( |_| tracing:: error!( "synthetic syntax" ) ) . ok ( )
523
+ } ;
524
+ let pat_syntax = |pat| {
525
+ source_map. pat_syntax ( pat) . inspect_err ( |_| tracing:: error!( "synthetic syntax" ) ) . ok ( )
526
+ } ;
523
527
Some ( match d {
524
528
& InferenceDiagnostic :: NoSuchField { field : expr, private } => {
525
529
let expr_or_pat = match expr {
@@ -533,23 +537,23 @@ impl AnyDiagnostic {
533
537
NoSuchField { field : expr_or_pat, private } . into ( )
534
538
}
535
539
& InferenceDiagnostic :: MismatchedArgCount { call_expr, expected, found } => {
536
- MismatchedArgCount { call_expr : expr_syntax ( call_expr) , expected, found } . into ( )
540
+ MismatchedArgCount { call_expr : expr_syntax ( call_expr) ? , expected, found } . into ( )
537
541
}
538
542
& InferenceDiagnostic :: PrivateField { expr, field } => {
539
- let expr = expr_syntax ( expr) ;
543
+ let expr = expr_syntax ( expr) ? ;
540
544
let field = field. into ( ) ;
541
545
PrivateField { expr, field } . into ( )
542
546
}
543
547
& InferenceDiagnostic :: PrivateAssocItem { id, item } => {
544
548
let expr_or_pat = match id {
545
- ExprOrPatId :: ExprId ( expr) => expr_syntax ( expr) . map ( AstPtr :: wrap_left) ,
546
- ExprOrPatId :: PatId ( pat) => pat_syntax ( pat) . map ( AstPtr :: wrap_right) ,
549
+ ExprOrPatId :: ExprId ( expr) => expr_syntax ( expr) ? . map ( AstPtr :: wrap_left) ,
550
+ ExprOrPatId :: PatId ( pat) => pat_syntax ( pat) ? . map ( AstPtr :: wrap_right) ,
547
551
} ;
548
552
let item = item. into ( ) ;
549
553
PrivateAssocItem { expr_or_pat, item } . into ( )
550
554
}
551
555
InferenceDiagnostic :: ExpectedFunction { call_expr, found } => {
552
- let call_expr = expr_syntax ( * call_expr) ;
556
+ let call_expr = expr_syntax ( * call_expr) ? ;
553
557
ExpectedFunction { call : call_expr, found : Type :: new ( db, def, found. clone ( ) ) }
554
558
. into ( )
555
559
}
@@ -559,7 +563,7 @@ impl AnyDiagnostic {
559
563
name,
560
564
method_with_same_name_exists,
561
565
} => {
562
- let expr = expr_syntax ( * expr) ;
566
+ let expr = expr_syntax ( * expr) ? ;
563
567
UnresolvedField {
564
568
expr,
565
569
name : name. clone ( ) ,
@@ -575,7 +579,7 @@ impl AnyDiagnostic {
575
579
field_with_same_name,
576
580
assoc_func_with_same_name,
577
581
} => {
578
- let expr = expr_syntax ( * expr) ;
582
+ let expr = expr_syntax ( * expr) ? ;
579
583
UnresolvedMethodCall {
580
584
expr,
581
585
name : name. clone ( ) ,
@@ -589,29 +593,28 @@ impl AnyDiagnostic {
589
593
}
590
594
& InferenceDiagnostic :: UnresolvedAssocItem { id } => {
591
595
let expr_or_pat = match id {
592
- ExprOrPatId :: ExprId ( expr) => expr_syntax ( expr) . map ( AstPtr :: wrap_left) ,
593
- ExprOrPatId :: PatId ( pat) => pat_syntax ( pat) . map ( AstPtr :: wrap_right) ,
596
+ ExprOrPatId :: ExprId ( expr) => expr_syntax ( expr) ? . map ( AstPtr :: wrap_left) ,
597
+ ExprOrPatId :: PatId ( pat) => pat_syntax ( pat) ? . map ( AstPtr :: wrap_right) ,
594
598
} ;
595
599
UnresolvedAssocItem { expr_or_pat } . into ( )
596
600
}
597
601
& InferenceDiagnostic :: UnresolvedIdent { expr } => {
598
- let expr = expr_syntax ( expr) ;
602
+ let expr = expr_syntax ( expr) ? ;
599
603
UnresolvedIdent { expr } . into ( )
600
604
}
601
605
& InferenceDiagnostic :: BreakOutsideOfLoop { expr, is_break, bad_value_break } => {
602
- let expr = expr_syntax ( expr) ;
606
+ let expr = expr_syntax ( expr) ? ;
603
607
BreakOutsideOfLoop { expr, is_break, bad_value_break } . into ( )
604
608
}
605
609
InferenceDiagnostic :: TypedHole { expr, expected } => {
606
- let expr = expr_syntax ( * expr) ;
610
+ let expr = expr_syntax ( * expr) ? ;
607
611
TypedHole { expr, expected : Type :: new ( db, def, expected. clone ( ) ) } . into ( )
608
612
}
609
613
& InferenceDiagnostic :: MismatchedTupleStructPatArgCount { pat, expected, found } => {
610
614
let expr_or_pat = match pat {
611
- ExprOrPatId :: ExprId ( expr) => expr_syntax ( expr) . map ( AstPtr :: wrap_left) ,
615
+ ExprOrPatId :: ExprId ( expr) => expr_syntax ( expr) ? . map ( AstPtr :: wrap_left) ,
612
616
ExprOrPatId :: PatId ( pat) => {
613
- let InFile { file_id, value } =
614
- source_map. pat_syntax ( pat) . expect ( "unexpected synthetic" ) ;
617
+ let InFile { file_id, value } = pat_syntax ( pat) ?;
615
618
616
619
// cast from Either<Pat, SelfParam> -> Either<_, Pat>
617
620
let ptr = AstPtr :: try_from_raw ( value. syntax_node_ptr ( ) ) ?;
0 commit comments