Skip to content

Commit 0da3689

Browse files
committed
Added async property to functions. Added AwaitExpression
1 parent 62fcf7e commit 0da3689

9 files changed

+55
-13
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
# v2.1.0
2+
3+
* Enhancements
4+
* Added async field to FunctionDeclaration and FunctionExpression
5+
* Added AwaitExpression
6+
17
# v2.0.1
28

39
* Enhancements

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@ ast = Builder.array_expression([
1717

1818
Generator.generate(ast)
1919
#"[1, a]"
20-
```
20+
```

lib/es_tree/await_expression.ex

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
defmodule ESTree.AwaitExpression do
2+
@type t :: %ESTree.AwaitExpression{
3+
type: binary,
4+
loc: ESTree.SourceLocation.t | nil,
5+
argument: ESTree.Expression.t | nil,
6+
all: boolean
7+
}
8+
defstruct type: "AwaitExpression",
9+
loc: nil,
10+
argument: nil,
11+
all: false
12+
end

lib/es_tree/expression.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,6 @@ defmodule ESTree.Expression do
1818
ESTree.Literal.t |
1919
ESTree.ClassExpression.t |
2020
ESTree.TemplateLiteral.t |
21-
ESTree.TaggedTemplateExpression.t
21+
ESTree.TaggedTemplateExpression.t |
22+
ESTree.AwaitExpression.t
2223
end

lib/es_tree/function_declaration.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ defmodule ESTree.FunctionDeclaration do
77
defaults: [ ESTree.Expression.t ],
88
body: ESTree.BlockStatement.t | ESTree.Expression.t,
99
generator: boolean,
10-
expression: boolean
10+
expression: boolean,
11+
async: boolean
1112
}
1213
defstruct type: "FunctionDeclaration",
1314
loc: nil,
@@ -16,5 +17,6 @@ defmodule ESTree.FunctionDeclaration do
1617
defaults: [],
1718
body: %ESTree.BlockStatement{},
1819
generator: false,
19-
expression: false
20+
expression: false,
21+
async: false
2022
end

lib/es_tree/function_expression.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,15 @@ defmodule ESTree.FunctionExpression do
66
defaults: [ ESTree.Expression.t ],
77
body: ESTree.BlockStatement.t,
88
generator: boolean,
9-
expression: boolean
9+
expression: boolean,
10+
async: boolean
1011
}
1112
defstruct type: "FunctionExpression",
1213
loc: nil,
1314
params: [],
1415
defaults: [],
1516
body: %ESTree.BlockStatement{},
1617
generator: false,
17-
expression: false
18+
expression: false,
19+
async: false
1820
end

lib/es_tree/tools/builder.ex

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,17 @@ defmodule ESTree.Tools.Builder do
4646
}
4747
end
4848

49+
@spec await_expression(
50+
ESTree.Expression.t | nil,
51+
boolean,
52+
ESTree.SourceLocation.t | nil
53+
) :: ESTree.AwaitExpression.t
54+
def await_expression(argument, all \\ false, loc \\ nil) do
55+
%ESTree.AwaitExpression{
56+
argument: argument, all: all, loc: loc
57+
}
58+
end
59+
4960
@spec binary_expression(
5061
ESTree.binary_operator,
5162
ESTree.Expression.t,
@@ -291,12 +302,13 @@ defmodule ESTree.Tools.Builder do
291302
ESTree.BlockStatement.t,
292303
boolean,
293304
boolean,
305+
boolean,
294306
ESTree.SourceLocation.t | nil
295307
) :: ESTree.FunctionDeclaration.t
296-
def function_declaration(id, params, defaults, body, generator \\ false, expression \\ false, loc \\ nil) do
308+
def function_declaration(id, params, defaults, body, generator \\ false, expression \\ false, async \\ false, loc \\ nil) do
297309
%ESTree.FunctionDeclaration{
298310
id: id, params: params, defaults: defaults,
299-
body: body, generator: generator,
311+
body: body, generator: generator, async: async,
300312
expression: expression, loc: loc
301313
}
302314
end
@@ -307,12 +319,13 @@ defmodule ESTree.Tools.Builder do
307319
ESTree.BlockStatement.t,
308320
boolean,
309321
boolean,
322+
boolean,
310323
ESTree.SourceLocation.t | nil
311324
) :: ESTree.FunctionExpression.t
312-
def function_expression(params, defaults, body, generator \\ false, expression \\ false, loc \\ nil) do
325+
def function_expression(params, defaults, body, generator \\ false, expression \\ false, async \\ false, loc \\ nil) do
313326
%ESTree.FunctionExpression{
314327
params: params, defaults: defaults,
315-
body: body, generator: generator,
328+
body: body, generator: generator, async: async,
316329
expression: expression, loc: loc
317330
}
318331
end

lib/es_tree/tools/generator.ex

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,18 +68,20 @@ defmodule ESTree.Tools.Generator do
6868

6969
def do_generate(%ESTree.FunctionDeclaration{} = ast, level) do
7070
generator = if ast.generator, do: "*", else: ""
71+
async = if ast.async, do: "async ", else: ""
7172

7273
params = params_and_defaults(ast.params, ast.defaults)
7374
id = generate(ast.id)
7475

75-
"function#{generator} #{id}(#{params})#{generate(ast.body, level + 1)}"
76+
"#{async}function#{generator} #{id}(#{params})#{generate(ast.body, level + 1)}"
7677
end
7778

7879
def do_generate(%ESTree.FunctionExpression{} = ast, level) do
7980
generator = if ast.generator, do: "*", else: ""
81+
async = if ast.async, do: "async ", else: ""
8082
params = params_and_defaults(ast.params, ast.defaults)
8183

82-
"function#{generator}(#{params})#{generate(ast.body, level + 1)}"
84+
"#{async}function#{generator}(#{params})#{generate(ast.body, level + 1)}"
8385
end
8486

8587
def do_generate(%ESTree.EmptyStatement{}, level) do
@@ -687,6 +689,10 @@ defmodule ESTree.Tools.Generator do
687689
"`#{literal}`"
688690
end
689691

692+
def do_generate(%ESTree.AwaitExpression{ argument: argument, all: all }, level) do
693+
"await #{generate(argument)}"
694+
end
695+
690696
defp convert_string_characters(str) do
691697
String.replace(str, "\n", "\\n")
692698
|> String.replace("\t", "\\t")

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ defmodule ESTree.Mixfile do
33

44
def project do
55
[app: :estree,
6-
version: "2.0.1",
6+
version: "2.1.0",
77
elixir: "~> 1.0",
88
deps: deps,
99
description: description,

0 commit comments

Comments
 (0)