Skip to content

Commit def8595

Browse files
committed
Expressions can be used in variable declaration
Was: var a, b, c = 1, 2, 3; Become: var a = 1, b = 2, c = 3; Can be used as: var a = 1, b, c = a + 2;
1 parent 1f2027b commit def8595

File tree

2 files changed

+54
-9
lines changed

2 files changed

+54
-9
lines changed

lib/es_tree/tools/generator.ex

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -189,18 +189,14 @@ defmodule ESTree.Tools.Generator do
189189
"debugger;"
190190
end
191191

192-
def do_generate(%ESTree.VariableDeclaration{kind: kind, declarations: [declaration]}, _level) when kind in [:var, :let, :const] do
193-
declaration = generate(declaration)
194-
195-
"#{to_string(kind)} #{declaration};"
196-
end
197-
198192
def do_generate(%ESTree.VariableDeclaration{kind: kind, declarations: declarations}, _level) when kind in [:var, :let, :const] do
199193

200-
ids = Enum.map_join(declarations, ",", fn(x) -> generate(x.id) end)
201-
inits = Enum.map_join(declarations, ",", fn(x) -> generate(x.init) end)
194+
declarators = declarations
195+
|> Enum.map_join(", ", fn(x) ->
196+
generate(x)
197+
end)
202198

203-
"#{to_string(kind)} #{ids} = #{inits};"
199+
"#{to_string(kind)} #{declarators};"
204200
end
205201

206202
def do_generate(%ESTree.VariableDeclarator{id: id, init: nil}, _level) do
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
defmodule ESTree.Tools.Generator.VariableDeclaration.Test do
2+
use ShouldI
3+
4+
alias ESTree.Tools.{Builder, Generator}
5+
6+
should "emit var declaration" do
7+
ast = Builder.variable_declaration([])
8+
9+
assert Generator.generate(ast) == "var ;"
10+
end
11+
12+
should "emit let declaration" do
13+
ast = Builder.variable_declaration([], :let)
14+
15+
assert Generator.generate(ast) == "let ;"
16+
end
17+
18+
should "emit const declaration" do
19+
ast = Builder.variable_declaration([], :const)
20+
21+
assert Generator.generate(ast) == "const ;"
22+
end
23+
24+
should "add variable declarator" do
25+
ast = Builder.variable_declaration([
26+
Builder.variable_declarator(Builder.identifier(:a))
27+
])
28+
29+
assert Generator.generate(ast) == "var a;"
30+
end
31+
32+
should "add variable declarators with corresponding inits" do
33+
ast = Builder.variable_declaration([
34+
Builder.variable_declarator(Builder.identifier(:a), Builder.literal(1)),
35+
Builder.variable_declarator(Builder.identifier(:b)),
36+
Builder.variable_declarator(
37+
Builder.identifier(:c),
38+
Builder.binary_expression(
39+
:+,
40+
Builder.identifier(:a),
41+
Builder.literal(2)
42+
)
43+
)
44+
])
45+
46+
assert Generator.generate(ast) == "var a = 1, b, c = a + 2;"
47+
end
48+
49+
end

0 commit comments

Comments
 (0)