@@ -391,9 +391,9 @@ static TYPE_ATTR: &'static str = "type";
391
391
392
392
// Expected attributes per node type
393
393
static POP_SCOPED_SYMBOL_ATTRS : Lazy < HashSet < & ' static str > > =
394
- Lazy :: new ( || HashSet :: from ( [ TYPE_ATTR , SYMBOL_ATTR , IS_DEFINITION_ATTR ] ) ) ;
394
+ Lazy :: new ( || HashSet :: from ( [ TYPE_ATTR , SYMBOL_ATTR , IS_DEFINITION_ATTR , DEFINIENS_NODE ] ) ) ;
395
395
static POP_SYMBOL_ATTRS : Lazy < HashSet < & ' static str > > =
396
- Lazy :: new ( || HashSet :: from ( [ TYPE_ATTR , SYMBOL_ATTR , IS_DEFINITION_ATTR ] ) ) ;
396
+ Lazy :: new ( || HashSet :: from ( [ TYPE_ATTR , SYMBOL_ATTR , IS_DEFINITION_ATTR , DEFINIENS_NODE ] ) ) ;
397
397
static PUSH_SCOPED_SYMBOL_ATTRS : Lazy < HashSet < & ' static str > > =
398
398
Lazy :: new ( || HashSet :: from ( [ TYPE_ATTR , SYMBOL_ATTR , SCOPE_ATTR , IS_REFERENCE_ATTR ] ) ) ;
399
399
static PUSH_SYMBOL_ATTRS : Lazy < HashSet < & ' static str > > =
@@ -1019,10 +1019,14 @@ impl<'a> Builder<'a> {
1019
1019
let id = self . node_id_for_graph_node ( node_ref) ;
1020
1020
let is_definition = self . load_flag ( node, IS_DEFINITION_ATTR ) ?;
1021
1021
self . verify_attributes ( node, POP_SCOPED_SYMBOL_TYPE , & POP_SCOPED_SYMBOL_ATTRS ) ;
1022
- Ok ( self
1022
+ let node_handle = self
1023
1023
. stack_graph
1024
1024
. add_pop_scoped_symbol_node ( id, symbol, is_definition)
1025
- . unwrap ( ) )
1025
+ . unwrap ( ) ;
1026
+ if is_definition {
1027
+ self . load_definiens_info ( node_ref, node_handle) ?;
1028
+ }
1029
+ Ok ( node_handle)
1026
1030
}
1027
1031
1028
1032
fn load_pop_symbol ( & mut self , node_ref : GraphNodeRef ) -> Result < Handle < Node > , BuildError > {
@@ -1035,10 +1039,14 @@ impl<'a> Builder<'a> {
1035
1039
let id = self . node_id_for_graph_node ( node_ref) ;
1036
1040
let is_definition = self . load_flag ( node, IS_DEFINITION_ATTR ) ?;
1037
1041
self . verify_attributes ( node, POP_SYMBOL_TYPE , & POP_SYMBOL_ATTRS ) ;
1038
- Ok ( self
1042
+ let node_handle = self
1039
1043
. stack_graph
1040
1044
. add_pop_symbol_node ( id, symbol, is_definition)
1041
- . unwrap ( ) )
1045
+ . unwrap ( ) ;
1046
+ if is_definition {
1047
+ self . load_definiens_info ( node_ref, node_handle) ?;
1048
+ }
1049
+ Ok ( node_handle)
1042
1050
}
1043
1051
1044
1052
fn load_push_scoped_symbol (
@@ -1127,12 +1135,6 @@ impl<'a> Builder<'a> {
1127
1135
source_info. span = span;
1128
1136
source_info. containing_line = ControlledOption :: some ( containing_line) ;
1129
1137
} ;
1130
- if let Some ( definiens_node) = node. attributes . get ( DEFINIENS_NODE ) {
1131
- let definiens_node = & self . graph [ definiens_node. as_syntax_node_ref ( ) ?] ;
1132
- let span = self . span_calculator . for_node ( definiens_node) ;
1133
- let source_info = self . stack_graph . source_info_mut ( node_handle) ;
1134
- source_info. definiens_span = span;
1135
- }
1136
1138
if let Some ( syntax_type) = node. attributes . get ( SYNTAX_TYPE ) {
1137
1139
let syntax_type = syntax_type. as_str ( ) ?;
1138
1140
let interned_string = self . stack_graph . add_string ( syntax_type) ;
@@ -1142,6 +1144,22 @@ impl<'a> Builder<'a> {
1142
1144
Ok ( ( ) )
1143
1145
}
1144
1146
1147
+ fn load_definiens_info (
1148
+ & mut self ,
1149
+ node_ref : GraphNodeRef ,
1150
+ node_handle : Handle < Node > ,
1151
+ ) -> Result < ( ) , BuildError > {
1152
+ let node = & self . graph [ node_ref] ;
1153
+ let definiens_node = match node. attributes . get ( DEFINIENS_NODE ) {
1154
+ Some ( definiens_node) => & self . graph [ definiens_node. as_syntax_node_ref ( ) ?] ,
1155
+ None => return Ok ( ( ) ) ,
1156
+ } ;
1157
+ let span = self . span_calculator . for_node ( definiens_node) ;
1158
+ let source_info = self . stack_graph . source_info_mut ( node_handle) ;
1159
+ source_info. definiens_span = span;
1160
+ Ok ( ( ) )
1161
+ }
1162
+
1145
1163
fn load_node_debug_info (
1146
1164
& mut self ,
1147
1165
node_ref : GraphNodeRef ,
0 commit comments