13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/graphql/modernize/class_hierarchy.rb', line 13
def call(ast)
declarations = []
calls = []
methods = []
singleton_classes = []
scopes = []
dispatcher = Astel::Dispatcher.new
dispatcher.on(:class_node) { |node| declarations << [node, false] }
dispatcher.on(:module_node) { |node| declarations << [node, true] }
dispatcher.on(:call_node) { |node| calls << node if node.receiver.nil? }
dispatcher.on(:def_node) do |node|
methods << node
scopes << node
end
dispatcher.on(:alias_method_node) { |node| methods << node }
dispatcher.on(:block_node) { |node| scopes << node }
dispatcher.on(:lambda_node) { |node| scopes << node }
dispatcher.on(:singleton_class_node) do |node|
singleton_classes << node if node.expression.is_a?(Prism::SelfNode)
end
dispatcher.run(ast)
HierarchyNodes.new(declarations: declarations, calls: calls, method_nodes: methods,
singleton_classes: singleton_classes, scopes: scopes)
end
|