@@ -546,16 +546,16 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
546546 }
547547 }
548548 }
549- ast:: ExprKind :: MethodCall ( ..) => {
549+ ast:: ExprKind :: MethodCall ( ref seg , ..) => {
550550 let expr_hir_id = self . tcx . hir . definitions ( ) . node_to_hir_id ( expr. id ) ;
551551 let method_id = self . tables . type_dependent_defs ( ) [ expr_hir_id] . def_id ( ) ;
552552 let ( def_id, decl_id) = match self . tcx . associated_item ( method_id) . container {
553553 ty:: ImplContainer ( _) => ( Some ( method_id) , None ) ,
554554 ty:: TraitContainer ( _) => ( None , Some ( method_id) ) ,
555555 } ;
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) ;
559559 Some ( Data :: RefData ( Ref {
560560 kind : RefKind :: Function ,
561561 span,
@@ -627,13 +627,18 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
627627 false
628628 }
629629
630+ if path. segments . is_empty ( ) {
631+ return None ;
632+ }
633+
630634 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 ) ;
633638 match def {
634639 HirDef :: Upvar ( id, ..) |
635640 HirDef :: Local ( id) => {
636- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
641+ let span = self . span_from_span ( sub_span) ;
637642 Some ( Ref {
638643 kind : RefKind :: Variable ,
639644 span,
@@ -644,7 +649,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
644649 HirDef :: Const ( ..) |
645650 HirDef :: AssociatedConst ( ..) |
646651 HirDef :: VariantCtor ( ..) => {
647- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
652+ let span = self . span_from_span ( sub_span) ;
648653 Some ( Ref {
649654 kind : RefKind :: Variable ,
650655 span,
@@ -670,7 +675,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
670675 HirDef :: AssociatedTy ( def_id) |
671676 HirDef :: Trait ( def_id) |
672677 HirDef :: TyParam ( def_id) => {
673- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
678+ let span = self . span_from_span ( sub_span) ;
674679 Some ( Ref {
675680 kind : RefKind :: Type ,
676681 span,
@@ -681,7 +686,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
681686 // This is a reference to a tuple struct where the def_id points
682687 // to an invisible constructor function. That is not a very useful
683688 // 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) ;
685690 let parent_def_id = self . tcx . parent_def_id ( def_id) . unwrap ( ) ;
686691 Some ( Ref {
687692 kind : RefKind :: Type ,
@@ -690,8 +695,6 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
690695 } )
691696 }
692697 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 ) ;
695698 let def_id = if decl_id. is_local ( ) {
696699 let ti = self . tcx . associated_item ( decl_id) ;
697700 self . tcx . associated_items ( ti. container . id ( ) )
@@ -700,23 +703,23 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
700703 } else {
701704 None
702705 } ;
703- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
706+ let span = self . span_from_span ( sub_span) ;
704707 Some ( Ref {
705708 kind : RefKind :: Function ,
706709 span,
707710 ref_id : id_from_def_id ( def_id. unwrap_or ( decl_id) ) ,
708711 } )
709712 }
710713 HirDef :: Fn ( def_id) => {
711- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
714+ let span = self . span_from_span ( sub_span) ;
712715 Some ( Ref {
713716 kind : RefKind :: Function ,
714717 span,
715718 ref_id : id_from_def_id ( def_id) ,
716719 } )
717720 }
718721 HirDef :: Mod ( def_id) => {
719- let span = self . span_from_span ( sub_span. unwrap ( ) ) ;
722+ let span = self . span_from_span ( sub_span) ;
720723 Some ( Ref {
721724 kind : RefKind :: Mod ,
722725 span,
0 commit comments