Module: RbsActiverecord::Parser::Evaluator

Defined in:
lib/rbs_activerecord/parser/evaluator.rb

Class Method Summary collapse

Class Method Details

.eval_node(node) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rbs_activerecord/parser/evaluator.rb', line 7

def eval_node(node) #: untyped # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
  case node
  when Prism::NilNode
    nil
  when Prism::TrueNode
    true
  when Prism::FalseNode
    false
  when Prism::SymbolNode
    node.value.to_s.to_sym
  when Prism::IntegerNode
    node.value
  when Prism::StringNode
    node.unescaped
  when Prism::ArrayNode
    node.elements.map { |e| eval_node(e) }
  when Prism::HashNode, Prism::KeywordHashNode
    node.elements.filter_map do |assoc|
      case assoc
      when Prism::AssocNode
        key = eval_node(assoc.key)
        value = eval_node(assoc.value)
        [key, value]
      end
    end.to_h
  when Prism::ConstantReadNode
    node.name.to_s
  when Prism::ConstantPathNode
    parent = node.parent ? eval_node(node.parent) : nil
    "#{parent}::#{node.name}"
  end
end