@@ -1197,20 +1197,27 @@ defmodule Mix.Tasks.Xref do
1197
1197
defp cycle_filter_fn ( filter ) , do: fn { _node , type } -> type == filter end
1198
1198
1199
1199
defp add_labels ( vertices , graph ) do
1200
+ set = MapSet . new ( vertices )
1201
+
1200
1202
vertices
1201
- |> Enum . map ( fn v -> { v , cycle_label ( vertices , graph , v , false ) } end )
1203
+ |> Enum . map ( fn v ->
1204
+ { v ,
1205
+ graph
1206
+ |> :digraph . out_neighbours ( v )
1207
+ |> cycle_label ( set , graph , v , false ) }
1208
+ end )
1202
1209
|> Enum . sort ( )
1203
1210
end
1204
1211
1205
- defp cycle_label ( [ out | outs ] , graph , v , export? ) do
1206
- case :digraph . edge ( graph , { v , out } ) do
1212
+ defp cycle_label ( [ out | outs ] , set , graph , v , export? ) do
1213
+ case out in set && :digraph . edge ( graph , { v , out } ) do
1207
1214
{ _ , _ , _ , :compile } -> :compile
1208
- { _ , _ , _ , :export } -> cycle_label ( outs , graph , v , true )
1209
- _ -> cycle_label ( outs , graph , v , export? )
1215
+ { _ , _ , _ , :export } -> cycle_label ( outs , set , graph , v , true )
1216
+ _ -> cycle_label ( outs , set , graph , v , export? )
1210
1217
end
1211
1218
end
1212
1219
1213
- defp cycle_label ( [ ] , _graph , _v , export? ) do
1220
+ defp cycle_label ( [ ] , _set , _graph , _v , export? ) do
1214
1221
if export? , do: :export , else: nil
1215
1222
end
1216
1223
0 commit comments