Skip to content

Commit 003bcf5

Browse files
authored
Merge pull request #9 from bobjflong/BL/formatting
Fixup and spec for object formatting
2 parents b856f14 + 105e812 commit 003bcf5

File tree

3 files changed

+69
-8
lines changed

3 files changed

+69
-8
lines changed

lib/es_tree/tools/generator.ex

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ defmodule ESTree.Tools.Generator do
1717

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

2323
def do_generate(nil, level)do
@@ -232,7 +232,10 @@ defmodule ESTree.Tools.Generator do
232232
end
233233

234234
def do_generate(%ESTree.ObjectExpression{properties: properties}, level) do
235-
"{#{newline(level)}#{indent(calculate_next_level(level))}" <> Enum.map_join(properties, ", ", &generate(&1, calculate_next_level(level))) <> "#{newline(level)}#{indent(level)}}"
235+
next_level = calculate_next_level(level)
236+
previous_level = calculate_previous_level(level)
237+
key_value_separator = ",#{newline(level)}#{indent(level)}"
238+
"{#{newline(level)}#{indent(level)}" <> Enum.map_join(properties, key_value_separator, &generate(&1)) <> "#{newline(level)}#{indent(previous_level)}}"
236239
end
237240

238241
def do_generate(%ESTree.Property{key: key, value: value, kind: :init, shorthand: false, method: false, computed: false}, level) do
@@ -360,8 +363,8 @@ defmodule ESTree.Tools.Generator do
360363
end
361364

362365
def do_generate(%ESTree.CallExpression{callee: %ESTree.MemberExpression{ object: %ESTree.FunctionExpression{} } = callee, arguments: arguments}, level) do
363-
callee = generate(callee)
364-
arguments = Enum.map_join(arguments, ",", &generate(&1))
366+
callee = generate(callee, level)
367+
arguments = Enum.map_join(arguments, ",", &generate(&1, level))
365368

366369
"(#{callee}(#{arguments}))"
367370
end
@@ -374,7 +377,7 @@ defmodule ESTree.Tools.Generator do
374377

375378
def do_generate(%ESTree.CallExpression{callee: callee, arguments: arguments}, level) do
376379
callee = generate(callee)
377-
arguments = Enum.map_join(arguments, ",", &generate(&1))
380+
arguments = Enum.map_join(arguments, ",", &generate(&1, calculate_previous_level(level)))
378381

379382
"#{callee}(#{arguments})"
380383
end
@@ -785,6 +788,14 @@ defmodule ESTree.Tools.Generator do
785788
level + 1
786789
end
787790

791+
defp calculate_previous_level(nil) do
792+
nil
793+
end
794+
795+
defp calculate_previous_level(level) do
796+
level - 1
797+
end
798+
788799
defp newline(nil) do
789800
""
790801
end
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
defmodule ESTree.Tools.Generator.Formatting.Test do
2+
use ShouldI
3+
alias ESTree.Tools.Builder
4+
alias ESTree.Tools.Generator
5+
6+
should "format objects" do
7+
ast = Builder.object_expression([
8+
Builder.property(
9+
Builder.identifier(:key),
10+
Builder.identifier(:value)
11+
),
12+
Builder.property(
13+
Builder.identifier(:key),
14+
Builder.identifier(:value)
15+
)
16+
])
17+
assert Generator.generate(ast, 0) <> "\n" ==
18+
"""
19+
{
20+
key: value,
21+
key: value
22+
}
23+
"""
24+
end
25+
26+
should "format objects in function calls" do
27+
ast = Builder.call_expression(
28+
Builder.identifier(:foo),
29+
[
30+
Builder.object_expression([
31+
Builder.property(
32+
Builder.identifier(:key),
33+
Builder.identifier(:value)
34+
),
35+
Builder.property(
36+
Builder.identifier(:key),
37+
Builder.identifier(:value)
38+
)
39+
])
40+
]
41+
)
42+
assert Generator.generate(ast, 0) <> "\n" ==
43+
"""
44+
foo({
45+
key: value,
46+
key: value
47+
})
48+
"""
49+
end
50+
end

test/tools/generator/object_expression_test.exs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ defmodule ESTree.Tools.Generator.ObjectExpression.Test do
3434
Builder.identifier(:value1)
3535
)
3636
])
37-
assert Generator.generate(ast) == "{key: value, key1: value1}"
37+
assert Generator.generate(ast) == "{key: value,key1: value1}"
3838
end
3939

4040

@@ -51,7 +51,7 @@ defmodule ESTree.Tools.Generator.ObjectExpression.Test do
5151
:set
5252
),
5353
])
54-
assert Generator.generate(ast) == "{get key() {}, set key(p) {}}"
54+
assert Generator.generate(ast) == "{get key() {},set key(p) {}}"
5555
end
5656

5757
should "convert object when properties contains getter and setter methods" do
@@ -71,7 +71,7 @@ defmodule ESTree.Tools.Generator.ObjectExpression.Test do
7171
true
7272
),
7373
])
74-
assert Generator.generate(ast) == "{key() {}, key(p) {}}"
74+
assert Generator.generate(ast) == "{key() {},key(p) {}}"
7575
end
7676

7777
should "convert object when properties contains shorthand properties" do

0 commit comments

Comments
 (0)