// React JSX tests var fbTestFixture = { // Taken and adapted from esprima-fb/fbtest.rec.js. "XJS": { "": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "a", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: true, attributes: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, closingElement: null, children: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, "": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSNamespacedName", namespace: { type: "XJSIdentifier", name: "n", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, name: { type: "XJSIdentifier", name: "a", range: [3, 4], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: true, attributes: [{ type: "XJSAttribute", name: { type: "XJSNamespacedName", namespace: { type: "XJSIdentifier", name: "n", range: [5, 6], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } } }, name: { type: "XJSIdentifier", name: "v", range: [7, 8], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 8 } } }, range: [5, 8], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 8 } } }, value: null, range: [5, 8], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 8 } } }], range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, closingElement: null, children: [], range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, ' {value} ': { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "a", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: false, attributes: [{ type: "XJSAttribute", name: { type: "XJSNamespacedName", namespace: { type: "XJSIdentifier", name: "n", range: [3, 4], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, name: { type: "XJSIdentifier", name: "foo", range: [5, 8], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 8 } } }, range: [3, 8], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 8 } } }, value: { type: "Literal", value: "bar", raw: '"bar"', range: [9, 14], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 14 } } }, range: [3, 14], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 14 } } }], range: [0, 15], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSIdentifier", name: "a", range: [38, 39], loc: { start: { line: 1, column: 38 }, end: { line: 1, column: 39 } } }, range: [36, 40], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 40 } } }, children: [{ type: "Literal", value: " ", raw: " ", range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }, { type: "XJSExpressionContainer", expression: { type: "Identifier", name: "value", range: [17, 22], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 22 } } }, range: [16, 23], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 23 } } }, { type: "Literal", value: " ", raw: " ", range: [23, 24], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 24 } } }, { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "b", range: [25, 26], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 26 } } }, selfClosing: false, attributes: [], range: [24, 27], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 27 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSIdentifier", name: "b", range: [34, 35], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 35 } } }, range: [32, 36], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 36 } } }, children: [{ type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "c", range: [28, 29], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 29 } } }, selfClosing: true, attributes: [], range: [27, 32], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 32 } } }, closingElement: null, children: [], range: [27, 32], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 32 } } }], range: [24, 36], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 36 } } }], range: [0, 40], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 40 } } }, range: [0, 40], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 40 } } }, '': { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "a", range: [1, 2] }, selfClosing: true, attributes: [{ type: "XJSAttribute", name: { type: "XJSIdentifier", name: "b", range: [3, 4], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, value: { type: "XJSExpressionContainer", expression: { type: "Literal", value: " ", raw: '" "', range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, range: [5, 10], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 10 } } }, range: [3, 10], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 10 } } }, { type: "XJSAttribute", name: { type: "XJSIdentifier", name: "c", range: [11, 12], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 12 } } }, value: { type: "Literal", value: " ", raw: '" "', range: [13, 16], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 16 } } }, range: [11, 16], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 16 } } }, { type: "XJSAttribute", name: { type: "XJSIdentifier", name: "d", range: [17, 18], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 18 } } }, value: { type: "Literal", value: "&", raw: '"&"', range: [19, 26], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 26 } } }, range: [17, 26], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 26 } } }, { type: "XJSAttribute", name: { type: "XJSIdentifier", name: "e", range: [27, 28], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 28 } } }, value: { type: "Literal", value: "id=1&group=2", raw: '"id=1&group=2"', range: [29, 43], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 43 } } }, range: [27, 43], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 43 } } }, { type: "XJSAttribute", name: { type: "XJSIdentifier", name: "f", range: [44, 45], loc: { start: { line: 1, column: 44 }, end: { line: 1, column: 45 } } }, value: { type: "Literal", value: "�", raw: '"�"', range: [46, 59], loc: { start: { line: 1, column: 46 }, end: { line: 1, column: 59 } } }, range: [44, 59], loc: { start: { line: 1, column: 44 }, end: { line: 1, column: 59 } } }, { type: "XJSAttribute", name: { type: "XJSIdentifier", name: "g", range: [60, 61], loc: { start: { line: 1, column: 60 }, end: { line: 1, column: 61 } } }, value: { type: "Literal", value: "{*;", raw: '"{*;"', range: [62, 71], loc: { start: { line: 1, column: 62 }, end: { line: 1, column: 71 } } }, range: [60, 71], loc: { start: { line: 1, column: 60 }, end: { line: 1, column: 71 } } }, { type: "XJSAttribute", name: { type: "XJSIdentifier", name: "h", range: [72, 73], loc: { start: { line: 1, column: 72 }, end: { line: 1, column: 73 } } }, value: { type: "Literal", value: "&#x;", raw: '"&#x;"', range: [74, 80], loc: { start: { line: 1, column: 74 }, end: { line: 1, column: 80 } } }, range: [72, 80], loc: { start: { line: 1, column: 72 }, end: { line: 1, column: 80 } } }], range: [0, 83], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 83 } } }, closingElement: null, children: [], range: [0, 83], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 83 } } }, range: [0, 83], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 83 } } }, '': { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "a", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: true, attributes: [{ type: "XJSAttribute", name: { type: "XJSIdentifier", name: "b", range: [3, 4], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, value: { type: "Literal", value: "¬anentity;", raw: '"¬anentity;"', range: [5, 20], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 20 } } }, range: [3, 20], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 20 } } }], range: [0, 23], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 23 } } }, closingElement: null, children: [], range: [0, 23], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 23 } } }, range: [0, 23], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 23 } } }, "": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "a", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: true, attributes: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 2, column: 2 } } }, closingElement: null, children: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 2, column: 2 } } }, range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 2, column: 2 } } }, "<日本語>": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "日本語", range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: false, attributes: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSIdentifier", name: "日本語", range: [7, 10], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 10 } } }, range: [5, 11], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 11 } } }, children: [], range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, '\nbar\nbaz\r\n': { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "AbC-def", range: [1, 8], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 8 } } }, selfClosing: false, attributes: [{ type: "XJSAttribute", name: { type: "XJSIdentifier", name: "test", range: [11, 15], loc: { start: { line: 2, column: 2 }, end: { line: 2, column: 6 } } }, value: { type: "Literal", value: "&&", raw: '"&&"', range: [16, 31], loc: { start: { line: 2, column: 7 }, end: { line: 2, column: 22 } } }, range: [11, 31], loc: { start: { line: 2, column: 2 }, end: { line: 2, column: 22 } } }], range: [0, 32], loc: { start: { line: 1, column: 0 }, end: { line: 2, column: 23 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSIdentifier", name: "AbC-def", range: [44, 51], loc: { start: { line: 5, column: 2 }, end: { line: 5, column: 9 } } }, range: [42, 52], loc: { start: { line: 5, column: 0 }, end: { line: 5, column: 10 } } }, children: [{ type: "Literal", value: "\nbar\nbaz\r\n", raw: "\nbar\nbaz\r\n", range: [32, 42], loc: { start: { line: 2, column: 23 }, end: { line: 5, column: 0 } } }], range: [0, 52], loc: { start: { line: 1, column: 0 }, end: { line: 5, column: 10 } } }, range: [0, 52], loc: { start: { line: 1, column: 0 }, end: { line: 5, column: 10 } } }, " : } />": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "a", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: true, attributes: [{ type: "XJSAttribute", name: { type: "XJSIdentifier", name: "b", range: [3, 4], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, value: { type: "XJSExpressionContainer", expression: { type: "ConditionalExpression", test: { type: "Identifier", name: "x", range: [6, 7], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 7 } } }, consequent: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "c", range: [11, 12], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 12 } } }, selfClosing: true, attributes: [], range: [10, 15], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 15 } } }, closingElement: null, children: [], range: [10, 15], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 15 } } }, alternate: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "d", range: [19, 20], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 20 } } }, selfClosing: true, attributes: [], range: [18, 23], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 23 } } }, closingElement: null, children: [], range: [18, 23], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 23 } } }, range: [6, 23], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 23 } } }, range: [5, 24], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 24 } } }, range: [3, 24], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 24 } } }], range: [0, 27], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 27 } } }, closingElement: null, children: [], range: [0, 27], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 27 } } }, range: [0, 27], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 27 } } }, "{}": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "a", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: false, attributes: [], range: [0, 3], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 3 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSIdentifier", name: "a", range: [7, 8], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 8 } } }, range: [5, 9], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 9 } } }, children: [{ type: "XJSExpressionContainer", expression: { type: "XJSEmptyExpression", range: [4, 4], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 4 } } }, range: [3, 5], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 5 } } }], range: [0, 9], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 9 } } }, range: [0, 9], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 9 } } }, "{/* this is a comment */}": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "a", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: false, attributes: [], range: [0, 3], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 3 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSIdentifier", name: "a", range: [30, 31], loc: { start: { line: 1, column: 30 }, end: { line: 1, column: 31 } } }, range: [28, 32], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 32 } } }, children: [{ type: "XJSExpressionContainer", expression: { type: "XJSEmptyExpression", range: [4, 27], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 27 } } }, range: [3, 28], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 28 } } }], range: [0, 32], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 32 } } }, range: [0, 32], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 32 } } }, "
@test content
": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "div", range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: false, attributes: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSIdentifier", name: "div", range: [20, 23], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 23 } } }, range: [18, 24], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 24 } } }, children: [{ type: "Literal", value: "@test content", raw: "@test content", range: [5, 18], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 18 } } }], range: [0, 24], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 24 } } }, range: [0, 24], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 24 } } }, "

7x invalid-js-identifier
": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "div", range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: false, attributes: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSIdentifier", name: "div", range: [37, 40], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 40 } } }, range: [35, 41], loc: { start: { line: 1, column: 35 }, end: { line: 1, column: 41 } } }, children: [{ type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "br", range: [6, 8], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 8 } } }, selfClosing: true, attributes: [], range: [5, 11], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 11 } } }, closingElement: null, children: [], range: [5, 11], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 11 } } }, { type: "Literal", value: "7x invalid-js-identifier", raw: "7x invalid-js-identifier", range: [11, 35], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 35 } } }], range: [0, 41], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 41 } } }, range: [0, 41], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 41 } } }, " right=monkeys /> gorillas />": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "LeftRight", range: [1, 10], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 10 } } }, selfClosing: true, attributes: [{ type: "XJSAttribute", name: { type: "XJSIdentifier", name: "left", range: [11, 15], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 15 } } }, value: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "a", range: [17, 18], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 18 } } }, selfClosing: true, attributes: [], range: [16, 21], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 21 } } }, closingElement: null, children: [], range: [16, 21], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 21 } } }, range: [11, 21], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 21 } } }, { type: "XJSAttribute", name: { type: "XJSIdentifier", name: "right", range: [22, 27], loc: { start: { line: 1, column: 22 }, end: { line: 1, column: 27 } } }, value: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "b", range: [29, 30], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 30 } } }, selfClosing: false, attributes: [], range: [28, 31], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 31 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSIdentifier", name: "b", range: [52, 53], loc: { start: { line: 1, column: 52 }, end: { line: 1, column: 53 } } }, range: [50, 54], loc: { start: { line: 1, column: 50 }, end: { line: 1, column: 54 } } }, children: [{ type: "Literal", value: "monkeys /> gorillas", raw: "monkeys /> gorillas", range: [31, 50], loc: { start: { line: 1, column: 31 }, end: { line: 1, column: 50 } } }], range: [28, 54], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 54 } } }, range: [22, 54], loc: { start: { line: 1, column: 22 }, end: { line: 1, column: 54 } } }], range: [0, 57], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 57 } } }, closingElement: null, children: [], range: [0, 57], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 57 } } }, range: [0, 57], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 57 } } }, "": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSMemberExpression", object: { type: "XJSIdentifier", name: "a", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, property: { type: "XJSIdentifier", name: "b", range: [3, 4], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: false, attributes: [], range: [0, 5], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 5 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSMemberExpression", object: { type: "XJSIdentifier", name: "a", range: [7, 8], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 8 } } }, property: { type: "XJSIdentifier", name: "b", range: [9, 10], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 10 } } }, range: [7, 10], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 10 } } }, range: [5, 11], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 11 } } }, children: [], range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, "": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSMemberExpression", object: { type: "XJSMemberExpression", object: { type: "XJSIdentifier", name: "a", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, property: { type: "XJSIdentifier", name: "b", range: [3, 4], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 4 } } }, range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, property: { type: "XJSIdentifier", name: "c", range: [5, 6], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } } }, range: [1, 6], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 6 } } }, selfClosing: false, attributes: [], range: [0, 7], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 7 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSMemberExpression", object: { type: "XJSMemberExpression", object: { type: "XJSIdentifier", name: "a", range: [9, 10], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 10 } } }, property: { type: "XJSIdentifier", name: "b", range: [11, 12], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 12 } } }, range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, property: { type: "XJSIdentifier", name: "c", range: [13, 14], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 14 } } }, range: [9, 14], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 14 } } }, range: [7, 15], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 15 } } }, children: [], range: [0, 15], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } } }, range: [0, 15], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } } }, "(
) < x;": { type: "ExpressionStatement", expression: { type: "BinaryExpression", operator: "<", left: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "div", range: [2, 5], loc: { start: { line: 1, column: 2 }, end: { line: 1, column: 5 } } }, selfClosing: true, attributes: [], range: [1, 8], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 8 } } }, closingElement: null, children: [], range: [1, 8], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 8 } } }, right: { type: "Identifier", name: "x", range: [12, 13], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 13 } } }, range: [0, 13], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 13 } } }, range: [0, 14], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 14 } } }, "
": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "div", range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: true, attributes: [{ type: "XJSSpreadAttribute", argument: { type: "Identifier", name: "props", range: [9, 14], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 14 } } }, range: [5, 15], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 15 } } }], range: [0, 18], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 18 } } }, closingElement: null, children: [], range: [0, 18], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 18 } } }, range: [0, 18], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 18 } } }, '
': { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "div", range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: true, attributes: [{ type: "XJSSpreadAttribute", argument: { type: "Identifier", name: "props", range: [9, 14], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 14 } } }, range: [5, 15], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 15 } } }, { type: "XJSAttribute", name: { type: "XJSIdentifier", name: "post", range: [16, 20], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 20 } } }, value: { type: "Literal", value: "attribute", raw: '"attribute"', range: [21, 32], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 32 } } }, range: [16, 32], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 32 } } }], range: [0, 35], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 35 } } }, closingElement: null, children: [], range: [0, 35], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 35 } } }, range: [0, 35], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 35 } } }, '
': { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "div", range: [1, 4], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 4 } } }, selfClosing: false, attributes: [{ type: "XJSAttribute", name: { type: "XJSIdentifier", name: "pre", range: [5, 8], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 8 } } }, value: { type: "Literal", value: "leading", raw: '"leading"', range: [9, 18], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 18 } } }, range: [5, 18], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 18 } } }, { type: "XJSAttribute", name: { type: "XJSIdentifier", name: "pre2", range: [19, 23], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 23 } } }, value: { type: "Literal", value: "attribute", raw: '"attribute"', range: [24, 35], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 35 } } }, range: [19, 35], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 35 } } }, { type: "XJSSpreadAttribute", argument: { type: "Identifier", name: "props", range: [40, 45], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 45 } } }, range: [36, 46], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 46 } } }], range: [0, 47], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 47 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSIdentifier", name: "div", range: [49, 52], loc: { start: { line: 1, column: 49 }, end: { line: 1, column: 52 } } }, range: [47, 53], loc: { start: { line: 1, column: 47 }, end: { line: 1, column: 53 } } }, children: [], range: [0, 53], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 53 } } }, range: [0, 53], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 53 } } }, " ": { type: "ExpressionStatement", expression: { type: "XJSElement", openingElement: { type: "XJSOpeningElement", name: { type: "XJSIdentifier", name: "a", range: [1, 2], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 2 } } }, selfClosing: false, attributes: [], range: [0, 3], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 3 } } }, closingElement: { type: "XJSClosingElement", name: { type: "XJSIdentifier", name: "a", range: [7, 8], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 8 } } }, range: [5, 9], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 9 } } }, children: [{ type: "Literal", value: " ", raw: " ", range: [3, 5], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 5 } } }], range: [0, 9], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 9 } } }, range: [0, 9], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 9 } } }, }, "Type Annotations": { "function foo(numVal: any){}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "numVal", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "AnyTypeAnnotation", range: [21, 24], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 24 } } }, range: [19, 24], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 24 } } }, range: [13, 24], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 24 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [25, 27], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 27 } } }, rest: null, generator: false, expression: false, range: [0, 27], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 27 } } }, "function foo(numVal: number){}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "numVal", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [21, 27], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 27 } } }, range: [19, 27], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 27 } } }, range: [13, 27], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 27 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [28, 30], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 30 } } }, rest: null, generator: false, expression: false, range: [0, 30], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 30 } } }, "function foo(numVal: number, strVal: string){}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "numVal", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [21, 27], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 27 } } }, range: [19, 27], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 27 } } }, range: [13, 27], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 27 } } }, { type: "Identifier", name: "strVal", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "StringTypeAnnotation", range: [37, 43], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 43 } } }, range: [35, 43], loc: { start: { line: 1, column: 35 }, end: { line: 1, column: 43 } } }, range: [29, 43], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 43 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [44, 46], loc: { start: { line: 1, column: 44 }, end: { line: 1, column: 46 } } }, rest: null, generator: false, expression: false, range: [0, 46], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 46 } } }, "function foo(numVal: number, untypedVal){}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "numVal", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [21, 27], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 27 } } }, range: [19, 27], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 27 } } }, range: [13, 27], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 27 } } }, { type: "Identifier", name: "untypedVal", range: [29, 39], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 39 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [40, 42], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 42 } } }, rest: null, generator: false, expression: false, range: [0, 42], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 42 } } }, "function foo(untypedVal, numVal: number){}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "untypedVal", range: [13, 23], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 23 } } }, { type: "Identifier", name: "numVal", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [33, 39], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 39 } } }, range: [31, 39], loc: { start: { line: 1, column: 31 }, end: { line: 1, column: 39 } } }, range: [25, 39], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 39 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [40, 42], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 42 } } }, rest: null, generator: false, expression: false, range: [0, 42], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 42 } } }, "function foo(nullableNum: ?number){}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "nullableNum", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NullableTypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [27, 33], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 33 } } }, range: [26, 33], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 33 } } }, range: [24, 33], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 33 } } }, range: [13, 33], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 33 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [34, 36], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 36 } } }, rest: null, generator: false, expression: false, range: [0, 36], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 36 } } }, "function foo(callback: () => void){}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "callback", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "VoidTypeAnnotation", range: [29, 33], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 33 } } }, rest: null, typeParameters: null, range: [23, 33], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 33 } } }, range: [21, 33], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 33 } } }, range: [13, 33], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 33 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [34, 36], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 36 } } }, rest: null, generator: false, expression: false, range: [0, 36], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 36 } } }, "function foo(callback: () => number){}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "callback", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [29, 35], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 35 } } }, rest: null, typeParameters: null, range: [23, 35], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 35 } } }, range: [21, 35], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 35 } } }, range: [13, 35], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 35 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [36, 38], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 38 } } }, rest: null, generator: false, expression: false, range: [0, 38], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 38 } } }, "function foo(callback: (_:bool) => number){}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "callback", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "_", range: [24, 25], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 25 } } }, typeAnnotation: { type: "BooleanTypeAnnotation", range: [26, 30], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 30 } } }, optional: false, range: [24, 30], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 30 } } }], returnType: { type: "NumberTypeAnnotation", range: [35, 41], loc: { start: { line: 1, column: 35 }, end: { line: 1, column: 41 } } }, rest: null, typeParameters: null, range: [23, 41], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 41 } } }, range: [21, 41], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 41 } } }, range: [13, 41], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 41 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [42, 44], loc: { start: { line: 1, column: 42 }, end: { line: 1, column: 44 } } }, rest: null, generator: false, expression: false, range: [0, 44], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 44 } } }, "function foo(callback: (_1:bool, _2:string) => number){}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "callback", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "_1", range: [24, 26], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 26 } } }, typeAnnotation: { type: "BooleanTypeAnnotation", range: [27, 31], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 31 } } }, optional: false, range: [24, 31], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 31 } } }, { type: "FunctionTypeParam", name: { type: "Identifier", name: "_2", range: [33, 35], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 35 } } }, typeAnnotation: { type: "StringTypeAnnotation", range: [36, 42], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 42 } } }, optional: false, range: [33, 42], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 42 } } }], returnType: { type: "NumberTypeAnnotation", range: [47, 53], loc: { start: { line: 1, column: 47 }, end: { line: 1, column: 53 } } }, rest: null, typeParameters: null, range: [23, 53], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 53 } } }, range: [21, 53], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 53 } } }, range: [13, 53], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 53 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [54, 56], loc: { start: { line: 1, column: 54 }, end: { line: 1, column: 56 } } }, rest: null, generator: false, expression: false, range: [0, 56], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 56 } } }, "function foo(callback: (_1:bool, ...foo:Array) => number){}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "callback", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "_1", range: [24, 26], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 26 } } }, typeAnnotation: { type: "BooleanTypeAnnotation", range: [27, 31], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 31 } } }, optional: false, range: [24, 31], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 31 } } }], returnType: { type: "NumberTypeAnnotation", range: [58, 64], loc: { start: { line: 1, column: 58 }, end: { line: 1, column: 64 } } }, rest: { type: "FunctionTypeParam", name: { type: "Identifier", name: "foo", range: [36, 39], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 39 } } }, typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Array", range: [40, 45], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 45 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "NumberTypeAnnotation", range: [46, 52], loc: { start: { line: 1, column: 46 }, end: { line: 1, column: 52 } } }], range: [45, 53], loc: { start: { line: 1, column: 45 }, end: { line: 1, column: 53 } } }, range: [40, 53], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 53 } } }, optional: false, range: [36, 53], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 53 } } }, typeParameters: null, range: [23, 64], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 64 } } }, range: [21, 64], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 64 } } }, range: [13, 64], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 64 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [65, 67], loc: { start: { line: 1, column: 65 }, end: { line: 1, column: 67 } } }, rest: null, generator: false, expression: false, range: [0, 67], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 67 } } }, "function foo():number{}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [21, 23], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 23 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [15, 21], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 21 } } }, range: [14, 21], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 21 } } }, range: [0, 23], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 23 } } }, "function foo():() => void{}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [25, 27], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 27 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "VoidTypeAnnotation", range: [21, 25], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 25 } } }, rest: null, typeParameters: null, range: [15, 25], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 25 } } }, range: [14, 25], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 25 } } }, range: [0, 27], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 27 } } }, "function foo():(_:bool) => number{}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [33, 35], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 35 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "_", range: [16, 17], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 17 } } }, typeAnnotation: { type: "BooleanTypeAnnotation", range: [18, 22], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 22 } } }, optional: false, range: [16, 22], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 22 } } }], returnType: { type: "NumberTypeAnnotation", range: [27, 33], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 33 } } }, rest: null, typeParameters: null, range: [15, 33], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 33 } } }, range: [14, 33], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 33 } } }, range: [0, 35], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 35 } } }, "function foo():(_?:bool) => number{}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [34, 36], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 36 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "_", range: [16, 17], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 17 } } }, typeAnnotation: { type: "BooleanTypeAnnotation", range: [19, 23], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 23 } } }, optional: true, range: [16, 23], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 23 } } }], returnType: { type: "NumberTypeAnnotation", range: [28, 34], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 34 } } }, rest: null, typeParameters: null, range: [15, 34], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 34 } } }, range: [14, 34], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 34 } } }, range: [0, 36], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 36 } } }, "function foo(): {} {}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [19, 21], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 21 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [], indexers: [], callProperties: [], range: [16, 18], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 18 } } }, range: [14, 18], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 18 } } }, range: [0, 21], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 21 } } }, "function foo() {}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [18, 20], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 20 } } }, rest: null, generator: false, expression: false, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [13, 14], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 14 } } }], range: [12, 15], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 15 } } }, range: [0, 20], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 20 } } }, "function foo() {}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [20, 22], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 22 } } }, rest: null, generator: false, expression: false, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [13, 14], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 14 } } }, { type: "Identifier", name: "S", range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }], range: [12, 17], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 17 } } }, range: [0, 22], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 22 } } }, "a=function() {}": { type: "ExpressionStatement", expression: { type: "AssignmentExpression", operator: "=", left: { type: "Identifier", name: "a", range: [0, 1], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 1 } } }, right: { type: "FunctionExpression", id: null, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [18, 20], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 20 } } }, rest: null, generator: false, expression: false, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [11, 12], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 12 } } }, { type: "Identifier", name: "S", range: [13, 14], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 14 } } }], range: [10, 15], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 15 } } }, range: [2, 20], loc: { start: { line: 1, column: 2 }, end: { line: 1, column: 20 } } }, range: [0, 20], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 20 } } }, range: [0, 20], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 20 } } }, "a={set fooProp(value:number){}}": { type: "ExpressionStatement", expression: { type: "AssignmentExpression", operator: "=", left: { type: "Identifier", name: "a", range: [0, 1], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 1 } } }, right: { type: "ObjectExpression", properties: [{ type: "Property", key: { type: "Identifier", name: "fooProp", range: [7, 14], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 14 } } }, value: { type: "FunctionExpression", id: null, params: [{ type: "Identifier", name: "value", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [21, 27], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 27 } } }, range: [20, 27], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 27 } } }, range: [15, 27], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 27 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [28, 30], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 30 } } }, rest: null, generator: false, expression: false, //range: [28, 30], //loc: { // start: { line: 1, column: 28 }, // end: { line: 1, column: 30 } //} }, kind: "set", method: false, shorthand: false, computed: false, range: [3, 30], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 30 } } }], range: [2, 31], loc: { start: { line: 1, column: 2 }, end: { line: 1, column: 31 } } }, range: [0, 31], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 31 } } }, range: [0, 31], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 31 } } }, "a={set fooProp(value:number):void{}}": { type: "ExpressionStatement", expression: { type: "AssignmentExpression", operator: "=", left: { type: "Identifier", name: "a", range: [0, 1], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 1 } } }, right: { type: "ObjectExpression", properties: [{ type: "Property", key: { type: "Identifier", name: "fooProp", range: [7, 14], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 14 } } }, value: { type: "FunctionExpression", id: null, params: [{ type: "Identifier", name: "value", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [21, 27], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 27 } } }, range: [20, 27], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 27 } } }, range: [15, 27], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 27 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [33, 35], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 35 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "VoidTypeAnnotation", range: [29, 33], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 33 } } }, range: [28, 33], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 33 } } }, //range: [33, 35], //loc: { // start: { line: 1, column: 33 }, // end: { line: 1, column: 35 } //} }, kind: "set", method: false, shorthand: false, computed: false, range: [3, 35], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 35 } } }], range: [2, 36], loc: { start: { line: 1, column: 2 }, end: { line: 1, column: 36 } } }, range: [0, 36], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 36 } } }, range: [0, 36], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 36 } } }, "a={get fooProp():number{}}": { type: "ExpressionStatement", expression: { type: "AssignmentExpression", operator: "=", left: { type: "Identifier", name: "a", range: [0, 1], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 1 } } }, right: { type: "ObjectExpression", properties: [{ type: "Property", key: { type: "Identifier", name: "fooProp", range: [7, 14], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 14 } } }, value: { type: "FunctionExpression", id: null, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [23, 25], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 25 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [17, 23], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 23 } } }, range: [16, 23], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 23 } } }, //range: [23, 25], //loc: { // start: { line: 1, column: 23 }, // end: { line: 1, column: 25 } //} }, kind: "get", method: false, shorthand: false, computed: false, range: [3, 25], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 25 } } }], range: [2, 26], loc: { start: { line: 1, column: 2 }, end: { line: 1, column: 26 } } }, range: [0, 26], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 26 } } }, range: [0, 26], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 26 } } }, "a={id(x: T): T {}}": { type: "ExpressionStatement", expression: { type: "AssignmentExpression", operator: "=", left: { type: "Identifier", name: "a", range: [0, 1], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 1 } } }, right: { type: "ObjectExpression", properties: [{ type: "Property", key: { type: "Identifier", name: "id", range: [3, 5], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 5 } } }, value: { type: "FunctionExpression", //id: null, params: [{ type: "Identifier", name: "x", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [12, 13], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 13 } } }, typeParameters: null, range: [12, 13], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 13 } } }, range: [10, 13], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 13 } } }, range: [9, 13], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 13 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [18, 20], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 20 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [16, 17], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 17 } } }, typeParameters: null, range: [16, 17], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 17 } } }, range: [14, 17], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 17 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [6, 7], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 7 } } }], range: [5, 8], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 8 } } }, //range: [18, 20], //loc: { // start: { line: 1, column: 18 }, // end: { line: 1, column: 20 } //} }, kind: "init", method: true, shorthand: false, computed: false, range: [3, 20], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 20 } } }], range: [2, 21], loc: { start: { line: 1, column: 2 }, end: { line: 1, column: 21 } } }, range: [0, 21], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 21 } } }, range: [0, 21], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 21 } } }, "a={*id(x: T): T {}}": { type: "ExpressionStatement", expression: { type: "AssignmentExpression", operator: "=", left: { type: "Identifier", name: "a", range: [0, 1], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 1 } } }, right: { type: "ObjectExpression", properties: [{ type: "Property", key: { type: "Identifier", name: "id", range: [4, 6], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 6 } } }, value: { type: "FunctionExpression", id: null, params: [{ type: "Identifier", name: "x", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [13, 14], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 14 } } }, typeParameters: null, range: [13, 14], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 14 } } }, range: [11, 14], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 14 } } }, range: [10, 14], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 14 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [19, 21], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 21 } } }, rest: null, generator: true, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [17, 18], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 18 } } }, typeParameters: null, range: [17, 18], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 18 } } }, range: [15, 18], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 18 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [7, 8], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 8 } } }], range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, //range: [19, 21], //loc: { // start: { line: 1, column: 19 }, // end: { line: 1, column: 21 } //} }, kind: "init", method: true, shorthand: false, computed: false, //range: [3, 21], //loc: { // start: { line: 1, column: 3 }, // end: { line: 1, column: 21 } //} }], range: [2, 22], loc: { start: { line: 1, column: 2 }, end: { line: 1, column: 22 } } }, range: [0, 22], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 22 } } }, range: [0, 22], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 22 } } }, "a={123(x: T): T {}}": { type: "ExpressionStatement", expression: { type: "AssignmentExpression", operator: "=", left: { type: "Identifier", name: "a", range: [0, 1], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 1 } } }, right: { type: "ObjectExpression", properties: [{ type: "Property", key: { type: "Literal", value: 123, raw: "123", range: [3, 6], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 6 } } }, value: { type: "FunctionExpression", id: null, params: [{ type: "Identifier", name: "x", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [13, 14], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 14 } } }, typeParameters: null, range: [13, 14], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 14 } } }, range: [11, 14], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 14 } } }, range: [10, 14], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 14 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [19, 21], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 21 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [17, 18], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 18 } } }, typeParameters: null, range: [17, 18], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 18 } } }, range: [15, 18], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 18 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [7, 8], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 8 } } }], range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, //range: [19, 21], //loc: { // start: { line: 1, column: 19 }, // end: { line: 1, column: 21 } //} }, kind: "init", method: true, shorthand: false, computed: false, range: [3, 21], loc: { start: { line: 1, column: 3 }, end: { line: 1, column: 21 } } }], range: [2, 22], loc: { start: { line: 1, column: 2 }, end: { line: 1, column: 22 } } }, range: [0, 22], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 22 } } }, range: [0, 22], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 22 } } }, "class Foo {set fooProp(value:number){}}": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: null, body: { type: "ClassBody", body: [{ type: "MethodDefinition", key: { type: "Identifier", name: "fooProp", range: [15, 22], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 22 } } }, value: { type: "FunctionExpression", id: null, params: [{ type: "Identifier", name: "value", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [29, 35], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 35 } } }, range: [28, 35], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 35 } } }, range: [23, 35], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 35 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [36, 38], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 38 } } }, rest: null, generator: false, expression: false, //range: [36, 38], //loc: { // start: { line: 1, column: 36 }, // end: { line: 1, column: 38 } //} }, kind: "set", "static": false, computed: false, range: [11, 38], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 38 } } }], range: [10, 39], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 39 } } }, range: [0, 39], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 39 } } }, "class Foo {set fooProp(value:number):void{}}": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: null, body: { type: "ClassBody", body: [{ type: "MethodDefinition", key: { type: "Identifier", name: "fooProp", range: [15, 22], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 22 } } }, value: { type: "FunctionExpression", id: null, params: [{ type: "Identifier", name: "value", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [29, 35], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 35 } } }, range: [28, 35], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 35 } } }, range: [23, 35], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 35 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [41, 43], loc: { start: { line: 1, column: 41 }, end: { line: 1, column: 43 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "VoidTypeAnnotation", range: [37, 41], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 41 } } }, range: [36, 41], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 41 } } }, //range: [41, 43], //loc: { // start: { line: 1, column: 41 }, // end: { line: 1, column: 43 } //} }, kind: "set", "static": false, computed: false, range: [11, 43], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 43 } } }], range: [10, 44], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 44 } } }, range: [0, 44], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 44 } } }, "class Foo {get fooProp():number{}}": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: null, body: { type: "ClassBody", body: [{ type: "MethodDefinition", key: { type: "Identifier", name: "fooProp", range: [15, 22], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 22 } } }, value: { type: "FunctionExpression", id: null, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [31, 33], loc: { start: { line: 1, column: 31 }, end: { line: 1, column: 33 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [25, 31], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 31 } } }, range: [24, 31], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 31 } } }, //range: [31, 33], //loc: { // start: { line: 1, column: 31 }, // end: { line: 1, column: 33 } //} }, kind: "get", "static": false, computed: false, range: [11, 33], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 33 } } }], range: [10, 34], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 34 } } }, range: [0, 34], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 34 } } }, "var numVal:number;": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "numVal", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [11, 17], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 17 } } }, range: [10, 17], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 17 } } }, range: [4, 17], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 17 } } }, init: null, range: [4, 17], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 17 } } }], kind: "var", range: [0, 18], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 18 } } }, "var numVal:number = otherNumVal;": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "numVal", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [11, 17], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 17 } } }, range: [10, 17], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 17 } } }, range: [4, 17], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 17 } } }, init: { type: "Identifier", name: "otherNumVal", range: [20, 31], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 31 } } }, range: [4, 31], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 31 } } }], kind: "var", range: [0, 32], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 32 } } }, "var a: {numVal: number};": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "numVal", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, value: { type: "NumberTypeAnnotation", range: [16, 22], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 22 } } }, optional: false, range: [8, 22], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 22 } } }], indexers: [], callProperties: [], range: [7, 23], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 23 } } }, range: [5, 23], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 23 } } }, range: [4, 23], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 23 } } }, init: null, range: [4, 23], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 23 } } }], kind: "var", range: [0, 24], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 24 } } }, "var a: {numVal: number;};": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "numVal", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, value: { type: "NumberTypeAnnotation", range: [16, 22], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 22 } } }, optional: false, range: [8, 22], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 22 } } }], indexers: [], callProperties: [], range: [7, 24], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 24 } } }, range: [5, 24], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 24 } } }, range: [4, 24], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 24 } } }, init: null, range: [4, 24], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 24 } } }], kind: "var", range: [0, 25], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 25 } } }, "var a: {numVal: number; [indexer: string]: number};": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "numVal", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, value: { type: "NumberTypeAnnotation", range: [16, 22], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 22 } } }, optional: false, range: [8, 22], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 22 } } }], indexers: [{ type: "ObjectTypeIndexer", id: { type: "Identifier", name: "indexer", range: [25, 32], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 32 } } }, key: { type: "StringTypeAnnotation", range: [34, 40], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 40 } } }, value: { type: "NumberTypeAnnotation", range: [43, 49], loc: { start: { line: 1, column: 43 }, end: { line: 1, column: 49 } } }, range: [24, 49], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 49 } } }], callProperties: [], range: [7, 50], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 50 } } }, range: [5, 50], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 50 } } }, range: [4, 50], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 50 } } }, init: null, range: [4, 50], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 50 } } }], kind: "var", range: [0, 51], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 51 } } }, "var a: ?{numVal: number};": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NullableTypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "numVal", range: [9, 15], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 15 } } }, value: { type: "NumberTypeAnnotation", range: [17, 23], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 23 } } }, optional: false, range: [9, 23], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 23 } } }], indexers: [], callProperties: [], range: [8, 24], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 24 } } }, range: [7, 24], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 24 } } }, range: [5, 24], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 24 } } }, range: [4, 24], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 24 } } }, init: null, range: [4, 24], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 24 } } }], kind: "var", range: [0, 25], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 25 } } }, "var a: {numVal: number; strVal: string}": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "numVal", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, value: { type: "NumberTypeAnnotation", range: [16, 22], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 22 } } }, optional: false, range: [8, 22], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 22 } } }, { type: "ObjectTypeProperty", key: { type: "Identifier", name: "strVal", range: [24, 30], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 30 } } }, value: { type: "StringTypeAnnotation", range: [32, 38], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 38 } } }, optional: false, range: [24, 38], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 38 } } }], indexers: [], callProperties: [], range: [7, 39], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 39 } } }, range: [5, 39], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 39 } } }, range: [4, 39], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 39 } } }, init: null, range: [4, 39], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 39 } } }], kind: "var", range: [0, 39], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 39 } } }, "var a: {subObj: {strVal: string}}": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "subObj", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, value: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "strVal", range: [17, 23], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 23 } } }, value: { type: "StringTypeAnnotation", range: [25, 31], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 31 } } }, optional: false, range: [17, 31], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 31 } } }], indexers: [], callProperties: [], range: [16, 32], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 32 } } }, optional: false, range: [8, 32], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 32 } } }], indexers: [], callProperties: [], range: [7, 33], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 33 } } }, range: [5, 33], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 33 } } }, range: [4, 33], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 33 } } }, init: null, range: [4, 33], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 33 } } }], kind: "var", range: [0, 33], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 33 } } }, "var a: {subObj: ?{strVal: string}}": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "subObj", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, value: { type: "NullableTypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "strVal", range: [18, 24], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 24 } } }, value: { type: "StringTypeAnnotation", range: [26, 32], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 32 } } }, optional: false, range: [18, 32], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 32 } } }], indexers: [], callProperties: [], range: [17, 33], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 33 } } }, range: [16, 33], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 33 } } }, optional: false, range: [8, 33], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 33 } } }], indexers: [], callProperties: [], range: [7, 34], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 34 } } }, range: [5, 34], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 34 } } }, range: [4, 34], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 34 } } }, init: null, range: [4, 34], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 34 } } }], kind: "var", range: [0, 34], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 34 } } }, "var a: {param1: number; param2: string}": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "param1", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, value: { type: "NumberTypeAnnotation", range: [16, 22], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 22 } } }, optional: false, range: [8, 22], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 22 } } }, { type: "ObjectTypeProperty", key: { type: "Identifier", name: "param2", range: [24, 30], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 30 } } }, value: { type: "StringTypeAnnotation", range: [32, 38], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 38 } } }, optional: false, range: [24, 38], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 38 } } }], indexers: [], callProperties: [], range: [7, 39], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 39 } } }, range: [5, 39], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 39 } } }, range: [4, 39], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 39 } } }, init: null, range: [4, 39], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 39 } } }], kind: "var", range: [0, 39], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 39 } } }, "var a: {param1: number; param2?: string}": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "param1", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, value: { type: "NumberTypeAnnotation", range: [16, 22], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 22 } } }, optional: false, range: [8, 22], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 22 } } }, { type: "ObjectTypeProperty", key: { type: "Identifier", name: "param2", range: [24, 30], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 30 } } }, value: { type: "StringTypeAnnotation", range: [33, 39], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 39 } } }, optional: true, range: [24, 39], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 39 } } }], indexers: [], callProperties: [], range: [7, 40], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 40 } } }, range: [5, 40], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 40 } } }, range: [4, 40], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 40 } } }, init: null, range: [4, 40], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 40 } } }], kind: "var", range: [0, 40], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 40 } } }, "var a: {add(x:number, ...y:Array): void}": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "add", range: [8, 11], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 11 } } }, value: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "x", range: [12, 13], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 13 } } }, typeAnnotation: { type: "NumberTypeAnnotation", range: [14, 20], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 20 } } }, optional: false, range: [12, 20], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 20 } } }], returnType: { type: "VoidTypeAnnotation", range: [43, 47], loc: { start: { line: 1, column: 43 }, end: { line: 1, column: 47 } } }, rest: { type: "FunctionTypeParam", name: { type: "Identifier", name: "y", range: [25, 26], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 26 } } }, typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Array", range: [27, 32], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 32 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "StringTypeAnnotation", range: [33, 39], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 39 } } }], range: [32, 40], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 40 } } }, range: [27, 40], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 40 } } }, optional: false, range: [25, 40], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 40 } } }, typeParameters: null, range: [8, 47], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 47 } } }, optional: false, range: [8, 47], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 47 } } }], indexers: [], callProperties: [], range: [7, 48], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 48 } } }, range: [5, 48], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 48 } } }, range: [4, 48], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 48 } } }, init: null, range: [4, 48], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 48 } } }], kind: "var", range: [0, 48], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 48 } } }, "var a: { id(x: T): T; }": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "id", range: [9, 11], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 11 } } }, value: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "x", range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }, typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [18, 19], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 19 } } }, typeParameters: null, range: [18, 19], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 19 } } }, optional: false, range: [15, 19], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 19 } } }], returnType: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [22, 23], loc: { start: { line: 1, column: 22 }, end: { line: 1, column: 23 } } }, typeParameters: null, range: [22, 23], loc: { start: { line: 1, column: 22 }, end: { line: 1, column: 23 } } }, rest: null, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [12, 13], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 13 } } }], range: [11, 14], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 14 } } }, range: [9, 23], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 23 } } }, optional: false, range: [9, 23], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 23 } } }], indexers: [], callProperties: [], range: [7, 26], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 26 } } }, range: [5, 26], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 26 } } }, range: [4, 26], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 26 } } }, init: null, range: [4, 26], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 26 } } }], kind: "var", range: [0, 26], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 26 } } }, "var a:Array = [1, 2, 3]": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Array", range: [6, 11], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 11 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "NumberTypeAnnotation", range: [12, 18], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 18 } } }], range: [11, 19], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 19 } } }, range: [6, 19], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 19 } } }, range: [5, 19], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 19 } } }, range: [4, 19], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 19 } } }, init: { type: "ArrayExpression", elements: [{ type: "Literal", value: 1, raw: "1", range: [23, 24], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 24 } } }, { type: "Literal", value: 2, raw: "2", range: [26, 27], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 27 } } }, { type: "Literal", value: 3, raw: "3", range: [29, 30], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 30 } } }], range: [22, 31], loc: { start: { line: 1, column: 22 }, end: { line: 1, column: 31 } } }, range: [4, 31], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 31 } } }], kind: "var", range: [0, 31], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 31 } } }, "a = class Foo { }": { type: "ExpressionStatement", expression: { type: "AssignmentExpression", operator: "=", left: { type: "Identifier", name: "a", range: [0, 1], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 1 } } }, right: { type: "ClassExpression", id: { type: "Identifier", name: "Foo", range: [10, 13], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 13 } } }, superClass: null, body: { type: "ClassBody", body: [], range: [17, 20], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 20 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }], range: [13, 16], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 16 } } }, range: [4, 20], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 20 } } }, range: [0, 20], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 20 } } }, range: [0, 20], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 20 } } }, "a = class Foo extends Bar { }": { type: "ExpressionStatement", expression: { type: "AssignmentExpression", operator: "=", left: { type: "Identifier", name: "a", range: [0, 1], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 1 } } }, right: { type: "ClassExpression", id: { type: "Identifier", name: "Foo", range: [10, 13], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 13 } } }, superClass: { type: "Identifier", name: "Bar", range: [25, 28], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 28 } } }, body: { type: "ClassBody", body: [], range: [32, 35], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 35 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }], range: [13, 16], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 16 } } }, superTypeParameters: { type: "TypeParameterInstantiation", params: [{ type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [29, 30], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 30 } } }, typeParameters: null, range: [29, 30], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 30 } } }], range: [28, 31], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 31 } } }, range: [4, 35], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 35 } } }, range: [0, 35], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 35 } } }, range: [0, 35], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 35 } } }, "class Foo {}": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: null, body: { type: "ClassBody", body: [], range: [13, 15], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 15 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }], range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, range: [0, 15], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } } }, "class Foo extends Bar { }": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: { type: "Identifier", name: "Bar", range: [21, 24], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 24 } } }, body: { type: "ClassBody", body: [], range: [28, 31], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 31 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }], range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, superTypeParameters: { type: "TypeParameterInstantiation", params: [{ type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [25, 26], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 26 } } }, typeParameters: null, range: [25, 26], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 26 } } }], range: [24, 27], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 27 } } }, range: [0, 31], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 31 } } }, "class Foo extends mixin(Bar) { }": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: { type: "CallExpression", callee: { type: "Identifier", name: "mixin", range: [21, 26], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 26 } } }, "arguments": [{ type: "Identifier", name: "Bar", range: [27, 30], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 30 } } }], range: [21, 31], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 31 } } }, body: { type: "ClassBody", body: [], range: [32, 35], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 35 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }], range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, range: [0, 35], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 35 } } }, "class Foo { bar():number { return 42; }}": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: null, body: { type: "ClassBody", body: [{ type: "MethodDefinition", key: { type: "Identifier", name: "bar", range: [15, 18], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 18 } } }, value: { type: "FunctionExpression", id: null, params: [], defaults: [], body: { type: "BlockStatement", body: [{ type: "ReturnStatement", argument: { type: "Literal", value: 42, raw: "42", range: [40, 42], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 42 } } }, range: [33, 43], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 43 } } }], range: [31, 45], loc: { start: { line: 1, column: 31 }, end: { line: 1, column: 45 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [24, 30], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 30 } } }, range: [23, 30], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 30 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "U", range: [19, 20], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 20 } } }], range: [18, 21], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 21 } } }, //range: [31, 45], //loc: { // start: { line: 1, column: 31 }, // end: { line: 1, column: 45 } //} }, kind: "", "static": false, computed: false, range: [15, 45], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 45 } } }], range: [13, 46], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 46 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }], range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, range: [0, 46], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 46 } } }, 'class Foo { "bar"() { } }': { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: null, body: { type: "ClassBody", body: [{ type: "MethodDefinition", key: { type: "Literal", value: "bar", raw: '"bar"', range: [12, 17], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 17 } } }, value: { type: "FunctionExpression", id: null, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [23, 26], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 26 } } }, rest: null, generator: false, expression: false, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [18, 19], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 19 } } }], range: [17, 20], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 20 } } }, //range: [23, 26], //loc: { // start: { line: 1, column: 23 }, // end: { line: 1, column: 26 } //} }, kind: "", "static": false, computed: false, range: [12, 26], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 26 } } }], range: [10, 28], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 28 } } }, range: [0, 28], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 28 } } }, "function foo(requiredParam, optParam?) {}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "Identifier", name: "requiredParam", range: [13, 26], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 26 } } }, { type: "Identifier", name: "optParam", optional: true, range: [28, 37], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 37 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [39, 41], loc: { start: { line: 1, column: 39 }, end: { line: 1, column: 41 } } }, rest: null, generator: false, expression: false, range: [0, 41], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 41 } } }, "class Foo { prop1:string; prop2:number; }": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: null, body: { type: "ClassBody", body: [{ type: "ClassProperty", key: { type: "Identifier", name: "prop1", range: [12, 17], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 17 } } }, typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "StringTypeAnnotation", range: [18, 24], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 24 } } }, range: [17, 24], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 24 } } }, computed: false, "static": false, range: [12, 25], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 25 } } }, { type: "ClassProperty", key: { type: "Identifier", name: "prop2", range: [26, 31], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 31 } } }, typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [32, 38], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 38 } } }, range: [31, 38], loc: { start: { line: 1, column: 31 }, end: { line: 1, column: 38 } } }, computed: false, "static": false, range: [26, 39], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 39 } } }], range: [10, 41], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 41 } } }, range: [0, 41], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 41 } } }, "class Foo { static prop1:string; prop2:number; }": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: null, body: { type: "ClassBody", body: [{ type: "ClassProperty", key: { type: "Identifier", name: "prop1", range: [19, 24], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 24 } } }, typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "StringTypeAnnotation", range: [25, 31], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 31 } } }, range: [24, 31], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 31 } } }, computed: false, "static": true, range: [12, 32], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 32 } } }, { type: "ClassProperty", key: { type: "Identifier", name: "prop2", range: [33, 38], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 38 } } }, typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [39, 45], loc: { start: { line: 1, column: 39 }, end: { line: 1, column: 45 } } }, range: [38, 45], loc: { start: { line: 1, column: 38 }, end: { line: 1, column: 45 } } }, computed: false, "static": false, range: [33, 46], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 46 } } }], range: [10, 48], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 48 } } }, range: [0, 48], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 48 } } }, "var x : number | string = 4;": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "x", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "UnionTypeAnnotation", types: [{ type: "NumberTypeAnnotation", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, { type: "StringTypeAnnotation", range: [17, 23], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 23 } } }], range: [8, 23], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 23 } } }, range: [6, 23], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 23 } } }, range: [4, 23], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 23 } } }, init: { type: "Literal", value: 4, raw: "4", range: [26, 27], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 27 } } }, range: [4, 27], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 27 } } }], kind: "var", range: [0, 28], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 28 } } }, "class Array { concat(items:number | string) {}; }": { type: "ClassDeclaration", id: { type: "Identifier", name: "Array", range: [6, 11], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 11 } } }, superClass: null, body: { type: "ClassBody", body: [{ type: "MethodDefinition", key: { type: "Identifier", name: "concat", range: [14, 20], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 20 } } }, value: { type: "FunctionExpression", id: null, params: [{ type: "Identifier", name: "items", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "UnionTypeAnnotation", types: [{ type: "NumberTypeAnnotation", range: [27, 33], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 33 } } }, { type: "StringTypeAnnotation", range: [36, 42], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 42 } } }], range: [27, 42], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 42 } } }, range: [26, 42], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 42 } } }, range: [21, 42], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 42 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [44, 46], loc: { start: { line: 1, column: 44 }, end: { line: 1, column: 46 } } }, rest: null, generator: false, expression: false, //range: [44, 46], //loc: { // start: { line: 1, column: 44 }, // end: { line: 1, column: 46 } //} }, kind: "", "static": false, computed: false, range: [14, 46], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 46 } } }], range: [12, 49], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 49 } } }, range: [0, 49], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 49 } } }, "var x : () => number | () => string = fn;": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "x", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "UnionTypeAnnotation", types: [{ type: "NumberTypeAnnotation", range: [14, 20], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 20 } } }, { type: "FunctionTypeAnnotation", params: [], returnType: { type: "StringTypeAnnotation", range: [29, 35], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 35 } } }, rest: null, typeParameters: null, range: [23, 35], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 35 } } }], range: [14, 35], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 35 } } }, rest: null, typeParameters: null, range: [8, 35], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 35 } } }, range: [6, 35], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 35 } } }, range: [4, 35], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 35 } } }, init: { type: "Identifier", name: "fn", range: [38, 40], loc: { start: { line: 1, column: 38 }, end: { line: 1, column: 40 } } }, range: [4, 40], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 40 } } }], kind: "var", range: [0, 41], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 41 } } }, "var x: typeof Y = Y;": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "x", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "TypeofTypeAnnotation", argument: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Y", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, typeParameters: null, range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, range: [7, 15], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 15 } } }, range: [5, 15], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 15 } } }, range: [4, 15], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 15 } } }, init: { type: "Identifier", name: "Y", range: [18, 19], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 19 } } }, range: [4, 19], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 19 } } }], kind: "var", range: [0, 20], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 20 } } }, "var x: typeof Y | number = Y;": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "x", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "UnionTypeAnnotation", types: [{ type: "TypeofTypeAnnotation", argument: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Y", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, typeParameters: null, range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, range: [7, 15], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 15 } } }, { type: "NumberTypeAnnotation", range: [18, 24], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 24 } } }], range: [7, 24], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 24 } } }, range: [5, 24], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 24 } } }, range: [4, 24], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 24 } } }, init: { type: "Identifier", name: "Y", range: [27, 28], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 28 } } }, range: [4, 28], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 28 } } }], kind: "var", range: [0, 29], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 29 } } }, 'var {x}: {x: string; } = { x: "hello" };': { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "ObjectPattern", properties: [{ type: "Property", key: { type: "Identifier", name: "x", range: [5, 6], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } } }, value: { type: "Identifier", name: "x", range: [5, 6], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } } }, kind: "init", method: false, shorthand: true, computed: false, range: [5, 6], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } } }], range: [4, 22], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 22 } }, typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "x", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }, value: { type: "StringTypeAnnotation", range: [13, 19], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 19 } } }, optional: false, range: [10, 19], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 19 } } }], indexers: [], callProperties: [], range: [9, 22], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 22 } } }, range: [7, 22], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 22 } } } }, init: { type: "ObjectExpression", properties: [{ type: "Property", key: { type: "Identifier", name: "x", range: [27, 28], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 28 } } }, value: { type: "Literal", value: "hello", raw: '"hello"', range: [30, 37], loc: { start: { line: 1, column: 30 }, end: { line: 1, column: 37 } } }, kind: "init", method: false, shorthand: false, computed: false, range: [27, 37], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 37 } } }], range: [25, 39], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 39 } } }, range: [4, 39], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 39 } } }], kind: "var", range: [0, 40], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 40 } } }, 'var {x}: {x: string } = { x: "hello" };': { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "ObjectPattern", properties: [{ type: "Property", key: { type: "Identifier", name: "x", range: [5, 6], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } } }, value: { type: "Identifier", name: "x", range: [5, 6], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } } }, kind: "init", method: false, shorthand: true, computed: false, range: [5, 6], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } } }], range: [4, 21], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 21 } }, typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "x", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }, value: { type: "StringTypeAnnotation", range: [13, 19], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 19 } } }, optional: false, range: [10, 19], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 19 } } }], indexers: [], callProperties: [], range: [9, 21], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 21 } } }, range: [7, 21], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 21 } } } }, init: { type: "ObjectExpression", properties: [{ type: "Property", key: { type: "Identifier", name: "x", range: [26, 27], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 27 } } }, value: { type: "Literal", value: "hello", raw: '"hello"', range: [29, 36], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 36 } } }, kind: "init", method: false, shorthand: false, computed: false, range: [26, 36], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 36 } } }], range: [24, 38], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 38 } } }, range: [4, 38], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 38 } } }], kind: "var", range: [0, 39], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 39 } } }, 'var [x]: Array = [ "hello" ];': { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "ArrayPattern", elements: [{ type: "Identifier", name: "x", range: [5, 6], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 6 } } }], range: [4, 22], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 22 } }, typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Array", range: [9, 14], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 14 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "StringTypeAnnotation", range: [15, 21], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 21 } } }], range: [14, 22], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 22 } } }, range: [9, 22], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 22 } } }, range: [7, 22], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 22 } } } }, init: { type: "ArrayExpression", elements: [{ type: "Literal", value: "hello", raw: '"hello"', range: [27, 34], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 34 } } }], range: [25, 36], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 36 } } }, range: [4, 36], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 36 } } }], kind: "var", range: [0, 37], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 37 } } }, "function foo({x}: { x: string; }) {}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "ObjectPattern", properties: [{ type: "Property", key: { type: "Identifier", name: "x", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, value: { type: "Identifier", name: "x", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, kind: "init", method: false, shorthand: true, computed: false, range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }], range: [13, 32], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 32 } }, typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "x", range: [20, 21], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 21 } } }, value: { type: "StringTypeAnnotation", range: [23, 29], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 29 } } }, optional: false, range: [20, 29], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 29 } } }], indexers: [], callProperties: [], range: [18, 32], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 32 } } }, range: [16, 32], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 32 } } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [34, 36], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 36 } } }, rest: null, generator: false, expression: false, range: [0, 36], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 36 } } }, "function foo([x]: Array) {}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [{ type: "ArrayPattern", elements: [{ type: "Identifier", name: "x", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }], range: [13, 31], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 31 } }, typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Array", range: [18, 23], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 23 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "StringTypeAnnotation", range: [24, 30], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 30 } } }], range: [23, 31], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 31 } } }, range: [18, 31], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 31 } } }, range: [16, 31], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 31 } } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [33, 35], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 35 } } }, rest: null, generator: false, expression: false, range: [0, 35], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 35 } } }, "function foo(...rest: Array) {}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [37, 39], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 39 } } }, rest: { type: "Identifier", name: "rest", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Array", range: [22, 27], loc: { start: { line: 1, column: 22 }, end: { line: 1, column: 27 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "NumberTypeAnnotation", range: [28, 34], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 34 } } }], range: [27, 35], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 35 } } }, range: [22, 35], loc: { start: { line: 1, column: 22 }, end: { line: 1, column: 35 } } }, range: [20, 35], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 35 } } }, range: [16, 35], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 35 } } }, generator: false, expression: false, range: [0, 39], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 39 } } }, "(function (...rest: Array) {})": { type: "ExpressionStatement", expression: { type: "FunctionExpression", id: null, params: [], defaults: [], body: { type: "BlockStatement", body: [], range: [35, 37], loc: { start: { line: 1, column: 35 }, end: { line: 1, column: 37 } } }, rest: { type: "Identifier", name: "rest", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Array", range: [20, 25], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 25 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "NumberTypeAnnotation", range: [26, 32], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 32 } } }], range: [25, 33], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 33 } } }, range: [20, 33], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 33 } } }, range: [18, 33], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 33 } } }, range: [14, 33], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 33 } } }, generator: false, expression: false, range: [1, 37], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 37 } } }, range: [0, 38], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 38 } } }, "((...rest: Array) => rest)": { type: "ExpressionStatement", expression: { type: "ArrowFunctionExpression", id: null, params: [], defaults: [], body: { type: "Identifier", name: "rest", range: [29, 33], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 33 } } }, rest: { type: "Identifier", name: "rest", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Array", range: [11, 16], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 16 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "NumberTypeAnnotation", range: [17, 23], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 23 } } }], range: [16, 24], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 24 } } }, range: [11, 24], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 24 } } }, range: [9, 24], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 24 } } }, range: [5, 24], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 24 } } }, generator: false, expression: true, range: [1, 33], loc: { start: { line: 1, column: 1 }, end: { line: 1, column: 33 } } }, range: [0, 34], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 34 } } }, "var a: Map >": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Map", range: [7, 10], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 10 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "StringTypeAnnotation", range: [11, 17], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 17 } } }, { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Array", range: [19, 24], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 24 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "StringTypeAnnotation", range: [25, 31], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 31 } } }], range: [24, 32], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 32 } } }, range: [19, 32], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 32 } } }], range: [10, 34], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 34 } } }, range: [7, 34], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 34 } } }, range: [5, 34], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 34 } } }, range: [4, 34], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 34 } } }, init: null, range: [4, 34], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 34 } } }], kind: "var", range: [0, 34], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 34 } } }, "var a: Map>": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Map", range: [7, 10], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 10 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "StringTypeAnnotation", range: [11, 17], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 17 } } }, { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Array", range: [19, 24], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 24 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "StringTypeAnnotation", range: [25, 31], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 31 } } }], range: [24, 32], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 32 } } }, range: [19, 32], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 32 } } }], range: [10, 33], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 33 } } }, range: [7, 33], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 33 } } }, range: [5, 33], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 33 } } }, range: [4, 33], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 33 } } }, init: null, range: [4, 33], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 33 } } }], kind: "var", range: [0, 33], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 33 } } }, "var a: number[]": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ArrayTypeAnnotation", elementType: { type: "NumberTypeAnnotation", range: [7, 13], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 13 } } }, range: [7, 15], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 15 } } }, range: [5, 15], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 15 } } }, range: [4, 15], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 15 } } }, init: null, range: [4, 15], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 15 } } }], kind: "var", range: [0, 15], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } } }, "var a: ?string[]": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NullableTypeAnnotation", typeAnnotation: { type: "ArrayTypeAnnotation", elementType: { type: "StringTypeAnnotation", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, range: [8, 16], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 16 } } }, range: [7, 16], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 16 } } }, range: [5, 16], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 16 } } }, range: [4, 16], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 16 } } }, init: null, range: [4, 16], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 16 } } }], kind: "var", range: [0, 16], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 16 } } }, "var a: Promise[]": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ArrayTypeAnnotation", elementType: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Promise", range: [7, 14], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 14 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "BooleanTypeAnnotation", range: [15, 19], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 19 } } }], range: [14, 20], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 20 } } }, range: [7, 20], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 20 } } }, range: [7, 22], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 22 } } }, range: [5, 22], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 22 } } }, range: [4, 22], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 22 } } }, init: null, range: [4, 22], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 22 } } }], kind: "var", range: [0, 22], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 22 } } }, "var a:(...rest:Array) => number": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [33, 39], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 39 } } }, rest: { type: "FunctionTypeParam", name: { type: "Identifier", name: "rest", range: [10, 14], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 14 } } }, typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Array", range: [15, 20], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 20 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "NumberTypeAnnotation", range: [21, 27], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 27 } } }], range: [20, 28], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 28 } } }, range: [15, 28], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 28 } } }, optional: false, range: [10, 28], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 28 } } }, typeParameters: null, range: [6, 39], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 39 } } }, range: [5, 39], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 39 } } }, range: [4, 39], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 39 } } }, init: null, range: [4, 39], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 39 } } }], kind: "var", range: [0, 39], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 39 } } }, "var identity: (x: T) => T": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "identity", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "x", range: [18, 19], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 19 } } }, typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [21, 22], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 22 } } }, typeParameters: null, range: [21, 22], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 22 } } }, optional: false, range: [18, 22], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 22 } } }], returnType: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [27, 28], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 28 } } }, typeParameters: null, range: [27, 28], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 28 } } }, rest: null, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }], range: [14, 17], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 17 } } }, range: [14, 28], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 28 } } }, range: [12, 28], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 28 } } }, range: [4, 28], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 28 } } }, init: null, range: [4, 28], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 28 } } }], kind: "var", range: [0, 28], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 28 } } }, "var identity: (x: T, ...y:T[]) => T": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "identity", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "x", range: [18, 19], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 19 } } }, typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [21, 22], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 22 } } }, typeParameters: null, range: [21, 22], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 22 } } }, optional: false, range: [18, 22], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 22 } } }], returnType: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [37, 38], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 38 } } }, typeParameters: null, range: [37, 38], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 38 } } }, rest: { type: "FunctionTypeParam", name: { type: "Identifier", name: "y", range: [27, 28], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 28 } } }, typeAnnotation: { type: "ArrayTypeAnnotation", elementType: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [29, 30], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 30 } } }, typeParameters: null, range: [29, 30], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 30 } } }, range: [29, 32], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 32 } } }, optional: false, range: [27, 32], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 32 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }], range: [14, 17], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 17 } } }, range: [14, 38], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 38 } } }, range: [12, 38], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 38 } } }, range: [4, 38], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 38 } } }, init: null, range: [4, 38], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 38 } } }], kind: "var", range: [0, 38], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 38 } } }, }, "Array Types": { "var a: number[]": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ArrayTypeAnnotation", elementType: { type: "NumberTypeAnnotation", range: [7, 13], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 13 } } }, range: [7, 15], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 15 } } }, range: [5, 15], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 15 } } }, range: [4, 15], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 15 } } }, init: null, range: [4, 15], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 15 } } }], kind: "var", range: [0, 15], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } } }, "var a: ?number[]": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NullableTypeAnnotation", typeAnnotation: { type: "ArrayTypeAnnotation", elementType: { type: "NumberTypeAnnotation", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, range: [8, 16], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 16 } } }, range: [7, 16], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 16 } } }, range: [5, 16], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 16 } } }, range: [4, 16], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 16 } } }, init: null, range: [4, 16], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 16 } } }], kind: "var", range: [0, 16], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 16 } } }, "var a: (?number)[]": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ArrayTypeAnnotation", elementType: { type: "NullableTypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [9, 15], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 15 } } }, range: [8, 15], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 15 } } }, range: [7, 18], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 18 } } }, range: [5, 18], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 18 } } }, range: [4, 18], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 18 } } }, init: null, range: [4, 18], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 18 } } }], kind: "var", range: [0, 18], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 18 } } }, "var a: () => number[]": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "ArrayTypeAnnotation", elementType: { type: "NumberTypeAnnotation", range: [13, 19], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 19 } } }, range: [13, 21], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 21 } } }, rest: null, typeParameters: null, range: [7, 21], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 21 } } }, range: [5, 21], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 21 } } }, range: [4, 21], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 21 } } }, init: null, range: [4, 21], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 21 } } }], kind: "var", range: [0, 21], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 21 } } }, "var a: (() => number)[]": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ArrayTypeAnnotation", elementType: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [14, 20], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 20 } } }, rest: null, typeParameters: null, range: [8, 20], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 20 } } }, range: [7, 23], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 23 } } }, range: [5, 23], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 23 } } }, range: [4, 23], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 23 } } }, init: null, range: [4, 23], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 23 } } }], kind: "var", range: [0, 23], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 23 } } }, "var a: typeof A[]": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ArrayTypeAnnotation", elementType: { type: "TypeofTypeAnnotation", argument: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "A", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, typeParameters: null, range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, range: [7, 15], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 15 } } }, range: [7, 17], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 17 } } }, range: [5, 17], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 17 } } }, range: [4, 17], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 17 } } }, init: null, range: [4, 17], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 17 } } }], kind: "var", range: [0, 17], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 17 } } }, }, "Tuples": { "var a : [] = [];": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "TupleTypeAnnotation", types: [], range: [8, 10], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 10 } } }, range: [6, 10], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 10 } } }, range: [4, 10], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 10 } } }, init: { type: "ArrayExpression", elements: [], range: [13, 15], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 15 } } }, range: [4, 15], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 15 } } }], kind: "var", range: [0, 16], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 16 } } }, "var a : [Foo] = [foo];": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "TupleTypeAnnotation", types: [{ type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Foo", range: [9, 12], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 12 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [13, 14], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 14 } } }, typeParameters: null, range: [13, 14], loc: { start: { line: 1, column: 13 }, end: { line: 1, column: 14 } } }], range: [12, 15], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 15 } } }, range: [9, 15], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 15 } } }], range: [8, 16], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 16 } } }, range: [6, 16], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 16 } } }, range: [4, 16], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 16 } } }, init: { type: "ArrayExpression", elements: [{ type: "Identifier", name: "foo", range: [20, 23], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 23 } } }], range: [19, 24], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 24 } } }, range: [4, 24], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 24 } } }], kind: "var", range: [0, 25], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 25 } } }, "var a : [number,] = [123,];": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "TupleTypeAnnotation", types: [{ type: "NumberTypeAnnotation", range: [9, 15], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 15 } } }], range: [8, 17], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 17 } } }, range: [6, 17], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 17 } } }, range: [4, 17], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 17 } } }, init: { type: "ArrayExpression", elements: [{ type: "Literal", value: 123, raw: "123", range: [21, 24], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 24 } } }], range: [20, 26], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 26 } } }, range: [4, 26], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 26 } } }], kind: "var", range: [0, 27], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 27 } } }, 'var a : [number, string] = [123, "duck"];': { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "TupleTypeAnnotation", types: [{ type: "NumberTypeAnnotation", range: [9, 15], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 15 } } }, { type: "StringTypeAnnotation", range: [17, 23], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 23 } } }], range: [8, 24], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 24 } } }, range: [6, 24], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 24 } } }, range: [4, 24], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 24 } } }, init: { type: "ArrayExpression", elements: [{ type: "Literal", value: 123, raw: "123", range: [28, 31], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 31 } } }, { type: "Literal", value: "duck", raw: '"duck"', range: [33, 39], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 39 } } }], range: [27, 40], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 40 } } }, range: [4, 40], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 40 } } }], kind: "var", range: [0, 41], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 41 } } }, }, "Type Alias": { "type FBID = number;": { type: "TypeAlias", id: { type: "Identifier", name: "FBID", range: [5, 9], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 9 } } }, typeParameters: null, right: { type: "NumberTypeAnnotation", range: [12, 18], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 18 } } }, range: [0, 19], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 19 } } }, "type Foo = Bar": { type: "TypeAlias", id: { type: "Identifier", name: "Foo", range: [5, 8], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 8 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [9, 10], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 10 } } }], range: [8, 11], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 11 } } }, right: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "Bar", range: [14, 17], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 17 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [18, 19], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 19 } } }, typeParameters: null, range: [18, 19], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 19 } } }], range: [17, 20], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 20 } } }, range: [14, 20], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 20 } } }, range: [0, 20], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 20 } } }, }, "Interfaces": { "interface A {}": { type: "InterfaceDeclaration", id: { type: "Identifier", name: "A", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }, typeParameters: null, body: { type: "ObjectTypeAnnotation", properties: [], indexers: [], callProperties: [], range: [12, 14], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 14 } } }, "extends": [], range: [0, 14], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 14 } } }, "interface A extends B {}": { type: "InterfaceDeclaration", id: { type: "Identifier", name: "A", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }, typeParameters: null, body: { type: "ObjectTypeAnnotation", properties: [], indexers: [], callProperties: [], range: [22, 24], loc: { start: { line: 1, column: 22 }, end: { line: 1, column: 24 } } }, "extends": [{ type: "InterfaceExtends", id: { type: "Identifier", name: "B", range: [20, 21], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 21 } } }, typeParameters: null, range: [20, 21], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 21 } } }], range: [0, 24], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 24 } } }, "interface A extends B, C {}": { type: "InterfaceDeclaration", id: { type: "Identifier", name: "A", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [12, 13], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 13 } } }], range: [11, 14], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 14 } } }, body: { type: "ObjectTypeAnnotation", properties: [], indexers: [], callProperties: [], range: [34, 36], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 36 } } }, "extends": [{ type: "InterfaceExtends", id: { type: "Identifier", name: "B", range: [23, 24], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 24 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [25, 26], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 26 } } }, typeParameters: null, range: [25, 26], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 26 } } }], range: [24, 27], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 27 } } }, range: [23, 27], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 27 } } }, { type: "InterfaceExtends", id: { type: "Identifier", name: "C", range: [29, 30], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 30 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [31, 32], loc: { start: { line: 1, column: 31 }, end: { line: 1, column: 32 } } }, typeParameters: null, range: [31, 32], loc: { start: { line: 1, column: 31 }, end: { line: 1, column: 32 } } }], range: [30, 33], loc: { start: { line: 1, column: 30 }, end: { line: 1, column: 33 } } }, range: [29, 33], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 33 } } }], range: [0, 36], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 36 } } }, "interface A { foo: () => number; }": { type: "InterfaceDeclaration", id: { type: "Identifier", name: "A", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }, typeParameters: null, body: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "foo", range: [14, 17], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 17 } } }, value: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [25, 31], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 31 } } }, rest: null, typeParameters: null, range: [19, 31], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 31 } } }, optional: false, range: [14, 31], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 31 } } }], indexers: [], callProperties: [], range: [12, 34], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 34 } } }, "extends": [], range: [0, 34], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 34 } } }, "interface Dictionary { [index: string]: string; length: number; }": { type: "InterfaceDeclaration", id: { type: "Identifier", name: "Dictionary", range: [10, 20], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 20 } } }, typeParameters: null, body: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "length", range: [48, 54], loc: { start: { line: 1, column: 48 }, end: { line: 1, column: 54 } } }, value: { type: "NumberTypeAnnotation", range: [56, 62], loc: { start: { line: 1, column: 56 }, end: { line: 1, column: 62 } } }, optional: false, range: [48, 62], loc: { start: { line: 1, column: 48 }, end: { line: 1, column: 62 } } }], indexers: [{ type: "ObjectTypeIndexer", id: { type: "Identifier", name: "index", range: [24, 29], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 29 } } }, key: { type: "StringTypeAnnotation", range: [31, 37], loc: { start: { line: 1, column: 31 }, end: { line: 1, column: 37 } } }, value: { type: "StringTypeAnnotation", range: [40, 46], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 46 } } }, range: [23, 46], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 46 } } }], callProperties: [], range: [21, 65], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 65 } } }, "extends": [], range: [0, 65], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 65 } } }, "class Foo implements Bar {}": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: null, body: { type: "ClassBody", body: [], range: [25, 27], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 27 } } }, "implements": [{ type: "ClassImplements", id: { type: "Identifier", name: "Bar", range: [21, 24], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 24 } } }, typeParameters: null, range: [21, 24], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 24 } } }], range: [0, 27], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 27 } } }, "class Foo extends Bar implements Bat, Man {}": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: { type: "Identifier", name: "Bar", range: [18, 21], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 21 } } }, body: { type: "ClassBody", body: [], range: [50, 52], loc: { start: { line: 1, column: 50 }, end: { line: 1, column: 52 } } }, "implements": [{ type: "ClassImplements", id: { type: "Identifier", name: "Bat", range: [33, 36], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 36 } } }, typeParameters: null, range: [33, 36], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 36 } } }, { type: "ClassImplements", id: { type: "Identifier", name: "Man", range: [38, 41], loc: { start: { line: 1, column: 38 }, end: { line: 1, column: 41 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "NumberTypeAnnotation", range: [42, 48], loc: { start: { line: 1, column: 42 }, end: { line: 1, column: 48 } } }], range: [41, 49], loc: { start: { line: 1, column: 41 }, end: { line: 1, column: 49 } } }, range: [38, 49], loc: { start: { line: 1, column: 38 }, end: { line: 1, column: 49 } } }], range: [0, 52], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 52 } } }, "class Foo extends class Bar implements Bat {} {}": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: { type: "ClassExpression", id: { type: "Identifier", name: "Bar", range: [24, 27], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 27 } } }, superClass: null, body: { type: "ClassBody", body: [], range: [43, 45], loc: { start: { line: 1, column: 43 }, end: { line: 1, column: 45 } } }, "implements": [{ type: "ClassImplements", id: { type: "Identifier", name: "Bat", range: [39, 42], loc: { start: { line: 1, column: 39 }, end: { line: 1, column: 42 } } }, typeParameters: null, range: [39, 42], loc: { start: { line: 1, column: 39 }, end: { line: 1, column: 42 } } }], range: [18, 45], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 45 } } }, body: { type: "ClassBody", body: [], range: [46, 48], loc: { start: { line: 1, column: 46 }, end: { line: 1, column: 48 } } }, range: [0, 48], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 48 } } }, "class Foo extends class Bar implements Bat {} implements Man {}": { type: "ClassDeclaration", id: { type: "Identifier", name: "Foo", range: [6, 9], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 9 } } }, superClass: { type: "ClassExpression", id: { type: "Identifier", name: "Bar", range: [24, 27], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 27 } } }, superClass: null, body: { type: "ClassBody", body: [], range: [43, 45], loc: { start: { line: 1, column: 43 }, end: { line: 1, column: 45 } } }, "implements": [{ type: "ClassImplements", id: { type: "Identifier", name: "Bat", range: [39, 42], loc: { start: { line: 1, column: 39 }, end: { line: 1, column: 42 } } }, typeParameters: null, range: [39, 42], loc: { start: { line: 1, column: 39 }, end: { line: 1, column: 42 } } }], range: [18, 45], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 45 } } }, body: { type: "ClassBody", body: [], range: [61, 63], loc: { start: { line: 1, column: 61 }, end: { line: 1, column: 63 } } }, "implements": [{ type: "ClassImplements", id: { type: "Identifier", name: "Man", range: [57, 60], loc: { start: { line: 1, column: 57 }, end: { line: 1, column: 60 } } }, typeParameters: null, range: [57, 60], loc: { start: { line: 1, column: 57 }, end: { line: 1, column: 60 } } }], range: [0, 63], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 63 } } }, }, "Type Grouping": { "var a: (number)": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, range: [5, 15], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 15 } } }, range: [4, 15], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 15 } } }, init: null, range: [4, 15], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 15 } } }], kind: "var", range: [0, 15], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } } }, "var a: (() => number) | () => string": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "UnionTypeAnnotation", types: [{ type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [14, 20], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 20 } } }, rest: null, typeParameters: null, range: [8, 20], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 20 } } }, { type: "FunctionTypeAnnotation", params: [], returnType: { type: "StringTypeAnnotation", range: [30, 36], loc: { start: { line: 1, column: 30 }, end: { line: 1, column: 36 } } }, rest: null, typeParameters: null, range: [24, 36], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 36 } } }], range: [7, 36], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 36 } } }, range: [5, 36], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 36 } } }, range: [4, 36], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 36 } } }, init: null, range: [4, 36], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 36 } } }], kind: "var", range: [0, 36], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 36 } } }, "var a: number & (string | bool)": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "IntersectionTypeAnnotation", types: [{ type: "NumberTypeAnnotation", range: [7, 13], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 13 } } }, { type: "UnionTypeAnnotation", types: [{ type: "StringTypeAnnotation", range: [17, 23], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 23 } } }, { type: "BooleanTypeAnnotation", range: [26, 30], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 30 } } }], range: [17, 30], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 30 } } }], range: [7, 31], loc: { start: { line: 1, column: 7 }, end: { line: 1, column: 31 } } }, range: [5, 31], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 31 } } }, range: [4, 31], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 31 } } }, init: null, range: [4, 31], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 31 } } }], kind: "var", range: [0, 31], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 31 } } }, "var a: (typeof A)": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "TypeofTypeAnnotation", argument: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "A", range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }, typeParameters: null, range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }, range: [8, 16], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 16 } } }, range: [5, 17], loc: { start: { line: 1, column: 5 }, end: { line: 1, column: 17 } } }, range: [4, 17], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 17 } } }, init: null, range: [4, 17], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 17 } } }], kind: "var", range: [0, 17], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 17 } } }, }, "Call Properties": { "var a : { (): number }": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [], indexers: [], callProperties: [{ type: "ObjectTypeCallProperty", value: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [14, 20], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 20 } } }, rest: null, typeParameters: null, range: [10, 20], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 20 } } }, range: [10, 20], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 20 } } }], range: [8, 22], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 22 } } }, range: [6, 22], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 22 } } }, range: [4, 22], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 22 } } }, init: null, range: [4, 22], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 22 } } }], kind: "var", range: [0, 22], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 22 } } }, "var a : { (): number; }": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [], indexers: [], callProperties: [{ type: "ObjectTypeCallProperty", value: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [14, 20], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 20 } } }, rest: null, typeParameters: null, range: [10, 20], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 20 } } }, range: [10, 20], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 20 } } }], range: [8, 23], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 23 } } }, range: [6, 23], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 23 } } }, range: [4, 23], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 23 } } }, init: null, range: [4, 23], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 23 } } }], kind: "var", range: [0, 23], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 23 } } }, "var a : { (): number; y: string; (x: string): string }": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "y", range: [22, 23], loc: { start: { line: 1, column: 22 }, end: { line: 1, column: 23 } } }, value: { type: "StringTypeAnnotation", range: [25, 31], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 31 } } }, optional: false, range: [22, 31], loc: { start: { line: 1, column: 22 }, end: { line: 1, column: 31 } } }], indexers: [], callProperties: [{ type: "ObjectTypeCallProperty", value: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [14, 20], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 20 } } }, rest: null, typeParameters: null, range: [10, 20], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 20 } } }, range: [10, 20], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 20 } } }, { type: "ObjectTypeCallProperty", value: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "x", range: [34, 35], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 35 } } }, typeAnnotation: { type: "StringTypeAnnotation", range: [37, 43], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 43 } } }, optional: false, range: [34, 43], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 43 } } }], returnType: { type: "StringTypeAnnotation", range: [46, 52], loc: { start: { line: 1, column: 46 }, end: { line: 1, column: 52 } } }, rest: null, typeParameters: null, range: [33, 52], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 52 } } }, range: [33, 52], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 52 } } }], range: [8, 54], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 54 } } }, range: [6, 54], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 54 } } }, range: [4, 54], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 54 } } }, init: null, range: [4, 54], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 54 } } }], kind: "var", range: [0, 54], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 54 } } }, "var a : { (x: T): number; }": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "ObjectTypeAnnotation", properties: [], indexers: [], callProperties: [{ type: "ObjectTypeCallProperty", value: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "x", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [17, 18], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 18 } } }, typeParameters: null, range: [17, 18], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 18 } } }, optional: false, range: [14, 18], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 18 } } }], returnType: { type: "NumberTypeAnnotation", range: [21, 27], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 27 } } }, rest: null, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [11, 12], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 12 } } }], range: [10, 13], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 13 } } }, range: [10, 27], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 27 } } }, range: [10, 27], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 27 } } }], range: [8, 30], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 30 } } }, range: [6, 30], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 30 } } }, range: [4, 30], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 30 } } }, init: null, range: [4, 30], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 30 } } }], kind: "var", range: [0, 30], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 30 } } }, "interface A { (): number; }": { type: "InterfaceDeclaration", id: { type: "Identifier", name: "A", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }, typeParameters: null, body: { type: "ObjectTypeAnnotation", properties: [], indexers: [], callProperties: [{ type: "ObjectTypeCallProperty", value: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [18, 24], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 24 } } }, rest: null, typeParameters: null, range: [14, 24], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 24 } } }, "static": false, range: [14, 24], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 24 } } }], range: [12, 27], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 27 } } }, "extends": [], range: [0, 27], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 27 } } }, }, "String Literal Types": { 'function createElement(tagName: "div"): HTMLDivElement {}': { type: "FunctionDeclaration", id: { type: "Identifier", name: "createElement", range: [9, 22], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 22 } } }, params: [{ type: "Identifier", name: "tagName", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "StringLiteralTypeAnnotation", value: "div", raw: '"div"', range: [32, 37], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 37 } } }, range: [30, 37], loc: { start: { line: 1, column: 30 }, end: { line: 1, column: 37 } } }, range: [23, 37], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 37 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [55, 57], loc: { start: { line: 1, column: 55 }, end: { line: 1, column: 57 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "HTMLDivElement", range: [40, 54], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 54 } } }, typeParameters: null, range: [40, 54], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 54 } } }, range: [38, 54], loc: { start: { line: 1, column: 38 }, end: { line: 1, column: 54 } } }, range: [0, 57], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 57 } } }, "function createElement(tagName: \"div\"): HTMLDivElement {}": { type: "FunctionDeclaration", id: { type: "Identifier", name: "createElement", range: [9, 22], loc: { start: { line: 1, column: 9 }, end: { line: 1, column: 22 } } }, params: [{ type: "Identifier", name: "tagName", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "StringLiteralTypeAnnotation", value: "div", raw: "\"div\"", range: [32, 37], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 37 } } }, range: [30, 37], loc: { start: { line: 1, column: 30 }, end: { line: 1, column: 37 } } }, range: [23, 37], loc: { start: { line: 1, column: 23 }, end: { line: 1, column: 37 } } }], defaults: [], body: { type: "BlockStatement", body: [], range: [55, 57], loc: { start: { line: 1, column: 55 }, end: { line: 1, column: 57 } } }, rest: null, generator: false, expression: false, returnType: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "Identifier", name: "HTMLDivElement", range: [40, 54], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 54 } } }, typeParameters: null, range: [40, 54], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 54 } } }, range: [38, 54], loc: { start: { line: 1, column: 38 }, end: { line: 1, column: 54 } } }, range: [0, 57], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 57 } } }, }, "Qualified Generic Type": { "var a : A.B": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "QualifiedTypeIdentifier", qualification: { type: "Identifier", name: "A", range: [8, 9], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 9 } } }, id: { type: "Identifier", name: "B", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }, range: [8, 11], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 11 } } }, typeParameters: null, range: [8, 11], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 11 } } }, range: [6, 11], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 11 } } }, range: [4, 11], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 11 } } }, init: null, range: [4, 11], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 11 } } }], kind: "var", range: [0, 11], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 11 } } }, "var a : A.B.C": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "QualifiedTypeIdentifier", qualification: { type: "QualifiedTypeIdentifier", qualification: { type: "Identifier", name: "A", range: [8, 9], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 9 } } }, id: { type: "Identifier", name: "B", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }, range: [8, 11], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 11 } } }, id: { type: "Identifier", name: "C", range: [12, 13], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 13 } } }, range: [8, 13], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 13 } } }, typeParameters: null, range: [8, 13], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 13 } } }, range: [6, 13], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 13 } } }, range: [4, 13], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 13 } } }, init: null, range: [4, 13], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 13 } } }], kind: "var", range: [0, 13], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 13 } } }, "var a : A.B": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "GenericTypeAnnotation", id: { type: "QualifiedTypeIdentifier", qualification: { type: "Identifier", name: "A", range: [8, 9], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 9 } } }, id: { type: "Identifier", name: "B", range: [10, 11], loc: { start: { line: 1, column: 10 }, end: { line: 1, column: 11 } } }, range: [8, 11], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 11 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [12, 13], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 13 } } }, typeParameters: null, range: [12, 13], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 13 } } }], range: [11, 14], loc: { start: { line: 1, column: 11 }, end: { line: 1, column: 14 } } }, range: [8, 14], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 14 } } }, range: [6, 14], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 14 } } }, range: [4, 14], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 14 } } }, init: null, range: [4, 14], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 14 } } }], kind: "var", range: [0, 14], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 14 } } }, "var a : typeof A.B": { type: "VariableDeclaration", declarations: [{ type: "VariableDeclarator", id: { type: "Identifier", name: "a", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "TypeofTypeAnnotation", argument: { type: "GenericTypeAnnotation", id: { type: "QualifiedTypeIdentifier", qualification: { type: "Identifier", name: "A", range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }, id: { type: "Identifier", name: "B", range: [17, 18], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 18 } } }, range: [15, 18], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 18 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [19, 20], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 20 } } }, typeParameters: null, range: [19, 20], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 20 } } }], range: [18, 21], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 21 } } }, range: [15, 21], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 21 } } }, range: [8, 21], loc: { start: { line: 1, column: 8 }, end: { line: 1, column: 21 } } }, range: [6, 21], loc: { start: { line: 1, column: 6 }, end: { line: 1, column: 21 } } }, range: [4, 21], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 21 } } }, init: null, range: [4, 21], loc: { start: { line: 1, column: 4 }, end: { line: 1, column: 21 } } }], kind: "var", range: [0, 21], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 21 } } }, }, "Declare Statements": { "declare var foo": { type: "DeclareVariable", id: { type: "Identifier", name: "foo", range: [12, 15], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 15 } } }, range: [0, 15], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 15 } } }, "declare var foo;": { type: "DeclareVariable", id: { type: "Identifier", name: "foo", range: [12, 15], loc: { start: { line: 1, column: 12 }, end: { line: 1, column: 15 } } }, range: [0, 16], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 16 } } }, "declare function foo(): void": { type: "DeclareFunction", id: { type: "Identifier", name: "foo", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "VoidTypeAnnotation", range: [24, 28], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 28 } } }, rest: null, typeParameters: null, range: [20, 28], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 28 } } }, range: [20, 28], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 28 } } }, range: [17, 28], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 28 } } }, range: [0, 28], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 28 } } }, "declare function foo(): void;": { type: "DeclareFunction", id: { type: "Identifier", name: "foo", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "VoidTypeAnnotation", range: [24, 28], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 28 } } }, rest: null, typeParameters: null, range: [20, 28], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 28 } } }, range: [20, 28], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 28 } } }, range: [17, 28], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 28 } } }, range: [0, 29], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 29 } } }, "declare function foo(): void;": { type: "DeclareFunction", id: { type: "Identifier", name: "foo", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "VoidTypeAnnotation", range: [27, 31], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 31 } } }, rest: null, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [21, 22], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 22 } } }], range: [20, 23], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 23 } } }, range: [20, 31], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 31 } } }, range: [20, 31], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 31 } } }, range: [17, 31], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 31 } } }, range: [0, 32], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 32 } } }, "declare function foo(x: number, y: string): void;": { type: "DeclareFunction", id: { type: "Identifier", name: "foo", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [{ type: "FunctionTypeParam", name: { type: "Identifier", name: "x", range: [21, 22], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 22 } } }, typeAnnotation: { type: "NumberTypeAnnotation", range: [24, 30], loc: { start: { line: 1, column: 24 }, end: { line: 1, column: 30 } } }, optional: false, range: [21, 30], loc: { start: { line: 1, column: 21 }, end: { line: 1, column: 30 } } }, { type: "FunctionTypeParam", name: { type: "Identifier", name: "y", range: [32, 33], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 33 } } }, typeAnnotation: { type: "StringTypeAnnotation", range: [35, 41], loc: { start: { line: 1, column: 35 }, end: { line: 1, column: 41 } } }, optional: false, range: [32, 41], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 41 } } }], returnType: { type: "VoidTypeAnnotation", range: [44, 48], loc: { start: { line: 1, column: 44 }, end: { line: 1, column: 48 } } }, rest: null, typeParameters: null, range: [20, 48], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 48 } } }, range: [20, 48], loc: { start: { line: 1, column: 20 }, end: { line: 1, column: 48 } } }, range: [17, 48], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 48 } } }, range: [0, 49], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 49 } } }, "declare class A {}": { type: "DeclareClass", id: { type: "Identifier", name: "A", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, typeParameters: null, body: { type: "ObjectTypeAnnotation", properties: [], indexers: [], callProperties: [], range: [16, 18], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 18 } } }, "extends": [], range: [0, 18], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 18 } } }, "declare class A extends B { x: number }": { type: "DeclareClass", id: { type: "Identifier", name: "A", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, typeParameters: { type: "TypeParameterDeclaration", params: [{ type: "Identifier", name: "T", range: [16, 17], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 17 } } }], range: [15, 18], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 18 } } }, body: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "x", range: [34, 35], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 35 } } }, value: { type: "NumberTypeAnnotation", range: [37, 43], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 43 } } }, optional: false, range: [34, 43], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 43 } } }], indexers: [], callProperties: [], range: [32, 45], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 45 } } }, "extends": [{ type: "InterfaceExtends", id: { type: "Identifier", name: "B", range: [27, 28], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 28 } } }, typeParameters: { type: "TypeParameterInstantiation", params: [{ type: "GenericTypeAnnotation", id: { type: "Identifier", name: "T", range: [29, 30], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 30 } } }, typeParameters: null, range: [29, 30], loc: { start: { line: 1, column: 29 }, end: { line: 1, column: 30 } } }], range: [28, 31], loc: { start: { line: 1, column: 28 }, end: { line: 1, column: 31 } } }, range: [27, 31], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 31 } } }], range: [0, 45], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 45 } } }, "declare class A { static foo(): number; static x : string }": { type: "DeclareClass", id: { type: "Identifier", name: "A", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, typeParameters: null, body: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "foo", range: [25, 28], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 28 } } }, value: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [32, 38], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 38 } } }, rest: null, typeParameters: null, range: [18, 38], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 38 } } }, optional: false, "static": true, range: [18, 38], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 38 } } }, { type: "ObjectTypeProperty", key: { type: "Identifier", name: "x", range: [47, 48], loc: { start: { line: 1, column: 47 }, end: { line: 1, column: 48 } } }, value: { type: "StringTypeAnnotation", range: [51, 57], loc: { start: { line: 1, column: 51 }, end: { line: 1, column: 57 } } }, optional: false, "static": true, range: [40, 57], loc: { start: { line: 1, column: 40 }, end: { line: 1, column: 57 } } }], indexers: [], callProperties: [], range: [16, 59], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 59 } } }, "extends": [], range: [0, 59], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 59 } } }, '
{
}
': { type: 'ExpressionStatement', start: 0, end: 30, expression: { type: 'XJSElement', start: 0, end: 30, openingElement: { type: 'XJSOpeningElement', start: 0, end: 5, attributes: [], name: { type: 'XJSIdentifier', start: 1, end: 4, name: 'div' }, selfClosing: false }, closingElement: { type: 'XJSClosingElement', start: 24, end: 30, name: { type: 'XJSIdentifier', start: 26, end: 29, name: 'div' } }, children: [{ type: 'XJSExpressionContainer', start: 5, end: 24, expression: { type: 'XJSElement', start: 6, end: 23, openingElement: { type: 'XJSOpeningElement', start: 6, end: 23, attributes: [ { type: 'XJSSpreadAttribute', start: 11, end: 20, argument: { type: 'Identifier', start: 15, end: 19, name: 'test' } } ], name: { type: 'XJSIdentifier', start: 7, end: 10, name: 'div' }, selfClosing: true }, closingElement: null, children: [] } }] } }, '
{ {a} }
': { type: "ExpressionStatement", start: 0, end: 18, expression: { type: "XJSElement", start: 0, end: 18, openingElement: { type: "XJSOpeningElement", start: 0, end: 5, attributes: [], name: { type: "XJSIdentifier", start: 1, end: 4, name: "div" }, selfClosing: false }, closingElement: { type: "XJSClosingElement", start: 12, end: 18, name: { type: "XJSIdentifier", start: 14, end: 17, name: "div" } }, children: [{ type: "XJSExpressionContainer", start: 5, end: 12, expression: { type: "ObjectExpression", start: 7, end: 10, properties: [{ type: "Property", start: 8, end: 9, method: false, shorthand: true, computed: false, key: { type: "Identifier", start: 8, end: 9, name: "a" }, kind: "init", value: { type: "Identifier", start: 8, end: 9, name: "a" } }] } }] } }, "declare class A { static [ indexer: number]: string }": { type: "DeclareClass", id: { type: "Identifier", name: "A", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, typeParameters: null, body: { type: "ObjectTypeAnnotation", properties: [], indexers: [{ type: "ObjectTypeIndexer", id: { type: "Identifier", name: "indexer", range: [27, 34], loc: { start: { line: 1, column: 27 }, end: { line: 1, column: 34 } } }, key: { type: "NumberTypeAnnotation", range: [36, 42], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 42 } } }, value: { type: "StringTypeAnnotation", range: [45, 51], loc: { start: { line: 1, column: 45 }, end: { line: 1, column: 51 } } }, "static": true, range: [18, 51], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 51 } } }], callProperties: [], range: [16, 53], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 53 } } }, "extends": [], range: [0, 53], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 53 } } }, "declare class A { static () : number }": { type: "DeclareClass", id: { type: "Identifier", name: "A", range: [14, 15], loc: { start: { line: 1, column: 14 }, end: { line: 1, column: 15 } } }, typeParameters: null, body: { type: "ObjectTypeAnnotation", properties: [], indexers: [], callProperties: [{ type: "ObjectTypeCallProperty", value: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [30, 36], loc: { start: { line: 1, column: 30 }, end: { line: 1, column: 36 } } }, rest: null, typeParameters: null, range: [25, 36], loc: { start: { line: 1, column: 25 }, end: { line: 1, column: 36 } } }, "static": true, range: [18, 36], loc: { start: { line: 1, column: 18 }, end: { line: 1, column: 36 } } }], range: [16, 38], loc: { start: { line: 1, column: 16 }, end: { line: 1, column: 38 } } }, "extends": [], range: [0, 38], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 38 } } }, }, "Declare Module": { "declare module A {}": { type: "DeclareModule", id: { type: "Identifier", name: "A", range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }, body: { type: "BlockStatement", body: [], range: [17, 19], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 19 } } }, range: [0, 19], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 19 } } }, 'declare module "./a/b.js" {}': { type: "DeclareModule", id: { type: "Literal", value: "./a/b.js", raw: '"./a/b.js"', range: [15, 25], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 25 } } }, body: { type: "BlockStatement", body: [], range: [26, 28], loc: { start: { line: 1, column: 26 }, end: { line: 1, column: 28 } } }, range: [0, 28], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 28 } } }, "declare module A { declare var x: number; }": { type: "DeclareModule", id: { type: "Identifier", name: "A", range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }, body: { type: "BlockStatement", body: [{ type: "DeclareVariable", id: { type: "Identifier", name: "x", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "NumberTypeAnnotation", range: [34, 40], loc: { start: { line: 1, column: 34 }, end: { line: 1, column: 40 } } }, range: [32, 40], loc: { start: { line: 1, column: 32 }, end: { line: 1, column: 40 } } }, range: [31, 40], loc: { start: { line: 1, column: 31 }, end: { line: 1, column: 40 } } }, range: [19, 41], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 41 } } }], range: [17, 43], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 43 } } }, range: [0, 43], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 43 } } }, "declare module A { declare function foo(): number; }": { type: "DeclareModule", id: { type: "Identifier", name: "A", range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }, body: { type: "BlockStatement", body: [{ type: "DeclareFunction", id: { type: "Identifier", name: "foo", typeAnnotation: { type: "TypeAnnotation", typeAnnotation: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [43, 49], loc: { start: { line: 1, column: 43 }, end: { line: 1, column: 49 } } }, rest: null, typeParameters: null, range: [39, 49], loc: { start: { line: 1, column: 39 }, end: { line: 1, column: 49 } } }, range: [39, 49], loc: { start: { line: 1, column: 39 }, end: { line: 1, column: 49 } } }, range: [36, 49], loc: { start: { line: 1, column: 36 }, end: { line: 1, column: 49 } } }, range: [19, 50], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 50 } } }], range: [17, 52], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 52 } } }, range: [0, 52], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 52 } } }, "declare module A { declare class B { foo(): number; } }": { type: "DeclareModule", id: { type: "Identifier", name: "A", range: [15, 16], loc: { start: { line: 1, column: 15 }, end: { line: 1, column: 16 } } }, body: { type: "BlockStatement", body: [{ type: "DeclareClass", id: { type: "Identifier", name: "B", range: [33, 34], loc: { start: { line: 1, column: 33 }, end: { line: 1, column: 34 } } }, typeParameters: null, body: { type: "ObjectTypeAnnotation", properties: [{ type: "ObjectTypeProperty", key: { type: "Identifier", name: "foo", range: [37, 40], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 40 } } }, value: { type: "FunctionTypeAnnotation", params: [], returnType: { type: "NumberTypeAnnotation", range: [44, 50], loc: { start: { line: 1, column: 44 }, end: { line: 1, column: 50 } } }, rest: null, typeParameters: null, range: [37, 50], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 50 } } }, optional: false, range: [37, 50], loc: { start: { line: 1, column: 37 }, end: { line: 1, column: 50 } } }], indexers: [], callProperties: [], range: [35, 53], loc: { start: { line: 1, column: 35 }, end: { line: 1, column: 53 } } }, "extends": [], range: [19, 53], loc: { start: { line: 1, column: 19 }, end: { line: 1, column: 53 } } }], range: [17, 55], loc: { start: { line: 1, column: 17 }, end: { line: 1, column: 55 } } }, range: [0, 55], loc: { start: { line: 1, column: 0 }, end: { line: 1, column: 55 } } } } }; if (typeof exports !== "undefined") { var test = require("./driver.js").test; } for (var ns in fbTestFixture) { ns = fbTestFixture[ns]; for (var code in ns) { test(code, { type: "Program", body: [ns[code]] }, { ecmaVersion: 6, locations: true, ranges: true }); } }