@@ -456,43 +456,27 @@ fn add_pkg(
456
456
requested_kind,
457
457
opts,
458
458
) ;
459
+ let new_edge = Edge {
460
+ kind : EdgeKind :: Dep ( dep. kind ( ) ) ,
461
+ node : dep_index,
462
+ } ;
459
463
if opts. graph_features {
460
464
// Add the dependency node with feature nodes in-between.
461
465
dep_name_map
462
466
. entry ( dep. name_in_toml ( ) )
463
467
. or_default ( )
464
468
. insert ( ( dep_index, dep. is_optional ( ) ) ) ;
465
469
if dep. uses_default_features ( ) {
466
- add_feature (
467
- graph,
468
- INTERNED_DEFAULT ,
469
- Some ( from_index) ,
470
- dep_index,
471
- EdgeKind :: Dep ( dep. kind ( ) ) ,
472
- ) ;
470
+ add_feature ( graph, INTERNED_DEFAULT , Some ( from_index) , new_edge) ;
473
471
}
474
472
for feature in dep. features ( ) . iter ( ) {
475
- add_feature (
476
- graph,
477
- * feature,
478
- Some ( from_index) ,
479
- dep_index,
480
- EdgeKind :: Dep ( dep. kind ( ) ) ,
481
- ) ;
473
+ add_feature ( graph, * feature, Some ( from_index) , new_edge) ;
482
474
}
483
475
if !dep. uses_default_features ( ) && dep. features ( ) . is_empty ( ) {
484
476
// No features, use a direct connection.
485
- let new_edge = Edge {
486
- kind : EdgeKind :: Dep ( dep. kind ( ) ) ,
487
- node : dep_index,
488
- } ;
489
477
graph. edges [ from_index] . add_edge ( new_edge) ;
490
478
}
491
479
} else {
492
- let new_edge = Edge {
493
- kind : EdgeKind :: Dep ( dep. kind ( ) ) ,
494
- node : dep_index,
495
- } ;
496
480
graph. edges [ from_index] . add_edge ( new_edge) ;
497
481
}
498
482
}
@@ -522,13 +506,12 @@ fn add_feature(
522
506
graph : & mut Graph < ' _ > ,
523
507
name : InternedString ,
524
508
from : Option < usize > ,
525
- to : usize ,
526
- kind : EdgeKind ,
509
+ to : Edge ,
527
510
) -> ( bool , usize ) {
528
511
// `to` *must* point to a package node.
529
- assert ! ( matches! { graph. nodes[ to] , Node :: Package { ..} } ) ;
512
+ assert ! ( matches! { graph. nodes[ to. node ( ) ] , Node :: Package { ..} } ) ;
530
513
let node = Node :: Feature {
531
- node_index : to,
514
+ node_index : to. node ( ) ,
532
515
name,
533
516
} ;
534
517
let ( missing, node_index) = match graph. index . get ( & node) {
@@ -537,14 +520,14 @@ fn add_feature(
537
520
} ;
538
521
if let Some ( from) = from {
539
522
let from_edge = Edge {
540
- kind,
523
+ kind : to . kind ( ) ,
541
524
node : node_index,
542
525
} ;
543
526
graph. edges [ from] . add_edge ( from_edge) ;
544
527
}
545
528
let to_edge = Edge {
546
529
kind : EdgeKind :: Feature ,
547
- node : to,
530
+ node : to. node ( ) ,
548
531
} ;
549
532
graph. edges [ node_index] . add_edge ( to_edge) ;
550
533
( missing, node_index)
@@ -579,7 +562,11 @@ fn add_cli_features(
579
562
for fv in to_add {
580
563
match fv {
581
564
FeatureValue :: Feature ( feature) => {
582
- let index = add_feature ( graph, feature, None , package_index, EdgeKind :: Feature ) . 1 ;
565
+ let feature_edge = Edge {
566
+ kind : EdgeKind :: Feature ,
567
+ node : package_index,
568
+ } ;
569
+ let index = add_feature ( graph, feature, None , feature_edge) . 1 ;
583
570
graph. cli_features . insert ( index) ;
584
571
}
585
572
// This is enforced by CliFeatures.
@@ -609,12 +596,18 @@ fn add_cli_features(
609
596
for ( dep_index, is_optional) in dep_connections {
610
597
if is_optional {
611
598
// Activate the optional dep on self.
612
- let index =
613
- add_feature ( graph, dep_name, None , package_index, EdgeKind :: Feature ) . 1 ;
599
+ let feature_edge = Edge {
600
+ kind : EdgeKind :: Feature ,
601
+ node : package_index,
602
+ } ;
603
+ let index = add_feature ( graph, dep_name, None , feature_edge) . 1 ;
614
604
graph. cli_features . insert ( index) ;
615
605
}
616
- let index =
617
- add_feature ( graph, dep_feature, None , dep_index, EdgeKind :: Feature ) . 1 ;
606
+ let dep_edge = Edge {
607
+ kind : EdgeKind :: Feature ,
608
+ node : dep_index,
609
+ } ;
610
+ let index = add_feature ( graph, dep_feature, None , dep_edge) . 1 ;
618
611
graph. cli_features . insert ( index) ;
619
612
}
620
613
}
@@ -670,13 +663,11 @@ fn add_feature_rec(
670
663
for fv in fvs {
671
664
match fv {
672
665
FeatureValue :: Feature ( dep_name) => {
673
- let ( missing, feat_index) = add_feature (
674
- graph,
675
- * dep_name,
676
- Some ( from) ,
677
- package_index,
678
- EdgeKind :: Feature ,
679
- ) ;
666
+ let feature_edge = Edge {
667
+ kind : EdgeKind :: Feature ,
668
+ node : package_index,
669
+ } ;
670
+ let ( missing, feat_index) = add_feature ( graph, * dep_name, Some ( from) , feature_edge) ;
680
671
// Don't recursive if the edge already exists to deal with cycles.
681
672
if missing {
682
673
add_feature_rec (
@@ -722,21 +713,18 @@ fn add_feature_rec(
722
713
let dep_pkg_id = graph. package_id_for_index ( dep_index) ;
723
714
if is_optional && !weak {
724
715
// Activate the optional dep on self.
725
- add_feature (
726
- graph,
727
- * dep_name,
728
- Some ( from) ,
729
- package_index,
730
- EdgeKind :: Feature ,
731
- ) ;
716
+ let feature_edge = Edge {
717
+ kind : EdgeKind :: Feature ,
718
+ node : package_index,
719
+ } ;
720
+ add_feature ( graph, * dep_name, Some ( from) , feature_edge) ;
732
721
}
733
- let ( missing, feat_index) = add_feature (
734
- graph,
735
- * dep_feature,
736
- Some ( from) ,
737
- dep_index,
738
- EdgeKind :: Feature ,
739
- ) ;
722
+ let dep_edge = Edge {
723
+ kind : EdgeKind :: Feature ,
724
+ node : dep_index,
725
+ } ;
726
+ let ( missing, feat_index) =
727
+ add_feature ( graph, * dep_feature, Some ( from) , dep_edge) ;
740
728
if missing {
741
729
add_feature_rec (
742
730
graph,
0 commit comments