Class: SyntaxTree::JSON::Format

Inherits:
Visitor
  • Object
show all
Defined in:
lib/syntax_tree/json/format.rb

Overview

This class is a visitor responsible for formatting the AST.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Visitor

#visit, #visit_all, #visit_child_nodes

Constructor Details

#initialize(q) ⇒ Format

Returns a new instance of Format.



9
10
11
# File 'lib/syntax_tree/json/format.rb', line 9

def initialize(q)
  @q = q
end

Instance Attribute Details

#qObject (readonly)

Returns the value of attribute q.



7
8
9
# File 'lib/syntax_tree/json/format.rb', line 7

def q
  @q
end

Instance Method Details

#visit_array(node) ⇒ Object

Visit an AST::Array node.



14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/syntax_tree/json/format.rb', line 14

def visit_array(node)
  q.group do
    q.text("[")

    q.indent do
      q.breakable("")
      q.seplist(node.values) { |value| visit(value) }
    end

    q.breakable("")
    q.text("]")
  end
end

#visit_false(node) ⇒ Object

Visit an AST::False node.



29
30
31
# File 'lib/syntax_tree/json/format.rb', line 29

def visit_false(node)
  q.text("false")
end

#visit_null(node) ⇒ Object

Visit an AST::Null node.



34
35
36
# File 'lib/syntax_tree/json/format.rb', line 34

def visit_null(node)
  q.text("null")
end

#visit_number(node) ⇒ Object

Visit an AST::Number node.



39
40
41
# File 'lib/syntax_tree/json/format.rb', line 39

def visit_number(node)
  q.text(node.value)
end

#visit_object(node) ⇒ Object

Visit an AST::Object node.



44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/syntax_tree/json/format.rb', line 44

def visit_object(node)
  q.group do
    q.text("{")

    q.indent do
      q.breakable
      q.seplist(node.values, nil, :each_pair) do |key, value|
        q.group do
          q.text(key)
          q.text(": ")
          visit(value)
        end
      end
    end

    q.breakable
    q.text("}")
  end
end

#visit_root(node) ⇒ Object

Visit an AST::Root node.



65
66
67
68
# File 'lib/syntax_tree/json/format.rb', line 65

def visit_root(node)
  visit(node.value)
  q.breakable(force: true)
end

#visit_string(node) ⇒ Object

Visit an AST::String node.



71
72
73
# File 'lib/syntax_tree/json/format.rb', line 71

def visit_string(node)
  q.text(node.value)
end

#visit_true(node) ⇒ Object

Visit an AST::True node.



76
77
78
# File 'lib/syntax_tree/json/format.rb', line 76

def visit_true(node)
  q.text("true")
end