Skip to content
This repository was archived by the owner on Jan 19, 2019. It is now read-only.

Commit 60843ad

Browse files
flying-sheepJamesHenry
authored andcommitted
Fix: Handle async/await (fixes #119) (#129)
1 parent 0ff19dd commit 60843ad

File tree

147 files changed

+634
-96
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

147 files changed

+634
-96
lines changed

lib/ast-converter.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,17 @@ function isESTreeClassMember(node) {
105105
return node.kind !== SyntaxKind.SemicolonClassElement;
106106
}
107107

108+
/**
109+
* Returns true if the given node is an async function
110+
* @param {TSNode} node TypeScript AST node
111+
* @returns {boolean} is an async function
112+
*/
113+
function isAsyncFunction(node) {
114+
return !!node.modifiers && !!node.modifiers.length && node.modifiers.some(function(modifier) {
115+
return modifier.kind === SyntaxKind.AsyncKeyword;
116+
});
117+
}
118+
108119
/**
109120
* Returns true if the given TSToken is a comma
110121
* @param {TSToken} token the TypeScript token
@@ -852,6 +863,7 @@ module.exports = function(ast, extra) {
852863
id: convertChild(node.name),
853864
generator: !!node.asteriskToken,
854865
expression: false,
866+
async: isAsyncFunction(node),
855867
params: node.parameters.map(convertChild),
856868
body: convertChild(node.body)
857869
});
@@ -1057,6 +1069,7 @@ module.exports = function(ast, extra) {
10571069
id: null,
10581070
generator: false,
10591071
expression: false,
1072+
async: isAsyncFunction(node),
10601073
body: convertChild(node.body),
10611074
range: [ node.parameters.pos - 1, result.range[1]],
10621075
loc: {
@@ -1158,6 +1171,7 @@ module.exports = function(ast, extra) {
11581171
}),
11591172
generator: false,
11601173
expression: false,
1174+
async: false,
11611175
body: convertChild(node.body),
11621176
range: [ result.range[0] + constructorStartOffset, result.range[1]],
11631177
loc: {
@@ -1226,6 +1240,7 @@ module.exports = function(ast, extra) {
12261240
generator: !!node.asteriskToken,
12271241
params: node.parameters.map(convertChild),
12281242
body: convertChild(node.body),
1243+
async: isAsyncFunction(node),
12291244
expression: false
12301245
});
12311246
// Process returnType
@@ -1308,6 +1323,7 @@ module.exports = function(ast, extra) {
13081323
id: null,
13091324
params: node.parameters.map(convertChild),
13101325
body: convertChild(node.body),
1326+
async: isAsyncFunction(node),
13111327
expression: node.body.kind !== SyntaxKind.Block
13121328
});
13131329
// Process returnType
@@ -1328,6 +1344,13 @@ module.exports = function(ast, extra) {
13281344
});
13291345
break;
13301346

1347+
case SyntaxKind.AwaitExpression:
1348+
assign(result, {
1349+
type: "AwaitExpression",
1350+
expression: convertChild(node.expression)
1351+
});
1352+
break;
1353+
13311354
// Template Literals
13321355

13331356
case SyntaxKind.NoSubstitutionTemplateLiteral:

lib/ast-node-types.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ module.exports = {
2323
ArrayExpression: "ArrayExpression",
2424
ArrayPattern: "ArrayPattern",
2525
ArrowFunctionExpression: "ArrowFunctionExpression",
26+
AwaitExpression: "AwaitExpression",
2627
BlockStatement: "BlockStatement",
2728
BinaryExpression: "BinaryExpression",
2829
BreakStatement: "BreakStatement",

tests/fixtures/attach-comments/export-default-anonymous-class.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ module.exports = {
5656
},
5757
"generator": false,
5858
"expression": false,
59+
"async": false,
5960
"range": [
6061
110,
6162
119

tests/fixtures/attach-comments/surrounding-call-comments.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ module.exports = {
123123
]
124124
},
125125
"expression": false,
126+
"async": false,
126127
"generator": false
127128
}
128129
],

tests/fixtures/attach-comments/surrounding-debugger-comments.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,7 @@ module.exports = {
8787
]
8888
},
8989
"expression": false,
90+
"async": false,
9091
"generator": false
9192
}
9293
],

tests/fixtures/attach-comments/surrounding-return-comments.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ module.exports = {
8888
]
8989
},
9090
"expression": false,
91+
"async": false,
9192
"generator": false
9293
}
9394
],

tests/fixtures/attach-comments/surrounding-throw-comments.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ module.exports = {
106106
]
107107
},
108108
"expression": false,
109+
"async": false,
109110
"generator": false
110111
}
111112
],

tests/fixtures/attach-comments/surrounding-while-loop-comments.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ module.exports = {
5151
},
5252
"generator": false,
5353
"expression": false,
54+
"async": false,
5455
"params": [],
5556
"body": {
5657
"type": "BlockStatement",

tests/fixtures/attach-comments/switch-fallthrough-comment-in-function.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,7 @@ module.exports = {
254254
]
255255
},
256256
"expression": false,
257+
"async": false,
257258
"generator": false
258259
}
259260
],

tests/fixtures/attach-comments/switch-no-default-comment-in-function.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,7 @@ module.exports = {
238238
]
239239
},
240240
"expression": false,
241+
"async": false,
241242
"generator": false
242243
}
243244
],

tests/fixtures/attach-comments/switch-no-default-comment-in-nested-functions.result.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,11 +630,13 @@ module.exports = {
630630
]
631631
},
632632
"expression": false,
633+
"async": false,
633634
"generator": false
634635
}
635636
]
636637
},
637638
"expression": false,
639+
"async": false,
638640
"generator": false
639641
}
640642
}

tests/fixtures/basics/new-without-parens.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ module.exports = {
5151
},
5252
"generator": false,
5353
"expression": false,
54+
"async": false,
5455
"params": [],
5556
"body": {
5657
"type": "BlockStatement",

tests/fixtures/basics/update-expression.result.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,8 +148,9 @@ module.exports = {
148148
],
149149
"type": "BlockStatement"
150150
},
151-
"expression": false,
152151
"generator": false,
152+
"expression": false,
153+
"async": false,
153154
"id": {
154155
"loc": {
155156
"end": {

tests/fixtures/ecma-features-mix/classes-and-generators/classes-and-generators.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ module.exports = {
7070
},
7171
"generator": true,
7272
"expression": false,
73+
"async": false,
7374
"range": [
7475
17,
7576
24

tests/fixtures/ecma-features-mix/classes-and-generators/computed-generator.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ module.exports = {
106106
},
107107
"generator": true,
108108
"expression": false,
109+
"async": false,
109110
"range": [
110111
31,
111112
38

tests/fixtures/ecma-features-mix/classes-and-generators/static-generators.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ module.exports = {
7070
},
7171
"generator": true,
7272
"expression": false,
73+
"async": false,
7374
"range": [
7475
24,
7576
31

tests/fixtures/ecma-features-mix/defaultParams-and-arrowFunctions/default-param-arrow.result.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ module.exports = {
8888
},
8989
"generator": false,
9090
"expression": false,
91+
"async": false,
9192
"range": [
9293
6,
9394
13
@@ -139,6 +140,7 @@ module.exports = {
139140
},
140141
"generator": false,
141142
"expression": false,
143+
"async": false,
142144
"range": [
143145
0,
144146
20

tests/fixtures/ecma-features-mix/defaultParams-and-arrowFunctions/default-param.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ module.exports = {
118118
},
119119
"generator": false,
120120
"expression": true,
121+
"async": false,
121122
"range": [
122123
0,
123124
14

tests/fixtures/ecma-features-mix/defaultParams-and-arrowFunctions/local-eval-multi.result.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ module.exports = {
101101
},
102102
"generator": false,
103103
"expression": true,
104+
"async": false,
104105
"range": [
105106
0,
106107
20
@@ -329,4 +330,4 @@ module.exports = {
329330
}
330331
}
331332
]
332-
};
333+
};

tests/fixtures/ecma-features-mix/defaultParams-and-arrowFunctions/local-eval.result.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ module.exports = {
8383
},
8484
"generator": false,
8585
"expression": true,
86+
"async": false,
8687
"range": [
8788
0,
8889
17
@@ -275,4 +276,4 @@ module.exports = {
275276
}
276277
}
277278
]
278-
};
279+
};

tests/fixtures/ecma-features-mix/defaultParams-and-arrowFunctions/yield-default-param.result.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ module.exports = {
105105
},
106106
"generator": false,
107107
"expression": false,
108+
"async": false,
108109
"range": [
109110
16,
110111
33
@@ -153,6 +154,7 @@ module.exports = {
153154
},
154155
"generator": true,
155156
"expression": false,
157+
"async": false,
156158
"range": [
157159
0,
158160
35
@@ -456,4 +458,4 @@ module.exports = {
456458
}
457459
}
458460
]
459-
};
461+
};

tests/fixtures/ecma-features-mix/destructuring-and-arrowFunctions/arrow-param-array.result.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ module.exports = {
6565
},
6666
"generator": false,
6767
"expression": true,
68+
"async": false,
6869
"range": [
6970
0,
7071
10
@@ -257,4 +258,4 @@ module.exports = {
257258
}
258259
}
259260
]
260-
};
261+
};

tests/fixtures/ecma-features-mix/destructuring-and-arrowFunctions/arrow-param-nested-array.result.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ module.exports = {
102102
},
103103
"generator": false,
104104
"expression": true,
105+
"async": false,
105106
"range": [
106107
0,
107108
15
@@ -366,4 +367,4 @@ module.exports = {
366367
}
367368
}
368369
]
369-
};
370+
};

tests/fixtures/ecma-features-mix/destructuring-and-arrowFunctions/arrow-param-nested-object-named.result.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ module.exports = {
219219
},
220220
"generator": false,
221221
"expression": true,
222+
"async": false,
222223
"range": [
223224
0,
224225
27
@@ -591,4 +592,4 @@ module.exports = {
591592
}
592593
}
593594
]
594-
};
595+
};

tests/fixtures/ecma-features-mix/destructuring-and-arrowFunctions/arrow-param-nested-object.result.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ module.exports = {
219219
},
220220
"generator": false,
221221
"expression": true,
222+
"async": false,
222223
"range": [
223224
0,
224225
17
@@ -519,4 +520,4 @@ module.exports = {
519520
}
520521
}
521522
]
522-
};
523+
};

tests/fixtures/ecma-features-mix/destructuring-and-arrowFunctions/arrow-param-object.result.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ module.exports = {
104104
},
105105
"generator": false,
106106
"expression": true,
107+
"async": false,
107108
"range": [
108109
0,
109110
10
@@ -296,4 +297,4 @@ module.exports = {
296297
}
297298
}
298299
]
299-
};
300+
};

tests/fixtures/ecma-features-mix/destructuring-and-arrowFunctions/param-defaults-array.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ module.exports = {
101101
},
102102
"generator": false,
103103
"expression": true,
104+
"async": false,
104105
"range": [
105106
0,
106107
15

tests/fixtures/ecma-features-mix/destructuring-and-arrowFunctions/param-defaults-object-nested.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,7 @@ module.exports = {
328328
},
329329
"generator": false,
330330
"expression": true,
331+
"async": false,
331332
"range": [
332333
0,
333334
35

tests/fixtures/ecma-features-mix/destructuring-and-arrowFunctions/param-defaults-object.result.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ module.exports = {
140140
},
141141
"generator": false,
142142
"expression": true,
143+
"async": false,
143144
"range": [
144145
0,
145146
15

tests/fixtures/ecma-features-mix/destructuring-and-defaultParams/param-array.result.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ module.exports = {
135135
},
136136
"generator": false,
137137
"expression": false,
138+
"async": false,
138139
"range": [
139140
0,
140141
24
@@ -437,4 +438,4 @@ module.exports = {
437438
}
438439
}
439440
]
440-
};
441+
};

0 commit comments

Comments
 (0)