diff --git a/src/convert.ts b/src/convert.ts index e64a240..584d17f 100644 --- a/src/convert.ts +++ b/src/convert.ts @@ -1435,34 +1435,33 @@ export default function convert(config: ConvertConfig): ESTreeNode | null { } case SyntaxKind.Parameter: { - let parameter; + let parameter: ESTreeNode; if (node.dotDotDotToken) { - parameter = convertChild(node.name); Object.assign(result, { type: AST_NODE_TYPES.RestElement, - argument: parameter + argument: convertChild(node.name) }); + parameter = result; } else if (node.initializer) { - parameter = convertChild(node.name); + parameter = convertChild(node.name)!; Object.assign(result, { type: AST_NODE_TYPES.AssignmentPattern, left: parameter, right: convertChild(node.initializer) }); } else { - parameter = convert({ + parameter = result = convert({ node: node.name, parent, ast, additionalOptions - }); - (result as any) = parameter; + })!; } if (node.type) { - parameter!.typeAnnotation = convertTypeAnnotation(node.type); - fixTypeAnnotationParentLocation(parameter!); + parameter.typeAnnotation = convertTypeAnnotation(node.type); + fixTypeAnnotationParentLocation(parameter); } if (node.questionToken) { diff --git a/tests/ast-alignment/fixtures-to-test.ts b/tests/ast-alignment/fixtures-to-test.ts index 02e3665..91a1bc3 100644 --- a/tests/ast-alignment/fixtures-to-test.ts +++ b/tests/ast-alignment/fixtures-to-test.ts @@ -351,6 +351,7 @@ tester.addFixturePatternConfig('typescript/basics', { 'class-with-implements-generic', 'class-with-implements', 'class-with-extends-and-implements', + 'class-with-mixin', /** * Babel error: parameterName is not included into range of TSTypeAnnotation * TODO: report it to babel @@ -363,8 +364,6 @@ tester.addFixturePatternConfig('typescript/basics', { /** * Other major AST differences (e.g. fundamentally different node types) */ - 'class-with-mixin', - 'function-with-types-assignation', 'interface-extends-multiple', 'interface-extends', 'interface-type-parameters', @@ -499,8 +498,6 @@ tester.addFixturePatternConfig('typescript/types', { /** * AST difference */ - 'function-with-rest', - 'constructor-with-rest', 'index-signature', 'index-signature-readonly', 'literal-number-negative' diff --git a/tests/lib/__snapshots__/typescript.ts.snap b/tests/lib/__snapshots__/typescript.ts.snap index 0bbde7f..47fd91d 100644 --- a/tests/lib/__snapshots__/typescript.ts.snap +++ b/tests/lib/__snapshots__/typescript.ts.snap @@ -13788,7 +13788,7 @@ Object { "argument": Object { "loc": Object { "end": Object { - "column": 41, + "column": 34, "line": 9, }, "start": Object { @@ -13799,60 +13799,9 @@ Object { "name": "args", "range": Array [ 188, - 199, + 192, ], "type": "Identifier", - "typeAnnotation": Object { - "loc": Object { - "end": Object { - "column": 41, - "line": 9, - }, - "start": Object { - "column": 34, - "line": 9, - }, - }, - "range": Array [ - 192, - 199, - ], - "type": "TSTypeAnnotation", - "typeAnnotation": Object { - "elementType": Object { - "loc": Object { - "end": Object { - "column": 39, - "line": 9, - }, - "start": Object { - "column": 36, - "line": 9, - }, - }, - "range": Array [ - 194, - 197, - ], - "type": "TSAnyKeyword", - }, - "loc": Object { - "end": Object { - "column": 41, - "line": 9, - }, - "start": Object { - "column": 36, - "line": 9, - }, - }, - "range": Array [ - 194, - 199, - ], - "type": "TSArrayType", - }, - }, }, "loc": Object { "end": Object { @@ -13869,6 +13818,57 @@ Object { 199, ], "type": "RestElement", + "typeAnnotation": Object { + "loc": Object { + "end": Object { + "column": 41, + "line": 9, + }, + "start": Object { + "column": 34, + "line": 9, + }, + }, + "range": Array [ + 192, + 199, + ], + "type": "TSTypeAnnotation", + "typeAnnotation": Object { + "elementType": Object { + "loc": Object { + "end": Object { + "column": 39, + "line": 9, + }, + "start": Object { + "column": 36, + "line": 9, + }, + }, + "range": Array [ + 194, + 197, + ], + "type": "TSAnyKeyword", + }, + "loc": Object { + "end": Object { + "column": 41, + "line": 9, + }, + "start": Object { + "column": 36, + "line": 9, + }, + }, + "range": Array [ + 194, + 199, + ], + "type": "TSArrayType", + }, + }, }, ], "range": Array [ @@ -38040,7 +38040,7 @@ Object { "argument": Object { "loc": Object { "end": Object { - "column": 69, + "column": 55, "line": 1, }, "start": Object { @@ -38051,9 +38051,41 @@ Object { "name": "args", "range": Array [ 51, - 69, + 55, ], "type": "Identifier", + }, + "loc": Object { + "end": Object { + "column": 69, + "line": 1, + }, + "start": Object { + "column": 48, + "line": 1, + }, + }, + "range": Array [ + 48, + 69, + ], + "type": "RestElement", + "typeAnnotation": Object { + "loc": Object { + "end": Object { + "column": 69, + "line": 1, + }, + "start": Object { + "column": 55, + "line": 1, + }, + }, + "range": Array [ + 55, + 69, + ], + "type": "TSTypeAnnotation", "typeAnnotation": Object { "loc": Object { "end": Object { @@ -38061,19 +38093,19 @@ Object { "line": 1, }, "start": Object { - "column": 55, + "column": 56, "line": 1, }, }, "range": Array [ - 55, + 56, 69, ], - "type": "TSTypeAnnotation", - "typeAnnotation": Object { + "type": "TSTypeReference", + "typeName": Object { "loc": Object { "end": Object { - "column": 69, + "column": 61, "line": 1, }, "start": Object { @@ -38081,83 +38113,51 @@ Object { "line": 1, }, }, + "name": "Array", "range": Array [ 56, - 69, + 61, ], - "type": "TSTypeReference", - "typeName": Object { - "loc": Object { - "end": Object { - "column": 61, - "line": 1, - }, - "start": Object { - "column": 56, - "line": 1, - }, + "type": "Identifier", + }, + "typeParameters": Object { + "loc": Object { + "end": Object { + "column": 69, + "line": 1, }, - "name": "Array", - "range": Array [ - 56, - 61, - ], - "type": "Identifier", - }, - "typeParameters": Object { - "loc": Object { - "end": Object { - "column": 69, - "line": 1, - }, - "start": Object { - "column": 61, - "line": 1, - }, + "start": Object { + "column": 61, + "line": 1, }, - "params": Array [ - Object { - "loc": Object { - "end": Object { - "column": 68, - "line": 1, - }, - "start": Object { - "column": 62, - "line": 1, - }, + }, + "params": Array [ + Object { + "loc": Object { + "end": Object { + "column": 68, + "line": 1, + }, + "start": Object { + "column": 62, + "line": 1, }, - "range": Array [ - 62, - 68, - ], - "type": "TSStringKeyword", }, - ], - "range": Array [ - 61, - 69, - ], - "type": "TSTypeParameterInstantiation", - }, + "range": Array [ + 62, + 68, + ], + "type": "TSStringKeyword", + }, + ], + "range": Array [ + 61, + 69, + ], + "type": "TSTypeParameterInstantiation", }, }, }, - "loc": Object { - "end": Object { - "column": 69, - "line": 1, - }, - "start": Object { - "column": 48, - "line": 1, - }, - }, - "range": Array [ - 48, - 69, - ], - "type": "RestElement", }, ], "range": Array [ @@ -95719,7 +95719,7 @@ Object { "argument": Object { "loc": Object { "end": Object { - "column": 26, + "column": 16, "line": 1, }, "start": Object { @@ -95730,60 +95730,9 @@ Object { "name": "a", "range": Array [ 15, - 26, + 16, ], "type": "Identifier", - "typeAnnotation": Object { - "loc": Object { - "end": Object { - "column": 26, - "line": 1, - }, - "start": Object { - "column": 16, - "line": 1, - }, - }, - "range": Array [ - 16, - 26, - ], - "type": "TSTypeAnnotation", - "typeAnnotation": Object { - "elementType": Object { - "loc": Object { - "end": Object { - "column": 24, - "line": 1, - }, - "start": Object { - "column": 18, - "line": 1, - }, - }, - "range": Array [ - 18, - 24, - ], - "type": "TSNumberKeyword", - }, - "loc": Object { - "end": Object { - "column": 26, - "line": 1, - }, - "start": Object { - "column": 18, - "line": 1, - }, - }, - "range": Array [ - 18, - 26, - ], - "type": "TSArrayType", - }, - }, }, "loc": Object { "end": Object { @@ -95800,6 +95749,57 @@ Object { 26, ], "type": "RestElement", + "typeAnnotation": Object { + "loc": Object { + "end": Object { + "column": 26, + "line": 1, + }, + "start": Object { + "column": 16, + "line": 1, + }, + }, + "range": Array [ + 16, + 26, + ], + "type": "TSTypeAnnotation", + "typeAnnotation": Object { + "elementType": Object { + "loc": Object { + "end": Object { + "column": 24, + "line": 1, + }, + "start": Object { + "column": 18, + "line": 1, + }, + }, + "range": Array [ + 18, + 24, + ], + "type": "TSNumberKeyword", + }, + "loc": Object { + "end": Object { + "column": 26, + "line": 1, + }, + "start": Object { + "column": 18, + "line": 1, + }, + }, + "range": Array [ + 18, + 26, + ], + "type": "TSArrayType", + }, + }, }, ], "range": Array [ @@ -97717,7 +97717,7 @@ Object { "argument": Object { "loc": Object { "end": Object { - "column": 22, + "column": 12, "line": 1, }, "start": Object { @@ -97728,60 +97728,9 @@ Object { "name": "a", "range": Array [ 11, - 22, + 12, ], "type": "Identifier", - "typeAnnotation": Object { - "loc": Object { - "end": Object { - "column": 22, - "line": 1, - }, - "start": Object { - "column": 12, - "line": 1, - }, - }, - "range": Array [ - 12, - 22, - ], - "type": "TSTypeAnnotation", - "typeAnnotation": Object { - "elementType": Object { - "loc": Object { - "end": Object { - "column": 20, - "line": 1, - }, - "start": Object { - "column": 14, - "line": 1, - }, - }, - "range": Array [ - 14, - 20, - ], - "type": "TSNumberKeyword", - }, - "loc": Object { - "end": Object { - "column": 22, - "line": 1, - }, - "start": Object { - "column": 14, - "line": 1, - }, - }, - "range": Array [ - 14, - 22, - ], - "type": "TSArrayType", - }, - }, }, "loc": Object { "end": Object { @@ -97798,6 +97747,57 @@ Object { 22, ], "type": "RestElement", + "typeAnnotation": Object { + "loc": Object { + "end": Object { + "column": 22, + "line": 1, + }, + "start": Object { + "column": 12, + "line": 1, + }, + }, + "range": Array [ + 12, + 22, + ], + "type": "TSTypeAnnotation", + "typeAnnotation": Object { + "elementType": Object { + "loc": Object { + "end": Object { + "column": 20, + "line": 1, + }, + "start": Object { + "column": 14, + "line": 1, + }, + }, + "range": Array [ + 14, + 20, + ], + "type": "TSNumberKeyword", + }, + "loc": Object { + "end": Object { + "column": 22, + "line": 1, + }, + "start": Object { + "column": 14, + "line": 1, + }, + }, + "range": Array [ + 14, + 22, + ], + "type": "TSArrayType", + }, + }, }, ], "range": Array [