File: //usr/lib/ruby/gems/3.2.0/gems/rbs-2.8.2/sig/environment_walker.rbs
module RBS
# EnvironmentWalker provides topological sort of class/module definitions.
#
# If a method, attribute, or ancestor in a class definition have a reference to another class, it is dependency.
#
# ```rb
# walker = EnvironmentWalker.new(env: env)
#
# walker.each_strongly_connected_component do |scc|
# # Yields an array of strongly connected components.
# end
# ```
#
# The `#only_ancestors!` method limits the dependency only to ancestors.
# Only super classes and included modules are dependencies with the option.
# This is useful to calculate the dependencies of class hierarchy.
#
# ```rb
# walker = EnvironmentWalker.new(env: env).only_ancestors!
#
# walker.each_strongly_connected_component do |scc|
# # Yields an array of strongly connected components.
# end
# ```
#
class EnvironmentWalker
class InstanceNode
attr_reader type_name: TypeName
def initialize: (type_name: TypeName) -> void
end
class SingletonNode
attr_reader type_name: TypeName
def initialize: (type_name: TypeName) -> void
end
class TypeNameNode
attr_reader type_name: TypeName
def initialize: (type_name: TypeName) -> void
end
attr_reader env: Environment
attr_reader only_ancestors: bool
attr_reader builder: DefinitionBuilder
def initialize: (env: Environment) -> void
def only_ancestors!: (?bool only) -> self
def only_ancestors?: () -> bool
type node = InstanceNode | SingletonNode | TypeNameNode
include TSort[node]
def tsort_each_node: () { (node) -> void } -> void
def tsort_each_child: (node) { (node) -> void } -> void
private
def each_type_name: (Types::t) { (TypeName) -> void } -> void
def each_type_node: (Types::t) { (node) -> void } -> void
end
end