@@ -13,11 +13,13 @@ use std::collections::{HashMap, HashSet};
13
13
#[ derive( Debug , Copy , Clone ) ]
14
14
pub struct NodeId {
15
15
index : usize ,
16
+ #[ allow( dead_code) ] // intended for `derive(Debug)`
17
+ debug : InternedString ,
16
18
}
17
19
18
20
impl NodeId {
19
- fn new ( index : usize ) -> Self {
20
- Self { index }
21
+ fn new ( index : usize , debug : InternedString ) -> Self {
22
+ Self { index, debug }
21
23
}
22
24
}
23
25
@@ -63,6 +65,15 @@ pub enum Node {
63
65
} ,
64
66
}
65
67
68
+ impl Node {
69
+ fn name ( & self ) -> InternedString {
70
+ match self {
71
+ Self :: Package { package_id, .. } => package_id. name ( ) ,
72
+ Self :: Feature { name, .. } => * name,
73
+ }
74
+ }
75
+ }
76
+
66
77
#[ derive( Debug , Copy , Hash , Eq , Clone , PartialEq ) ]
67
78
pub struct Edge {
68
79
kind : EdgeKind ,
@@ -160,7 +171,7 @@ impl<'a> Graph<'a> {
160
171
161
172
/// Adds a new node to the graph, returning its new index.
162
173
fn add_node ( & mut self , node : Node ) -> NodeId {
163
- let from_index = NodeId :: new ( self . nodes . len ( ) ) ;
174
+ let from_index = NodeId :: new ( self . nodes . len ( ) , node . name ( ) ) ;
164
175
self . nodes . push ( node) ;
165
176
self . edges . push ( Edges :: new ( ) ) ;
166
177
self . index . insert ( self . node ( from_index) . clone ( ) , from_index) ;
@@ -204,7 +215,7 @@ impl<'a> Graph<'a> {
204
215
Node :: Package { package_id, .. } => package_ids. contains ( package_id) ,
205
216
_ => false ,
206
217
} )
207
- . map ( |( i, node) | ( node, NodeId :: new ( i) ) )
218
+ . map ( |( i, node) | ( node, NodeId :: new ( i, node . name ( ) ) ) )
208
219
. collect ( ) ;
209
220
// Sort for consistent output (the same command should always return
210
221
// the same output). "unstable" since nodes should always be unique.
@@ -278,7 +289,7 @@ impl<'a> Graph<'a> {
278
289
for edge in node_edges. all ( ) {
279
290
let new_edge = Edge {
280
291
kind : edge. kind ( ) ,
281
- node : NodeId :: new ( from_idx) ,
292
+ node : NodeId :: new ( from_idx, self . nodes [ from_idx ] . name ( ) ) ,
282
293
} ;
283
294
new_edges[ edge. node ( ) . index ] . add_edge ( new_edge) ;
284
295
}
@@ -299,7 +310,7 @@ impl<'a> Graph<'a> {
299
310
packages
300
311
. entry ( package_id. name ( ) )
301
312
. or_insert_with ( Vec :: new)
302
- . push ( ( node, NodeId :: new ( i) ) ) ;
313
+ . push ( ( node, NodeId :: new ( i, node . name ( ) ) ) ) ;
303
314
}
304
315
}
305
316
@@ -671,7 +682,7 @@ fn add_internal_features(graph: &mut Graph<'_>, resolve: &Resolve) {
671
682
Node :: Package { .. } => None ,
672
683
Node :: Feature { node_index, name } => {
673
684
let package_id = graph. package_id_for_index ( * node_index) ;
674
- Some ( ( package_id, * node_index, NodeId :: new ( i) , * name) )
685
+ Some ( ( package_id, * node_index, NodeId :: new ( i, * name ) , * name) )
675
686
}
676
687
} )
677
688
. collect ( ) ;
0 commit comments