Class: SyntaxTree::ERB::Format
- Inherits:
-
Visitor
- Object
- Visitor
- Visitor
- SyntaxTree::ERB::Format
show all
- Defined in:
- lib/syntax_tree/erb/format.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Methods inherited from Visitor
#visit, #visit_statements
Constructor Details
#initialize(q) ⇒ Format
Returns a new instance of Format.
8
9
10
|
# File 'lib/syntax_tree/erb/format.rb', line 8
def initialize(q)
@q = q
end
|
Instance Attribute Details
#q ⇒ Object
Returns the value of attribute q.
6
7
8
|
# File 'lib/syntax_tree/erb/format.rb', line 6
def q
@q
end
|
Instance Method Details
#check_for_if_statement(node) ⇒ Object
230
231
232
233
234
235
236
237
238
239
240
|
# File 'lib/syntax_tree/erb/format.rb', line 230
def check_for_if_statement(node)
return false if node.nil?
if node.is_a?(SyntaxTree::IfNode) || node.is_a?(SyntaxTree::IfOp)
return true
end
node.child_nodes.any? do |child_node|
check_for_if_statement(child_node)
end
end
|
#erb_print_width(node) ⇒ Object
224
225
226
227
228
|
# File 'lib/syntax_tree/erb/format.rb', line 224
def erb_print_width(node)
check_for_if_statement(node) ? 999_999 : SyntaxTree::ERB::MAX_WIDTH
end
|
133
134
135
136
137
138
139
140
141
|
# File 'lib/syntax_tree/erb/format.rb', line 133
def format_statement(statement)
formatter =
SyntaxTree::Formatter.new("", [], erb_print_width(statement))
formatter.format(statement)
formatter.flush
rows = formatter.output.join.split("\n")
output_rows(formatter.output.join.split("\n"))
end
|
#output_rows(rows) ⇒ Object
143
144
145
146
147
148
149
|
# File 'lib/syntax_tree/erb/format.rb', line 143
def output_rows(rows)
if rows.size > 1
q.seplist(rows, -> { q.breakable("") }) { |row| q.text(row) }
elsif rows.size == 1
q.text(rows.first)
end
end
|
#visit_attribute(node) ⇒ Object
181
182
183
184
185
186
187
|
# File 'lib/syntax_tree/erb/format.rb', line 181
def visit_attribute(node)
q.group do
visit(node.key)
visit(node.equals)
visit(node.value)
end
end
|
#visit_block(node) ⇒ Object
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
# File 'lib/syntax_tree/erb/format.rb', line 32
def visit_block(node)
visit(node.opening)
if node.elements.any?
q.indent do
q.breakable("")
q.seplist(
node.elements,
-> { q.breakable(force: true) }
) { |child_node| visit(child_node) }
end
end
if node.closing
q.breakable("")
visit(node.closing)
end
end
|
#visit_char_data(node) ⇒ Object
203
204
205
206
207
208
209
210
211
|
# File 'lib/syntax_tree/erb/format.rb', line 203
def visit_char_data(node)
lines = node.value.value.strip.split("\n")
if lines.size > 0
q.seplist(lines, -> { q.breakable(indent: false) }) do |line|
q.text(line)
end
end
end
|
#visit_closing_tag(node) ⇒ Object
Visit an HtmlNode::ClosingTag node.
172
173
174
175
176
177
178
|
# File 'lib/syntax_tree/erb/format.rb', line 172
def visit_closing_tag(node)
q.group do
visit(node.opening)
visit(node.name)
visit(node.closing)
end
end
|
#visit_doctype(node) ⇒ Object
214
215
216
217
218
219
220
221
222
|
# File 'lib/syntax_tree/erb/format.rb', line 214
def visit_doctype(node)
q.group do
visit(node.opening)
q.text(" ")
visit(node.name)
visit(node.closing)
end
end
|
#visit_document(node) ⇒ Object
22
23
24
25
26
27
28
29
30
|
# File 'lib/syntax_tree/erb/format.rb', line 22
def visit_document(node)
child_nodes = node.child_nodes.sort_by(&:location)
q.seplist(child_nodes, -> { q.breakable(force: true) }) do |child_node|
visit(child_node)
end
q.breakable(force: true)
end
|
#visit_erb(node) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
|
# File 'lib/syntax_tree/erb/format.rb', line 80
def visit_erb(node)
visit(node.opening_tag)
if node.keyword
q.text(" ")
visit(node.keyword)
end
node.content.nil? ? q.text(" ") : visit(node.content)
visit(node.closing_tag)
end
|
#visit_erb_block(node) ⇒ Object
55
56
57
|
# File 'lib/syntax_tree/erb/format.rb', line 55
def visit_erb_block(node)
visit_block(node)
end
|
#visit_erb_case(node) ⇒ Object
71
72
73
|
# File 'lib/syntax_tree/erb/format.rb', line 71
def visit_erb_case(node)
visit_block(node)
end
|
#visit_erb_case_when(node) ⇒ Object
75
76
77
|
# File 'lib/syntax_tree/erb/format.rb', line 75
def visit_erb_case_when(node)
visit_block(node)
end
|
#visit_erb_close(node) ⇒ Object
96
97
98
|
# File 'lib/syntax_tree/erb/format.rb', line 96
def visit_erb_close(node)
visit(node.closing)
end
|
#visit_erb_content(node) ⇒ Object
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
|
# File 'lib/syntax_tree/erb/format.rb', line 109
def visit_erb_content(node)
if node.value.is_a?(String)
output_rows(node.value.split("\n"))
else
child_nodes = node.value&.statements&.child_nodes || []
if child_nodes.size == 1
q.text(" ")
q.seplist(child_nodes, -> { q.breakable("") }) do |child_node|
format_statement(child_node)
end
q.text(" ")
elsif child_nodes.size > 1
q.indent do
q.breakable("")
q.seplist(child_nodes, -> { q.breakable("") }) do |child_node|
format_statement(child_node)
end
end
q.breakable
end
end
end
|
#visit_erb_do_close(node) ⇒ Object
92
93
94
|
# File 'lib/syntax_tree/erb/format.rb', line 92
def visit_erb_do_close(node)
visit(node.closing)
end
|
#visit_erb_else(node) ⇒ Object
67
68
69
|
# File 'lib/syntax_tree/erb/format.rb', line 67
def visit_erb_else(node)
visit_block(node)
end
|
#visit_erb_elsif(node) ⇒ Object
63
64
65
|
# File 'lib/syntax_tree/erb/format.rb', line 63
def visit_erb_elsif(node)
visit_block(node)
end
|
#visit_erb_end(node) ⇒ Object
101
102
103
104
105
106
107
|
# File 'lib/syntax_tree/erb/format.rb', line 101
def visit_erb_end(node)
visit(node.opening_tag)
q.text(" ")
visit(node.keyword)
q.text(" ")
visit(node.closing_tag)
end
|
#visit_erb_if(node) ⇒ Object
59
60
61
|
# File 'lib/syntax_tree/erb/format.rb', line 59
def visit_erb_if(node)
visit_block(node)
end
|
#visit_html(node) ⇒ Object
51
52
53
|
# File 'lib/syntax_tree/erb/format.rb', line 51
def visit_html(node)
visit_block(node)
end
|
198
199
200
|
# File 'lib/syntax_tree/erb/format.rb', line 198
def (node)
visit(node.token)
end
|
#visit_html_string(node) ⇒ Object
190
191
192
193
194
195
196
|
# File 'lib/syntax_tree/erb/format.rb', line 190
def visit_html_string(node)
q.group do
q.text("\"")
q.seplist(node.contents, -> { "" }) { |child_node| visit(child_node) }
q.text("\"")
end
end
|
#visit_opening_tag(node) ⇒ Object
Visit an HtmlNode::OpeningTag node.
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
# File 'lib/syntax_tree/erb/format.rb', line 152
def visit_opening_tag(node)
q.group do
visit(node.opening)
visit(node.name)
if node.attributes.any?
q.indent do
q.breakable
q.seplist(node.attributes, -> { q.breakable }) do |child_node|
visit(child_node)
end
end
end
q.breakable(node.closing.value == "/>" ? " " : "")
visit(node.closing)
end
end
|
#visit_token(node) ⇒ Object
13
14
15
16
17
18
19
|
# File 'lib/syntax_tree/erb/format.rb', line 13
def visit_token(node)
if i[text whitespace].include?(node.type)
q.text(node.value)
else
q.text(node.value.strip)
end
end
|