Skip to content

Commit b856f14

Browse files
authored
Merge pull request #8 from bobjflong/BL/tests
Fix tests by making formatting levels optional
2 parents 58e7de2 + e6d055d commit b856f14

File tree

2 files changed

+52
-28
lines changed

2 files changed

+52
-28
lines changed

lib/es_tree/tools/generator.ex

Lines changed: 51 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ defmodule ESTree.Tools.Generator do
1616
@indent " "
1717

1818
@spec generate(ESTree.operator | ESTree.Node.t, integer) :: binary
19-
def generate(value, level \\ 0) do
20-
"#{indent(level)}#{do_generate(value, level + 1)}"
19+
def generate(value, level \\ nil) do
20+
"#{indent(level)}#{do_generate(value, calculate_next_level(level))}"
2121
end
2222

2323
def do_generate(nil, level)do
@@ -63,7 +63,7 @@ defmodule ESTree.Tools.Generator do
6363
end
6464

6565
def do_generate(%ESTree.Program{body: body}, level) do
66-
Enum.map_join(body, "\n", &generate(&1, level + 1))
66+
Enum.map_join(body, newline(level), &generate(&1, calculate_next_level(level)))
6767
end
6868

6969
def do_generate(%ESTree.FunctionDeclaration{} = ast, level) do
@@ -73,23 +73,23 @@ defmodule ESTree.Tools.Generator do
7373
params = params_and_defaults(ast.params, ast.defaults)
7474
id = generate(ast.id)
7575

76-
"#{async}function#{generator} #{id}(#{params})#{generate(ast.body, level + 1)}"
76+
"#{async}function#{generator} #{id}(#{params})#{generate(ast.body, calculate_next_level(level))}"
7777
end
7878

7979
def do_generate(%ESTree.FunctionExpression{} = ast, level) do
8080
generator = if ast.generator, do: "*", else: ""
8181
async = if ast.async, do: "async ", else: ""
8282
params = params_and_defaults(ast.params, ast.defaults)
8383

84-
"#{async}function#{generator}(#{params})#{generate(ast.body, level + 1)}"
84+
"#{async}function#{generator}(#{params})#{generate(ast.body, calculate_next_level(level))}"
8585
end
8686

8787
def do_generate(%ESTree.EmptyStatement{}, level) do
8888
";"
8989
end
9090

9191
def do_generate(%ESTree.BlockStatement{body: body}, level) do
92-
"{\n#{indent(level + 1)}" <> Enum.map_join(body, "\n#{indent(level + 1)}", &generate(&1)) <> "\n#{indent(level)}}"
92+
"{#{newline(level)}#{indent(calculate_next_level(level))}" <> Enum.map_join(body, "#{newline(level)}#{indent(calculate_next_level(level))}", &generate(&1)) <> "#{newline(level)}#{indent(level)}}"
9393
end
9494

9595
def do_generate(%ESTree.ExpressionStatement{expression: expression}, level) do
@@ -98,11 +98,11 @@ defmodule ESTree.Tools.Generator do
9898

9999
def do_generate(%ESTree.IfStatement{test: test, consequent: consequent, alternate: alternate}, level) do
100100
test = generate(test)
101-
consequent = generate(consequent, level + 1)
101+
consequent = generate(consequent, calculate_next_level(level))
102102
result = "if(#{test}) #{consequent}"
103103

104104
if alternate do
105-
result = result <> " else #{generate(alternate, level + 1)}"
105+
result = result <> " else #{generate(alternate, calculate_next_level(level))}"
106106
end
107107

108108
result
@@ -111,7 +111,7 @@ defmodule ESTree.Tools.Generator do
111111
def do_generate(%ESTree.LabeledStatement{label: label, body: body}, level) do
112112
"""
113113
#{generate(label, level)}:
114-
#{generate(body, level + 1)}
114+
#{generate(body, calculate_next_level(level))}
115115
"""
116116
end
117117

@@ -132,55 +132,55 @@ defmodule ESTree.Tools.Generator do
132132
end
133133

134134
def do_generate(%ESTree.WithStatement{object: object, body: body}, level) do
135-
"with(#{generate(object)})#{generate(body, level + 1)}"
135+
"with(#{generate(object)})#{generate(body, calculate_next_level(level))}"
136136
end
137137

138138
def do_generate(%ESTree.SwitchStatement{discriminant: discriminant, cases: cases}, level) do
139-
cases = Enum.map_join(cases, "\n", &generate(&1, level + 1))
139+
cases = Enum.map_join(cases, newline(level), &generate(&1, calculate_next_level(level)))
140140
"switch(#{generate(discriminant)}){ #{cases} }"
141141
end
142142

143143
def do_generate(%ESTree.ReturnStatement{argument: argument}, level) do
144-
"return #{generate(argument, level + 1)};"
144+
"return #{generate(argument, calculate_next_level(level))};"
145145
end
146146

147147
def do_generate(%ESTree.ThrowStatement{argument: argument}, level) do
148-
"throw #{generate(argument, level + 1)};"
148+
"throw #{generate(argument, calculate_next_level(level))};"
149149
end
150150

151151
def do_generate(%ESTree.TryStatement{block: block, handler: handler, finalizer: nil}, level) do
152-
"try#{generate(block, level + 1)}#{generate(handler, level + 1)}"
152+
"try#{generate(block, calculate_next_level(level))}#{generate(handler, calculate_next_level(level))}"
153153
end
154154

155155
def do_generate(%ESTree.TryStatement{block: block, handler: nil, finalizer: finalizer}, level) do
156-
"try#{generate(block, level + 1)}finally#{generate(finalizer, level + 1)}"
156+
"try#{generate(block, calculate_next_level(level))}finally#{generate(finalizer, calculate_next_level(level))}"
157157
end
158158

159159
def do_generate(%ESTree.TryStatement{block: block, handler: handler, finalizer: finalizer}, level) do
160-
"try#{generate(block, level + 1)}#{generate(handler, level + 1)}finally#{generate(finalizer, level + 1)}"
160+
"try#{generate(block, calculate_next_level(level))}#{generate(handler, calculate_next_level(level))}finally#{generate(finalizer, calculate_next_level(level))}"
161161
end
162162

163163
def do_generate(%ESTree.WhileStatement{test: test, body: body}, level) do
164-
"while(#{generate(test)}) #{generate(body, level + 1)}"
164+
"while(#{generate(test)}) #{generate(body, calculate_next_level(level))}"
165165
end
166166

167167
def do_generate(%ESTree.DoWhileStatement{test: test, body: body}, level) do
168-
"do #{generate(body, level + 1)} while(#{generate(test, level)});"
168+
"do #{generate(body, calculate_next_level(level))} while(#{generate(test, level)});"
169169
end
170170

171171
def do_generate(%ESTree.ForStatement{init: init, test: test, update: update, body: body}, level) do
172172
init = generate(init)
173173
test = generate(test)
174174
update = generate(update)
175-
body = generate(body, level + 1)
175+
body = generate(body, calculate_next_level(level))
176176

177177
"for(#{init}; #{test}; #{update}) #{body}"
178178
end
179179

180180
def do_generate(%ESTree.ForInStatement{left: left, right: right, body: body}, level) do
181181
left = generate(left) |> String.replace(";","")
182182
right = generate(right)
183-
body = generate(body, level + 1)
183+
body = generate(body, calculate_next_level(level))
184184

185185
"for(#{left} in #{right}) #{body}"
186186
end
@@ -232,7 +232,7 @@ defmodule ESTree.Tools.Generator do
232232
end
233233

234234
def do_generate(%ESTree.ObjectExpression{properties: properties}, level) do
235-
"{\n#{indent(level + 1)}" <> Enum.map_join(properties, ", ", &generate(&1, level + 1)) <> "\n#{indent(level)}}"
235+
"{#{newline(level)}#{indent(calculate_next_level(level))}" <> Enum.map_join(properties, ", ", &generate(&1, calculate_next_level(level))) <> "#{newline(level)}#{indent(level)}}"
236236
end
237237

238238
def do_generate(%ESTree.Property{key: key, value: value, kind: :init, shorthand: false, method: false, computed: false}, level) do
@@ -409,7 +409,7 @@ defmodule ESTree.Tools.Generator do
409409
end
410410

411411
def do_generate(%ESTree.SwitchCase{test: nil, consequent: consequent}, level) do
412-
consequent = Enum.map_join(consequent, "\n", &generate(&1))
412+
consequent = Enum.map_join(consequent, newline(level), &generate(&1))
413413
"""
414414
default:
415415
#{consequent}
@@ -418,7 +418,7 @@ defmodule ESTree.Tools.Generator do
418418

419419
def do_generate(%ESTree.SwitchCase{test: test, consequent: consequent}, level) do
420420
test = generate(test)
421-
consequent = Enum.map_join(consequent, "\n", &generate(&1))
421+
consequent = Enum.map_join(consequent, newline(level), &generate(&1))
422422

423423
"""
424424
case #{test}:
@@ -523,7 +523,7 @@ defmodule ESTree.Tools.Generator do
523523
end
524524

525525
def do_generate(%ESTree.ClassBody{body: body}, level) do
526-
body = Enum.map_join(body, "\n", &generate(&1))
526+
body = Enum.map_join(body, newline(level), &generate(&1))
527527

528528
"{ #{body} }"
529529
end
@@ -728,8 +728,12 @@ defmodule ESTree.Tools.Generator do
728728

729729
def do_generate(%ESTree.JSXOpeningElement{ name: name, attributes: attributes, selfClosing: selfClosing }, level) do
730730
selfClosing = if selfClosing, do: "/", else: ""
731-
732-
"<#{generate(name)} #{ Enum.map(attributes, &generate(&1)) |> Enum.join(" ") }#{selfClosing}>"
731+
attributesValue = cond do
732+
Enum.empty?(attributes) -> ""
733+
true ->
734+
" #{Enum.map(attributes, &generate(&1)) |> Enum.join(" ")}"
735+
end
736+
"<#{generate(name)}#{attributesValue}#{selfClosing}>"
733737
end
734738

735739
def do_generate(%ESTree.JSXClosingElement{ name: name }, level) do
@@ -745,7 +749,7 @@ defmodule ESTree.Tools.Generator do
745749
end
746750

747751
def do_generate(%ESTree.JSXElement{ openingElement: openingElement, children: children, closingElement: closingElement }, level) do
748-
"#{ generate(openingElement) } #{ Enum.map(children, &generate(&1, level + 1)) |> Enum.join(" ") } #{ generate(closingElement) }"
752+
"#{ generate(openingElement) }#{ Enum.map(children, &generate(&1, calculate_next_level(level))) |> Enum.join(" ") }#{ generate(closingElement) }"
749753
end
750754

751755
defp convert_string_characters(str) do
@@ -765,7 +769,27 @@ defmodule ESTree.Tools.Generator do
765769
end)
766770
end
767771

772+
defp indent(nil) do
773+
""
774+
end
775+
768776
defp indent(level) do
769777
String.duplicate(" ", level)
770778
end
779+
780+
defp calculate_next_level(nil) do
781+
nil
782+
end
783+
784+
defp calculate_next_level(level) do
785+
level + 1
786+
end
787+
788+
defp newline(nil) do
789+
""
790+
end
791+
792+
defp newline(level) do
793+
"\n"
794+
end
771795
end

test/tools/generator/while_statement_test.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ defmodule ESTree.Tools.Generator.WhileStatement.Test do
1717
Builder.block_statement([]),
1818
Builder.identifier(:test)
1919
)
20-
assert Generator.generate(ast) == "do {} while(test)"
20+
assert Generator.generate(ast) == "do {} while(test);"
2121
end
2222

2323
end

0 commit comments

Comments
 (0)