@@ -67,10 +67,7 @@ impl SourceAnalyzer {
67
67
let scopes = db. expr_scopes ( def) ;
68
68
let scope = match offset {
69
69
None => scope_for ( & scopes, & source_map, node) ,
70
- Some ( offset) => {
71
- let file_id = node. file_id . original_file ( db. upcast ( ) ) ;
72
- scope_for_offset ( db, & scopes, & source_map, InFile :: new ( file_id. into ( ) , offset) )
73
- }
70
+ Some ( offset) => scope_for_offset ( db, & scopes, & source_map, node. file_id , offset) ,
74
71
} ;
75
72
let resolver = resolver_for_scope ( db. upcast ( ) , def, scope) ;
76
73
SourceAnalyzer {
@@ -91,10 +88,7 @@ impl SourceAnalyzer {
91
88
let scopes = db. expr_scopes ( def) ;
92
89
let scope = match offset {
93
90
None => scope_for ( & scopes, & source_map, node) ,
94
- Some ( offset) => {
95
- let file_id = node. file_id . original_file ( db. upcast ( ) ) ;
96
- scope_for_offset ( db, & scopes, & source_map, InFile :: new ( file_id. into ( ) , offset) )
97
- }
91
+ Some ( offset) => scope_for_offset ( db, & scopes, & source_map, node. file_id , offset) ,
98
92
} ;
99
93
let resolver = resolver_for_scope ( db. upcast ( ) , def, scope) ;
100
94
SourceAnalyzer { resolver, def : Some ( ( def, body, source_map) ) , infer : None , file_id }
@@ -585,14 +579,15 @@ fn scope_for_offset(
585
579
db : & dyn HirDatabase ,
586
580
scopes : & ExprScopes ,
587
581
source_map : & BodySourceMap ,
588
- offset : InFile < TextSize > ,
582
+ from_file : HirFileId ,
583
+ offset : TextSize ,
589
584
) -> Option < ScopeId > {
590
585
scopes
591
586
. scope_by_expr ( )
592
587
. iter ( )
593
588
. filter_map ( |( id, scope) | {
594
589
let InFile { file_id, value } = source_map. expr_syntax ( * id) . ok ( ) ?;
595
- if offset . file_id == file_id {
590
+ if from_file == file_id {
596
591
let root = db. parse_or_expand ( file_id) ?;
597
592
let node = value. to_node ( & root) ;
598
593
return Some ( ( node. syntax ( ) . text_range ( ) , scope) ) ;
@@ -602,17 +597,15 @@ fn scope_for_offset(
602
597
let source = iter:: successors ( file_id. call_node ( db. upcast ( ) ) , |it| {
603
598
it. file_id . call_node ( db. upcast ( ) )
604
599
} )
605
- . find ( |it| it. file_id == offset . file_id )
600
+ . find ( |it| it. file_id == from_file )
606
601
. filter ( |it| it. value . kind ( ) == SyntaxKind :: MACRO_CALL ) ?;
607
602
Some ( ( source. value . text_range ( ) , scope) )
608
603
} )
609
- . filter ( |( expr_range, _scope) | {
610
- expr_range. start ( ) <= offset. value && offset. value <= expr_range. end ( )
611
- } )
604
+ . filter ( |( expr_range, _scope) | expr_range. start ( ) <= offset && offset <= expr_range. end ( ) )
612
605
// find containing scope
613
606
. min_by_key ( |( expr_range, _scope) | expr_range. len ( ) )
614
607
. map ( |( expr_range, scope) | {
615
- adjust ( db, scopes, source_map, expr_range, offset) . unwrap_or ( * scope)
608
+ adjust ( db, scopes, source_map, expr_range, from_file , offset) . unwrap_or ( * scope)
616
609
} )
617
610
}
618
611
@@ -623,23 +616,24 @@ fn adjust(
623
616
scopes : & ExprScopes ,
624
617
source_map : & BodySourceMap ,
625
618
expr_range : TextRange ,
626
- offset : InFile < TextSize > ,
619
+ from_file : HirFileId ,
620
+ offset : TextSize ,
627
621
) -> Option < ScopeId > {
628
622
let child_scopes = scopes
629
623
. scope_by_expr ( )
630
624
. iter ( )
631
625
. filter_map ( |( id, scope) | {
632
626
let source = source_map. expr_syntax ( * id) . ok ( ) ?;
633
627
// FIXME: correctly handle macro expansion
634
- if source. file_id != offset . file_id {
628
+ if source. file_id != from_file {
635
629
return None ;
636
630
}
637
631
let root = source. file_syntax ( db. upcast ( ) ) ;
638
632
let node = source. value . to_node ( & root) ;
639
633
Some ( ( node. syntax ( ) . text_range ( ) , scope) )
640
634
} )
641
635
. filter ( |& ( range, _) | {
642
- range. start ( ) <= offset. value && expr_range. contains_range ( range) && range != expr_range
636
+ range. start ( ) <= offset && expr_range. contains_range ( range) && range != expr_range
643
637
} ) ;
644
638
645
639
child_scopes
0 commit comments