Skip to content

Commit 98080d9

Browse files
committed
Filter neighbours when looking for cycle labels
1 parent 228c332 commit 98080d9

File tree

1 file changed

+13
-6
lines changed

1 file changed

+13
-6
lines changed

lib/mix/lib/mix/tasks/xref.ex

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,20 +1197,27 @@ defmodule Mix.Tasks.Xref do
11971197
defp cycle_filter_fn(filter), do: fn {_node, type} -> type == filter end
11981198

11991199
defp add_labels(vertices, graph) do
1200+
set = MapSet.new(vertices)
1201+
12001202
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)
12021209
|> Enum.sort()
12031210
end
12041211

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
12071214
{_, _, _, :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?)
12101217
end
12111218
end
12121219

1213-
defp cycle_label([], _graph, _v, export?) do
1220+
defp cycle_label([], _set, _graph, _v, export?) do
12141221
if export?, do: :export, else: nil
12151222
end
12161223

0 commit comments

Comments
 (0)