diff --git a/lib/ast-converter.js b/lib/ast-converter.js index 6785838..36db57c 100644 --- a/lib/ast-converter.js +++ b/lib/ast-converter.js @@ -852,7 +852,11 @@ module.exports = function(ast, extra) { }); break; - case SyntaxKind.DoWhileStatement: + /** + * Unlike other parsers, TypeScript calls a "DoWhileStatement" + * a "DoStatement" + */ + case SyntaxKind.DoStatement: assign(result, { type: "DoWhileStatement", test: convertChild(node.expression), diff --git a/tests/fixtures/basics/do-while-statements.result.js b/tests/fixtures/basics/do-while-statements.result.js new file mode 100644 index 0000000..c31d350 --- /dev/null +++ b/tests/fixtures/basics/do-while-statements.result.js @@ -0,0 +1,780 @@ +module.exports = { + "body": [ + { + "body": { + "loc": { + "end": { + "column": 3, + "line": 1 + }, + "start": { + "column": 2, + "line": 1 + } + }, + "range": [ + 2, + 3 + ], + "type": "EmptyStatement" + }, + "loc": { + "end": { + "column": 13, + "line": 1 + }, + "start": { + "column": 0, + "line": 1 + } + }, + "range": [ + 0, + 13 + ], + "test": { + "loc": { + "end": { + "column": 11, + "line": 1 + }, + "start": { + "column": 10, + "line": 1 + } + }, + "range": [ + 10, + 11 + ], + "raw": "1", + "type": "Literal", + "value": 1 + }, + "type": "DoWhileStatement" + }, + { + "declarations": [ + { + "id": { + "loc": { + "end": { + "column": 5, + "line": 3 + }, + "start": { + "column": 4, + "line": 3 + } + }, + "name": "i", + "range": [ + 19, + 20 + ], + "type": "Identifier" + }, + "init": { + "loc": { + "end": { + "column": 9, + "line": 3 + }, + "start": { + "column": 8, + "line": 3 + } + }, + "range": [ + 23, + 24 + ], + "raw": "0", + "type": "Literal", + "value": 0 + }, + "loc": { + "end": { + "column": 9, + "line": 3 + }, + "start": { + "column": 4, + "line": 3 + } + }, + "range": [ + 19, + 24 + ], + "type": "VariableDeclarator" + } + ], + "kind": "var", + "loc": { + "end": { + "column": 10, + "line": 3 + }, + "start": { + "column": 0, + "line": 3 + } + }, + "range": [ + 15, + 25 + ], + "type": "VariableDeclaration" + }, + { + "body": { + "body": [ + { + "expression": { + "left": { + "loc": { + "end": { + "column": 4, + "line": 5 + }, + "start": { + "column": 3, + "line": 5 + } + }, + "name": "i", + "range": [ + 34, + 35 + ], + "type": "Identifier" + }, + "loc": { + "end": { + "column": 9, + "line": 5 + }, + "start": { + "column": 3, + "line": 5 + } + }, + "operator": "+=", + "range": [ + 34, + 40 + ], + "right": { + "loc": { + "end": { + "column": 9, + "line": 5 + }, + "start": { + "column": 8, + "line": 5 + } + }, + "range": [ + 39, + 40 + ], + "raw": "1", + "type": "Literal", + "value": 1 + }, + "type": "AssignmentExpression" + }, + "loc": { + "end": { + "column": 10, + "line": 5 + }, + "start": { + "column": 3, + "line": 5 + } + }, + "range": [ + 34, + 41 + ], + "type": "ExpressionStatement" + } + ], + "loc": { + "end": { + "column": 1, + "line": 6 + }, + "start": { + "column": 3, + "line": 4 + } + }, + "range": [ + 29, + 43 + ], + "type": "BlockStatement" + }, + "loc": { + "end": { + "column": 16, + "line": 6 + }, + "start": { + "column": 0, + "line": 4 + } + }, + "range": [ + 26, + 58 + ], + "test": { + "left": { + "loc": { + "end": { + "column": 10, + "line": 6 + }, + "start": { + "column": 9, + "line": 6 + } + }, + "name": "i", + "range": [ + 51, + 52 + ], + "type": "Identifier" + }, + "loc": { + "end": { + "column": 14, + "line": 6 + }, + "start": { + "column": 9, + "line": 6 + } + }, + "operator": "<", + "range": [ + 51, + 56 + ], + "right": { + "loc": { + "end": { + "column": 14, + "line": 6 + }, + "start": { + "column": 13, + "line": 6 + } + }, + "range": [ + 55, + 56 + ], + "raw": "5", + "type": "Literal", + "value": 5 + }, + "type": "BinaryExpression" + }, + "type": "DoWhileStatement" + } + ], + "loc": { + "end": { + "column": 16, + "line": 6 + }, + "start": { + "column": 0, + "line": 1 + } + }, + "range": [ + 0, + 58 + ], + "sourceType": "script", + "tokens": [ + { + "loc": { + "end": { + "column": 2, + "line": 1 + }, + "start": { + "column": 0, + "line": 1 + } + }, + "range": [ + 0, + 2 + ], + "type": "Keyword", + "value": "do" + }, + { + "loc": { + "end": { + "column": 3, + "line": 1 + }, + "start": { + "column": 2, + "line": 1 + } + }, + "range": [ + 2, + 3 + ], + "type": "Punctuator", + "value": ";" + }, + { + "loc": { + "end": { + "column": 9, + "line": 1 + }, + "start": { + "column": 4, + "line": 1 + } + }, + "range": [ + 4, + 9 + ], + "type": "Keyword", + "value": "while" + }, + { + "loc": { + "end": { + "column": 10, + "line": 1 + }, + "start": { + "column": 9, + "line": 1 + } + }, + "range": [ + 9, + 10 + ], + "type": "Punctuator", + "value": "(" + }, + { + "loc": { + "end": { + "column": 11, + "line": 1 + }, + "start": { + "column": 10, + "line": 1 + } + }, + "range": [ + 10, + 11 + ], + "type": "Numeric", + "value": "1" + }, + { + "loc": { + "end": { + "column": 12, + "line": 1 + }, + "start": { + "column": 11, + "line": 1 + } + }, + "range": [ + 11, + 12 + ], + "type": "Punctuator", + "value": ")" + }, + { + "loc": { + "end": { + "column": 13, + "line": 1 + }, + "start": { + "column": 12, + "line": 1 + } + }, + "range": [ + 12, + 13 + ], + "type": "Punctuator", + "value": ";" + }, + { + "loc": { + "end": { + "column": 3, + "line": 3 + }, + "start": { + "column": 0, + "line": 3 + } + }, + "range": [ + 15, + 18 + ], + "type": "Keyword", + "value": "var" + }, + { + "loc": { + "end": { + "column": 5, + "line": 3 + }, + "start": { + "column": 4, + "line": 3 + } + }, + "range": [ + 19, + 20 + ], + "type": "Identifier", + "value": "i" + }, + { + "loc": { + "end": { + "column": 7, + "line": 3 + }, + "start": { + "column": 6, + "line": 3 + } + }, + "range": [ + 21, + 22 + ], + "type": "Punctuator", + "value": "=" + }, + { + "loc": { + "end": { + "column": 9, + "line": 3 + }, + "start": { + "column": 8, + "line": 3 + } + }, + "range": [ + 23, + 24 + ], + "type": "Numeric", + "value": "0" + }, + { + "loc": { + "end": { + "column": 10, + "line": 3 + }, + "start": { + "column": 9, + "line": 3 + } + }, + "range": [ + 24, + 25 + ], + "type": "Punctuator", + "value": ";" + }, + { + "loc": { + "end": { + "column": 2, + "line": 4 + }, + "start": { + "column": 0, + "line": 4 + } + }, + "range": [ + 26, + 28 + ], + "type": "Keyword", + "value": "do" + }, + { + "loc": { + "end": { + "column": 4, + "line": 4 + }, + "start": { + "column": 3, + "line": 4 + } + }, + "range": [ + 29, + 30 + ], + "type": "Punctuator", + "value": "{" + }, + { + "loc": { + "end": { + "column": 4, + "line": 5 + }, + "start": { + "column": 3, + "line": 5 + } + }, + "range": [ + 34, + 35 + ], + "type": "Identifier", + "value": "i" + }, + { + "loc": { + "end": { + "column": 7, + "line": 5 + }, + "start": { + "column": 5, + "line": 5 + } + }, + "range": [ + 36, + 38 + ], + "type": "Punctuator", + "value": "+=" + }, + { + "loc": { + "end": { + "column": 9, + "line": 5 + }, + "start": { + "column": 8, + "line": 5 + } + }, + "range": [ + 39, + 40 + ], + "type": "Numeric", + "value": "1" + }, + { + "loc": { + "end": { + "column": 10, + "line": 5 + }, + "start": { + "column": 9, + "line": 5 + } + }, + "range": [ + 40, + 41 + ], + "type": "Punctuator", + "value": ";" + }, + { + "loc": { + "end": { + "column": 1, + "line": 6 + }, + "start": { + "column": 0, + "line": 6 + } + }, + "range": [ + 42, + 43 + ], + "type": "Punctuator", + "value": "}" + }, + { + "loc": { + "end": { + "column": 7, + "line": 6 + }, + "start": { + "column": 2, + "line": 6 + } + }, + "range": [ + 44, + 49 + ], + "type": "Keyword", + "value": "while" + }, + { + "loc": { + "end": { + "column": 9, + "line": 6 + }, + "start": { + "column": 8, + "line": 6 + } + }, + "range": [ + 50, + 51 + ], + "type": "Punctuator", + "value": "(" + }, + { + "loc": { + "end": { + "column": 10, + "line": 6 + }, + "start": { + "column": 9, + "line": 6 + } + }, + "range": [ + 51, + 52 + ], + "type": "Identifier", + "value": "i" + }, + { + "loc": { + "end": { + "column": 12, + "line": 6 + }, + "start": { + "column": 11, + "line": 6 + } + }, + "range": [ + 53, + 54 + ], + "type": "Punctuator", + "value": "<" + }, + { + "loc": { + "end": { + "column": 14, + "line": 6 + }, + "start": { + "column": 13, + "line": 6 + } + }, + "range": [ + 55, + 56 + ], + "type": "Numeric", + "value": "5" + }, + { + "loc": { + "end": { + "column": 15, + "line": 6 + }, + "start": { + "column": 14, + "line": 6 + } + }, + "range": [ + 56, + 57 + ], + "type": "Punctuator", + "value": ")" + }, + { + "loc": { + "end": { + "column": 16, + "line": 6 + }, + "start": { + "column": 15, + "line": 6 + } + }, + "range": [ + 57, + 58 + ], + "type": "Punctuator", + "value": ";" + } + ], + "type": "Program" +}; diff --git a/tests/fixtures/basics/do-while-statements.src.js b/tests/fixtures/basics/do-while-statements.src.js new file mode 100644 index 0000000..f2c72e8 --- /dev/null +++ b/tests/fixtures/basics/do-while-statements.src.js @@ -0,0 +1,6 @@ +do; while(1); + +var i = 0; +do { + i += 1; +} while (i < 5);