@@ -42,10 +42,7 @@ impl Resolve {
42
42
pub fn solution_of ( & self , root_package : PackageId , target_kind : & TargetKind ) -> Vec < PackageId > {
43
43
assert ! ( & self . graph. contains_node( root_package) ) ;
44
44
let filtered_graph = EdgeFiltered :: from_fn ( & self . graph , move |( node_a, _node_b, edge) | {
45
- if target_kind == & TargetKind :: TEST && node_a != root_package {
46
- return false ;
47
- }
48
- edge. accepts_target ( target_kind. clone ( ) )
45
+ edge. accepts_target ( target_kind. clone ( ) , node_a == root_package)
49
46
} ) ;
50
47
Dfs :: new ( & filtered_graph, root_package)
51
48
. iter ( & filtered_graph)
@@ -71,10 +68,15 @@ impl DependencyEdge {
71
68
Self :: default ( )
72
69
}
73
70
74
- pub fn accepts_target ( & self , target_kind : TargetKind ) -> bool {
75
- // Empty target lists accepts all target kinds.
76
- // Represents `[dependencies]` table from manifest file.
77
- self . 0 . is_empty ( ) || self . 0 . iter ( ) . any ( |name| target_kind == * name)
71
+ pub fn accepts_target ( & self , target_kind : TargetKind , is_root : bool ) -> bool {
72
+ if self . 0 . is_empty ( ) {
73
+ // Empty target lists accepts all target kinds.
74
+ // Represents `[dependencies]` table from manifest file.
75
+ return true ;
76
+ }
77
+ // For `TargetKind::TEST`, we should not consider the root package dependencies.
78
+ ( is_root || target_kind != TargetKind :: TEST )
79
+ && self . 0 . iter ( ) . any ( |name| target_kind == * name)
78
80
}
79
81
80
82
pub fn extend ( self , target_kind : Option < TargetKind > ) -> Self {
0 commit comments