class RBS::TypeAliasDependency

def dependency(start, vertex, nested = nil)

Recursive function to construct transitive closure
def dependency(start, vertex, nested = nil)
  if (start == vertex)
    if (@direct_dependencies[start].include?(vertex) || nested)
      # Mark a vertex as connected to itself
      # if it is connected as an edge || a path(traverse multiple edges)
      @dependencies[start][vertex] = true
    end
  else
    # Mark a pair of vertices as connected while recursively performing DFS
    @dependencies[start][vertex] = true
  end
  # Iterate over the direct dependencies of the vertex
  @direct_dependencies[vertex]&.each do |type_name|
    # Invoke the function unless it is already checked
    dependency(start, type_name, start == type_name) unless @dependencies[start][type_name]
  end
end