Module: GraphQL::Modernize::HierarchyScanner

Defined in:
lib/graphql/modernize/class_hierarchy.rb

Class Method Summary collapse

Class Method Details

.call(ast) ⇒ Object



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