@@ -546,16 +546,16 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
546
546
}
547
547
}
548
548
}
549
- ast:: ExprKind :: MethodCall ( ..) => {
549
+ ast:: ExprKind :: MethodCall ( ref seg , ..) => {
550
550
let expr_hir_id = self . tcx . hir . definitions ( ) . node_to_hir_id ( expr. id ) ;
551
551
let method_id = self . tables . type_dependent_defs ( ) [ expr_hir_id] . def_id ( ) ;
552
552
let ( def_id, decl_id) = match self . tcx . associated_item ( method_id) . container {
553
553
ty:: ImplContainer ( _) => ( Some ( method_id) , None ) ,
554
554
ty:: TraitContainer ( _) => ( None , Some ( method_id) ) ,
555
555
} ;
556
- let sub_span = self . span_utils . sub_span_for_meth_name ( expr . span ) ;
557
- filter ! ( self . span_utils, sub_span, expr. span, None ) ;
558
- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
556
+ let sub_span = seg . span ;
557
+ filter ! ( self . span_utils, Some ( sub_span) , expr. span, None ) ;
558
+ let span = self . span_from_span ( sub_span) ;
559
559
Some ( Data :: RefData ( Ref {
560
560
kind : RefKind :: Function ,
561
561
span,
@@ -627,13 +627,18 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
627
627
false
628
628
}
629
629
630
+ if path. segments . is_empty ( ) {
631
+ return None ;
632
+ }
633
+
630
634
let def = self . get_path_def ( id) ;
631
- let sub_span = self . span_utils . span_for_last_ident ( path. span ) ;
632
- filter ! ( self . span_utils, sub_span, path. span, None ) ;
635
+ let last_seg = & path. segments [ path. segments . len ( ) - 1 ] ;
636
+ let sub_span = last_seg. span ;
637
+ filter ! ( self . span_utils, Some ( sub_span) , path. span, None ) ;
633
638
match def {
634
639
HirDef :: Upvar ( id, ..) |
635
640
HirDef :: Local ( id) => {
636
- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
641
+ let span = self . span_from_span ( sub_span) ;
637
642
Some ( Ref {
638
643
kind : RefKind :: Variable ,
639
644
span,
@@ -644,7 +649,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
644
649
HirDef :: Const ( ..) |
645
650
HirDef :: AssociatedConst ( ..) |
646
651
HirDef :: VariantCtor ( ..) => {
647
- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
652
+ let span = self . span_from_span ( sub_span) ;
648
653
Some ( Ref {
649
654
kind : RefKind :: Variable ,
650
655
span,
@@ -670,7 +675,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
670
675
HirDef :: AssociatedTy ( def_id) |
671
676
HirDef :: Trait ( def_id) |
672
677
HirDef :: TyParam ( def_id) => {
673
- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
678
+ let span = self . span_from_span ( sub_span) ;
674
679
Some ( Ref {
675
680
kind : RefKind :: Type ,
676
681
span,
@@ -681,7 +686,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
681
686
// This is a reference to a tuple struct where the def_id points
682
687
// to an invisible constructor function. That is not a very useful
683
688
// def, so adjust to point to the tuple struct itself.
684
- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
689
+ let span = self . span_from_span ( sub_span) ;
685
690
let parent_def_id = self . tcx . parent_def_id ( def_id) . unwrap ( ) ;
686
691
Some ( Ref {
687
692
kind : RefKind :: Type ,
@@ -690,8 +695,6 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
690
695
} )
691
696
}
692
697
HirDef :: Method ( decl_id) => {
693
- let sub_span = self . span_utils . sub_span_for_meth_name ( path. span ) ;
694
- filter ! ( self . span_utils, sub_span, path. span, None ) ;
695
698
let def_id = if decl_id. is_local ( ) {
696
699
let ti = self . tcx . associated_item ( decl_id) ;
697
700
self . tcx . associated_items ( ti. container . id ( ) )
@@ -700,23 +703,23 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
700
703
} else {
701
704
None
702
705
} ;
703
- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
706
+ let span = self . span_from_span ( sub_span) ;
704
707
Some ( Ref {
705
708
kind : RefKind :: Function ,
706
709
span,
707
710
ref_id : id_from_def_id ( def_id. unwrap_or ( decl_id) ) ,
708
711
} )
709
712
}
710
713
HirDef :: Fn ( def_id) => {
711
- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
714
+ let span = self . span_from_span ( sub_span) ;
712
715
Some ( Ref {
713
716
kind : RefKind :: Function ,
714
717
span,
715
718
ref_id : id_from_def_id ( def_id) ,
716
719
} )
717
720
}
718
721
HirDef :: Mod ( def_id) => {
719
- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
722
+ let span = self . span_from_span ( sub_span) ;
720
723
Some ( Ref {
721
724
kind : RefKind :: Mod ,
722
725
span,
0 commit comments