Module: Herb::PrismInspect

Defined in:
lib/herb/prism_inspect.rb

Constant Summary collapse

SKIP_FIELDS =
[:node_id, :location, :flags].freeze

Class Method Summary collapse

Class Method Details

.inspect_prism_node(node, source, prefix) ⇒ Object

: (Prism::Node, String, String) -> String



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/herb/prism_inspect.rb', line 29

def inspect_prism_node(node, source, prefix)
  output = +""
  node_name = node.class.name&.split("::")&.last || "Node"
  output << "@ #{node_name} (location: #{format_location(node.location)})\n"

  fields = display_fields(node)

  fields.each_with_index do |(name, value), i|
    is_last = i == fields.size - 1
    symbol = is_last ? "└── " : "├── "
    child_prefix = prefix + (is_last ? "    " : "")

    output << inspect_field(name, value, source, prefix, symbol, child_prefix)
  end

  output
end

.inspect_prism_serialized(serialized_bytes, source, prefix) ⇒ Object

: (String, String, String) -> String



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/herb/prism_inspect.rb', line 9

def inspect_prism_serialized(serialized_bytes, source, prefix)
  return "" unless serialized_bytes

  begin
    require "prism"
  rescue LoadError
    return "(#{serialized_bytes.bytesize} bytes, prism gem not available)"
  end

  node = Prism.load(source, serialized_bytes).value
  return "" unless node

  tree = inspect_prism_node(node, source, "#{prefix}    ")

  "\n#{prefix}└── #{tree.strip}"
rescue StandardError => e
  "(#{serialized_bytes.bytesize} bytes, deserialize error: #{e.message})"
end