From 3e4a0ed0d615fd22a2f28c7c8af6179673e195f8 Mon Sep 17 00:00:00 2001 From: Brad Zacher Date: Mon, 16 Nov 2020 19:25:02 -0800 Subject: [PATCH] fix(typescript-estree): parseWithNodeMaps returning empty maps (#2773) --- packages/typescript-estree/src/parser.ts | 16 +++++++++---- .../typescript-estree/tests/lib/parse.test.ts | 23 +++++++++++++++++++ 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/packages/typescript-estree/src/parser.ts b/packages/typescript-estree/src/parser.ts index 45dfd18cef7..3dc22e262c8 100644 --- a/packages/typescript-estree/src/parser.ts +++ b/packages/typescript-estree/src/parser.ts @@ -331,13 +331,14 @@ function parse( code: string, options?: T, ): AST { - const { ast } = parseWithNodeMaps(code, options); + const { ast } = parseWithNodeMapsInternal(code, options, false); return ast; } -function parseWithNodeMaps( +function parseWithNodeMapsInternal( code: string, - options?: T, + options: T | undefined, + shouldPreserveNodeMaps: boolean, ): ParseWithNodeMapsResult { /** * Reset the parse configuration @@ -380,7 +381,7 @@ function parseWithNodeMaps( /** * Convert the TypeScript AST to an ESTree-compatible one */ - const { estree, astMaps } = astConverter(ast, extra, false); + const { estree, astMaps } = astConverter(ast, extra, shouldPreserveNodeMaps); return { ast: estree as AST, @@ -389,6 +390,13 @@ function parseWithNodeMaps( }; } +function parseWithNodeMaps( + code: string, + options?: T, +): ParseWithNodeMapsResult { + return parseWithNodeMapsInternal(code, options, true); +} + function parseAndGenerateServices( code: string, options: T, diff --git a/packages/typescript-estree/tests/lib/parse.test.ts b/packages/typescript-estree/tests/lib/parse.test.ts index a1c68ce7582..33b393670d0 100644 --- a/packages/typescript-estree/tests/lib/parse.test.ts +++ b/packages/typescript-estree/tests/lib/parse.test.ts @@ -21,6 +21,29 @@ describe('parseWithNodeMaps()', () => { parser.parse(code), ); }); + + it('should simple code', () => { + const result = parser.parseWithNodeMaps('1;'); + expect(result.ast).toMatchInlineSnapshot(` + Object { + "body": Array [ + Object { + "expression": Object { + "raw": "1", + "type": "Literal", + "value": 1, + }, + "type": "ExpressionStatement", + }, + ], + "sourceType": "script", + "type": "Program", + } + `); + const tsNode = result.esTreeNodeToTSNodeMap.get(result.ast.body[0]); + expect(tsNode).toBeDefined(); + expect(result.tsNodeToESTreeNodeMap.get(tsNode)).toBeDefined(); + }); }); describe('modules', () => {