From e14c30612c017697471139db40a690a9f05100f0 Mon Sep 17 00:00:00 2001 From: M4rk9696 Date: Sat, 13 Jul 2019 17:21:25 +0530 Subject: [PATCH 1/6] feat(typescript-estree): add range and loc in ConvertorOptions --- .../typescript-estree/src/ast-converter.ts | 2 ++ packages/typescript-estree/src/convert.ts | 2 ++ .../typescript-estree/tests/lib/convert.ts | 18 ++++++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/packages/typescript-estree/src/ast-converter.ts b/packages/typescript-estree/src/ast-converter.ts index fffb9ea15cfd..e1c5c0beb7cb 100644 --- a/packages/typescript-estree/src/ast-converter.ts +++ b/packages/typescript-estree/src/ast-converter.ts @@ -28,6 +28,8 @@ export function astConverter( errorOnUnknownASTType: extra.errorOnUnknownASTType || false, useJSXTextNode: extra.useJSXTextNode || false, shouldPreserveNodeMaps, + range: extra.range || false, + loc: extra.loc || false, }); const estree = instance.convertProgram(); diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index 67ca0be79b89..cc65534338ae 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -30,6 +30,8 @@ interface ConverterOptions { errorOnUnknownASTType: boolean; useJSXTextNode: boolean; shouldPreserveNodeMaps: boolean; + range: boolean; + loc: boolean; } /** diff --git a/packages/typescript-estree/tests/lib/convert.ts b/packages/typescript-estree/tests/lib/convert.ts index 2a275c53fb4c..3210cb7182e7 100644 --- a/packages/typescript-estree/tests/lib/convert.ts +++ b/packages/typescript-estree/tests/lib/convert.ts @@ -21,6 +21,8 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: false, + range: true, + loc: true, }); expect(instance.convertProgram()).toMatchSnapshot(); }); @@ -32,6 +34,8 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: false, + range: true, + loc: true, }); expect((instance as any).deeplyCopy(ast.statements[0])).toMatchSnapshot(); }); @@ -43,6 +47,8 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: false, + range: true, + loc: true, }); expect((instance as any).deeplyCopy(ast.statements[0])).toMatchSnapshot(); }); @@ -54,6 +60,8 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: false, + range: true, + loc: true, }); expect( (instance as any).deeplyCopy((ast.statements[0] as any).expression), @@ -67,6 +75,8 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: false, + range: true, + loc: true, }); expect((instance as any).deeplyCopy(ast)).toMatchSnapshot(); }); @@ -78,6 +88,8 @@ describe('convert', () => { errorOnUnknownASTType: true, useJSXTextNode: false, shouldPreserveNodeMaps: false, + range: true, + loc: true, }); expect(() => instance.convertProgram()).toThrow( 'Unknown AST_NODE_TYPE: "TSJSDocNullableType"', @@ -96,6 +108,8 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: true, + range: true, + loc: true, }); instance.convertProgram(); const maps = instance.getASTMaps(); @@ -130,6 +144,8 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: true, + range: true, + loc: true, }); instance.convertProgram(); const maps = instance.getASTMaps(); @@ -163,6 +179,8 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: true, + range: true, + loc: true, }); const program = instance.convertProgram(); const maps = instance.getASTMaps(); From c4512c904e397a460d2765331d359a7888145665 Mon Sep 17 00:00:00 2001 From: M4rk9696 Date: Sun, 14 Jul 2019 00:57:12 +0530 Subject: [PATCH 2/6] fix(typescript-estree): options range loc being always true --- packages/typescript-estree/src/convert.ts | 49 +- .../tests/lib/__snapshots__/convert.ts.snap | 574 ++++++++++++++++++ .../typescript-estree/tests/lib/convert.ts | 42 ++ 3 files changed, 649 insertions(+), 16 deletions(-) diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index cc65534338ae..d952d0124709 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -83,6 +83,16 @@ export class Converter { return this.converter(this.ast) as TSESTree.Program; } + private applyExtraOptions(node: TSESTree.Node): any { + if (!this.options.range) { + delete node.range; + } + if (!this.options.loc) { + delete node.loc; + } + return node; + } + /** * Converts a TypeScript node into an ESTree node. * @param node the child ts.Node @@ -113,7 +123,8 @@ export class Converter { this.allowPattern = allowPattern; } - const result = this.convertNode(node as TSNode, parent || node.parent); + let result = this.convertNode(node as TSNode, parent || node.parent); + if (result) result = this.applyExtraOptions(result); this.registerTSNodeInNodeMap(node, result); @@ -889,11 +900,13 @@ export class Converter { return this.createNode(node, { type: AST_NODE_TYPES.Property, key: this.convertChild(node.name), - value: this.createNode(node, { - type: AST_NODE_TYPES.AssignmentPattern, - left: this.convertPattern(node.name), - right: this.convertChild(node.objectAssignmentInitializer), - }), + value: this.applyExtraOptions( + this.createNode(node, { + type: AST_NODE_TYPES.AssignmentPattern, + left: this.convertPattern(node.name), + right: this.convertChild(node.objectAssignmentInitializer), + }), + ), computed: false, method: false, shorthand: true, @@ -1424,11 +1437,13 @@ export class Converter { >(node, { type: classNodeType, id: this.convertChild(node.name), - body: this.createNode(node, { - type: AST_NODE_TYPES.ClassBody, - body: [], - range: [node.members.pos - 1, node.end], - }), + body: this.applyExtraOptions( + this.createNode(node, { + type: AST_NODE_TYPES.ClassBody, + body: [], + range: [node.members.pos - 1, node.end], + }), + ), superClass: superClass && superClass.types[0] ? this.convertChild(superClass.types[0].expression) @@ -2382,11 +2397,13 @@ export class Converter { const interfaceHeritageClauses = node.heritageClauses || []; const result = this.createNode(node, { type: AST_NODE_TYPES.TSInterfaceDeclaration, - body: this.createNode(node, { - type: AST_NODE_TYPES.TSInterfaceBody, - body: node.members.map(member => this.convertChild(member)), - range: [node.members.pos - 1, node.end], - }), + body: this.applyExtraOptions( + this.createNode(node, { + type: AST_NODE_TYPES.TSInterfaceBody, + body: node.members.map(member => this.convertChild(member)), + range: [node.members.pos - 1, node.end], + }), + ), id: this.convertChild(node.name), }); diff --git a/packages/typescript-estree/tests/lib/__snapshots__/convert.ts.snap b/packages/typescript-estree/tests/lib/__snapshots__/convert.ts.snap index b7266a75dd07..6cde270a580f 100644 --- a/packages/typescript-estree/tests/lib/__snapshots__/convert.ts.snap +++ b/packages/typescript-estree/tests/lib/__snapshots__/convert.ts.snap @@ -787,3 +787,577 @@ Object { }, } `; + +exports[`convert should not contain loc when disabled 1`] = ` +Object { + "body": Array [ + Object { + "directive": "test", + "expression": Object { + "range": Array [ + 7, + 13, + ], + "raw": "'test'", + "type": "Literal", + "value": "test", + }, + "range": Array [ + 7, + 14, + ], + "type": "ExpressionStatement", + }, + Object { + "expression": Object { + "range": Array [ + 21, + 22, + ], + "raw": "2", + "type": "Literal", + "value": 2, + }, + "range": Array [ + 21, + 23, + ], + "type": "ExpressionStatement", + }, + Object { + "body": Object { + "body": Array [], + "range": Array [ + 40, + 42, + ], + "type": "ClassBody", + }, + "id": Object { + "name": "foo", + "range": Array [ + 36, + 39, + ], + "type": "Identifier", + }, + "range": Array [ + 30, + 42, + ], + "superClass": null, + "type": "ClassDeclaration", + }, + Object { + "range": Array [ + 42, + 43, + ], + "type": "EmptyStatement", + }, + Object { + "id": Object { + "name": "bar", + "range": Array [ + 55, + 58, + ], + "type": "Identifier", + }, + "range": Array [ + 50, + 64, + ], + "type": "TSTypeAliasDeclaration", + "typeAnnotation": Object { + "members": Array [], + "range": Array [ + 61, + 63, + ], + "type": "TSTypeLiteral", + }, + }, + Object { + "declarations": Array [ + Object { + "id": Object { + "name": "fn", + "range": Array [ + 77, + 79, + ], + "type": "Identifier", + }, + "init": Object { + "async": false, + "body": Object { + "body": Array [ + Object { + "declarations": Array [ + Object { + "id": Object { + "name": "x", + "range": Array [ + 104, + 105, + ], + "type": "Identifier", + }, + "init": Object { + "range": Array [ + 108, + 109, + ], + "raw": "2", + "type": "Literal", + "value": 2, + }, + "range": Array [ + 104, + 109, + ], + "type": "VariableDeclarator", + }, + ], + "kind": "const", + "range": Array [ + 98, + 110, + ], + "type": "VariableDeclaration", + }, + Object { + "expression": Object { + "left": Object { + "name": "x", + "range": Array [ + 119, + 120, + ], + "type": "Identifier", + }, + "operator": "+", + "range": Array [ + 119, + 124, + ], + "right": Object { + "range": Array [ + 123, + 124, + ], + "raw": "5", + "type": "Literal", + "value": 5, + }, + "type": "BinaryExpression", + }, + "range": Array [ + 119, + 125, + ], + "type": "ExpressionStatement", + }, + ], + "range": Array [ + 88, + 133, + ], + "type": "BlockStatement", + }, + "expression": false, + "generator": false, + "id": null, + "params": Array [], + "range": Array [ + 82, + 133, + ], + "type": "ArrowFunctionExpression", + }, + "range": Array [ + 77, + 133, + ], + "type": "VariableDeclarator", + }, + ], + "kind": "const", + "range": Array [ + 71, + 134, + ], + "type": "VariableDeclaration", + }, + ], + "range": Array [ + 7, + 139, + ], + "sourceType": "script", + "type": "Program", +} +`; + +exports[`convert should not contain range when disabled 1`] = ` +Object { + "body": Array [ + Object { + "directive": "test", + "expression": Object { + "loc": Object { + "end": Object { + "column": 12, + "line": 2, + }, + "start": Object { + "column": 6, + "line": 2, + }, + }, + "raw": "'test'", + "type": "Literal", + "value": "test", + }, + "loc": Object { + "end": Object { + "column": 13, + "line": 2, + }, + "start": Object { + "column": 6, + "line": 2, + }, + }, + "type": "ExpressionStatement", + }, + Object { + "expression": Object { + "loc": Object { + "end": Object { + "column": 7, + "line": 3, + }, + "start": Object { + "column": 6, + "line": 3, + }, + }, + "raw": "2", + "type": "Literal", + "value": 2, + }, + "loc": Object { + "end": Object { + "column": 8, + "line": 3, + }, + "start": Object { + "column": 6, + "line": 3, + }, + }, + "type": "ExpressionStatement", + }, + Object { + "body": Object { + "body": Array [], + "loc": Object { + "end": Object { + "column": 18, + "line": 4, + }, + "start": Object { + "column": 16, + "line": 4, + }, + }, + "type": "ClassBody", + }, + "id": Object { + "loc": Object { + "end": Object { + "column": 15, + "line": 4, + }, + "start": Object { + "column": 12, + "line": 4, + }, + }, + "name": "foo", + "type": "Identifier", + }, + "loc": Object { + "end": Object { + "column": 18, + "line": 4, + }, + "start": Object { + "column": 6, + "line": 4, + }, + }, + "superClass": null, + "type": "ClassDeclaration", + }, + Object { + "loc": Object { + "end": Object { + "column": 19, + "line": 4, + }, + "start": Object { + "column": 18, + "line": 4, + }, + }, + "type": "EmptyStatement", + }, + Object { + "id": Object { + "loc": Object { + "end": Object { + "column": 14, + "line": 5, + }, + "start": Object { + "column": 11, + "line": 5, + }, + }, + "name": "bar", + "type": "Identifier", + }, + "loc": Object { + "end": Object { + "column": 20, + "line": 5, + }, + "start": Object { + "column": 6, + "line": 5, + }, + }, + "type": "TSTypeAliasDeclaration", + "typeAnnotation": Object { + "loc": Object { + "end": Object { + "column": 19, + "line": 5, + }, + "start": Object { + "column": 17, + "line": 5, + }, + }, + "members": Array [], + "type": "TSTypeLiteral", + }, + }, + Object { + "declarations": Array [ + Object { + "id": Object { + "loc": Object { + "end": Object { + "column": 14, + "line": 6, + }, + "start": Object { + "column": 12, + "line": 6, + }, + }, + "name": "fn", + "type": "Identifier", + }, + "init": Object { + "async": false, + "body": Object { + "body": Array [ + Object { + "declarations": Array [ + Object { + "id": Object { + "loc": Object { + "end": Object { + "column": 15, + "line": 7, + }, + "start": Object { + "column": 14, + "line": 7, + }, + }, + "name": "x", + "type": "Identifier", + }, + "init": Object { + "loc": Object { + "end": Object { + "column": 19, + "line": 7, + }, + "start": Object { + "column": 18, + "line": 7, + }, + }, + "raw": "2", + "type": "Literal", + "value": 2, + }, + "loc": Object { + "end": Object { + "column": 19, + "line": 7, + }, + "start": Object { + "column": 14, + "line": 7, + }, + }, + "type": "VariableDeclarator", + }, + ], + "kind": "const", + "loc": Object { + "end": Object { + "column": 20, + "line": 7, + }, + "start": Object { + "column": 8, + "line": 7, + }, + }, + "type": "VariableDeclaration", + }, + Object { + "expression": Object { + "left": Object { + "loc": Object { + "end": Object { + "column": 9, + "line": 8, + }, + "start": Object { + "column": 8, + "line": 8, + }, + }, + "name": "x", + "type": "Identifier", + }, + "loc": Object { + "end": Object { + "column": 13, + "line": 8, + }, + "start": Object { + "column": 8, + "line": 8, + }, + }, + "operator": "+", + "right": Object { + "loc": Object { + "end": Object { + "column": 13, + "line": 8, + }, + "start": Object { + "column": 12, + "line": 8, + }, + }, + "raw": "5", + "type": "Literal", + "value": 5, + }, + "type": "BinaryExpression", + }, + "loc": Object { + "end": Object { + "column": 14, + "line": 8, + }, + "start": Object { + "column": 8, + "line": 8, + }, + }, + "type": "ExpressionStatement", + }, + ], + "loc": Object { + "end": Object { + "column": 7, + "line": 9, + }, + "start": Object { + "column": 23, + "line": 6, + }, + }, + "type": "BlockStatement", + }, + "expression": false, + "generator": false, + "id": null, + "loc": Object { + "end": Object { + "column": 7, + "line": 9, + }, + "start": Object { + "column": 17, + "line": 6, + }, + }, + "params": Array [], + "type": "ArrowFunctionExpression", + }, + "loc": Object { + "end": Object { + "column": 7, + "line": 9, + }, + "start": Object { + "column": 12, + "line": 6, + }, + }, + "type": "VariableDeclarator", + }, + ], + "kind": "const", + "loc": Object { + "end": Object { + "column": 8, + "line": 9, + }, + "start": Object { + "column": 6, + "line": 6, + }, + }, + "type": "VariableDeclaration", + }, + ], + "loc": Object { + "end": Object { + "column": 4, + "line": 10, + }, + "start": Object { + "column": 6, + "line": 2, + }, + }, + "sourceType": "script", + "type": "Program", +} +`; diff --git a/packages/typescript-estree/tests/lib/convert.ts b/packages/typescript-estree/tests/lib/convert.ts index 3210cb7182e7..af7dda9fe114 100644 --- a/packages/typescript-estree/tests/lib/convert.ts +++ b/packages/typescript-estree/tests/lib/convert.ts @@ -206,4 +206,46 @@ describe('convert', () => { ); checkMaps(ast); }); + + it('should not contain range when disabled', () => { + const ast = convertCode(` + 'test'; + 2; + class foo {}; + type bar = {}; + const fn = () => { + const x = 2; + x + 5; + }; + `); + const instance = new Converter(ast, { + errorOnUnknownASTType: false, + useJSXTextNode: false, + shouldPreserveNodeMaps: false, + range: false, + loc: true, + }); + expect(instance.convertProgram()).toMatchSnapshot(); + }); + + it('should not contain loc when disabled', () => { + const ast = convertCode(` + 'test'; + 2; + class foo {}; + type bar = {}; + const fn = () => { + const x = 2; + x + 5; + }; + `); + const instance = new Converter(ast, { + errorOnUnknownASTType: false, + useJSXTextNode: false, + shouldPreserveNodeMaps: false, + range: true, + loc: false, + }); + expect(instance.convertProgram()).toMatchSnapshot(); + }); }); From 5c5c7ab627895f63370d2b2773615292d2974033 Mon Sep 17 00:00:00 2001 From: M4rk9696 Date: Sun, 14 Jul 2019 19:39:13 +0530 Subject: [PATCH 3/6] chore(typescript-estree): correct incorrect lint --- packages/typescript-estree/src/convert.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index d952d0124709..d506052fa907 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -124,7 +124,9 @@ export class Converter { } let result = this.convertNode(node as TSNode, parent || node.parent); - if (result) result = this.applyExtraOptions(result); + if (result) { + result = this.applyExtraOptions(result); + } this.registerTSNodeInNodeMap(node, result); From cecc0a763a7d1842ecf3a6cd3fbbea296051c5a0 Mon Sep 17 00:00:00 2001 From: M4rk9696 Date: Tue, 29 Oct 2019 18:16:16 +0530 Subject: [PATCH 4/6] chore: Revert previous approach --- .../typescript-estree/src/ast-converter.ts | 2 - packages/typescript-estree/src/convert.ts | 53 +- .../tests/lib/__snapshots__/convert.ts.snap | 574 ------------------ .../typescript-estree/tests/lib/convert.ts | 59 -- 4 files changed, 16 insertions(+), 672 deletions(-) diff --git a/packages/typescript-estree/src/ast-converter.ts b/packages/typescript-estree/src/ast-converter.ts index e1c5c0beb7cb..fffb9ea15cfd 100644 --- a/packages/typescript-estree/src/ast-converter.ts +++ b/packages/typescript-estree/src/ast-converter.ts @@ -28,8 +28,6 @@ export function astConverter( errorOnUnknownASTType: extra.errorOnUnknownASTType || false, useJSXTextNode: extra.useJSXTextNode || false, shouldPreserveNodeMaps, - range: extra.range || false, - loc: extra.loc || false, }); const estree = instance.convertProgram(); diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index d506052fa907..67ca0be79b89 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -30,8 +30,6 @@ interface ConverterOptions { errorOnUnknownASTType: boolean; useJSXTextNode: boolean; shouldPreserveNodeMaps: boolean; - range: boolean; - loc: boolean; } /** @@ -83,16 +81,6 @@ export class Converter { return this.converter(this.ast) as TSESTree.Program; } - private applyExtraOptions(node: TSESTree.Node): any { - if (!this.options.range) { - delete node.range; - } - if (!this.options.loc) { - delete node.loc; - } - return node; - } - /** * Converts a TypeScript node into an ESTree node. * @param node the child ts.Node @@ -123,10 +111,7 @@ export class Converter { this.allowPattern = allowPattern; } - let result = this.convertNode(node as TSNode, parent || node.parent); - if (result) { - result = this.applyExtraOptions(result); - } + const result = this.convertNode(node as TSNode, parent || node.parent); this.registerTSNodeInNodeMap(node, result); @@ -902,13 +887,11 @@ export class Converter { return this.createNode(node, { type: AST_NODE_TYPES.Property, key: this.convertChild(node.name), - value: this.applyExtraOptions( - this.createNode(node, { - type: AST_NODE_TYPES.AssignmentPattern, - left: this.convertPattern(node.name), - right: this.convertChild(node.objectAssignmentInitializer), - }), - ), + value: this.createNode(node, { + type: AST_NODE_TYPES.AssignmentPattern, + left: this.convertPattern(node.name), + right: this.convertChild(node.objectAssignmentInitializer), + }), computed: false, method: false, shorthand: true, @@ -1439,13 +1422,11 @@ export class Converter { >(node, { type: classNodeType, id: this.convertChild(node.name), - body: this.applyExtraOptions( - this.createNode(node, { - type: AST_NODE_TYPES.ClassBody, - body: [], - range: [node.members.pos - 1, node.end], - }), - ), + body: this.createNode(node, { + type: AST_NODE_TYPES.ClassBody, + body: [], + range: [node.members.pos - 1, node.end], + }), superClass: superClass && superClass.types[0] ? this.convertChild(superClass.types[0].expression) @@ -2399,13 +2380,11 @@ export class Converter { const interfaceHeritageClauses = node.heritageClauses || []; const result = this.createNode(node, { type: AST_NODE_TYPES.TSInterfaceDeclaration, - body: this.applyExtraOptions( - this.createNode(node, { - type: AST_NODE_TYPES.TSInterfaceBody, - body: node.members.map(member => this.convertChild(member)), - range: [node.members.pos - 1, node.end], - }), - ), + body: this.createNode(node, { + type: AST_NODE_TYPES.TSInterfaceBody, + body: node.members.map(member => this.convertChild(member)), + range: [node.members.pos - 1, node.end], + }), id: this.convertChild(node.name), }); diff --git a/packages/typescript-estree/tests/lib/__snapshots__/convert.ts.snap b/packages/typescript-estree/tests/lib/__snapshots__/convert.ts.snap index 6cde270a580f..b7266a75dd07 100644 --- a/packages/typescript-estree/tests/lib/__snapshots__/convert.ts.snap +++ b/packages/typescript-estree/tests/lib/__snapshots__/convert.ts.snap @@ -787,577 +787,3 @@ Object { }, } `; - -exports[`convert should not contain loc when disabled 1`] = ` -Object { - "body": Array [ - Object { - "directive": "test", - "expression": Object { - "range": Array [ - 7, - 13, - ], - "raw": "'test'", - "type": "Literal", - "value": "test", - }, - "range": Array [ - 7, - 14, - ], - "type": "ExpressionStatement", - }, - Object { - "expression": Object { - "range": Array [ - 21, - 22, - ], - "raw": "2", - "type": "Literal", - "value": 2, - }, - "range": Array [ - 21, - 23, - ], - "type": "ExpressionStatement", - }, - Object { - "body": Object { - "body": Array [], - "range": Array [ - 40, - 42, - ], - "type": "ClassBody", - }, - "id": Object { - "name": "foo", - "range": Array [ - 36, - 39, - ], - "type": "Identifier", - }, - "range": Array [ - 30, - 42, - ], - "superClass": null, - "type": "ClassDeclaration", - }, - Object { - "range": Array [ - 42, - 43, - ], - "type": "EmptyStatement", - }, - Object { - "id": Object { - "name": "bar", - "range": Array [ - 55, - 58, - ], - "type": "Identifier", - }, - "range": Array [ - 50, - 64, - ], - "type": "TSTypeAliasDeclaration", - "typeAnnotation": Object { - "members": Array [], - "range": Array [ - 61, - 63, - ], - "type": "TSTypeLiteral", - }, - }, - Object { - "declarations": Array [ - Object { - "id": Object { - "name": "fn", - "range": Array [ - 77, - 79, - ], - "type": "Identifier", - }, - "init": Object { - "async": false, - "body": Object { - "body": Array [ - Object { - "declarations": Array [ - Object { - "id": Object { - "name": "x", - "range": Array [ - 104, - 105, - ], - "type": "Identifier", - }, - "init": Object { - "range": Array [ - 108, - 109, - ], - "raw": "2", - "type": "Literal", - "value": 2, - }, - "range": Array [ - 104, - 109, - ], - "type": "VariableDeclarator", - }, - ], - "kind": "const", - "range": Array [ - 98, - 110, - ], - "type": "VariableDeclaration", - }, - Object { - "expression": Object { - "left": Object { - "name": "x", - "range": Array [ - 119, - 120, - ], - "type": "Identifier", - }, - "operator": "+", - "range": Array [ - 119, - 124, - ], - "right": Object { - "range": Array [ - 123, - 124, - ], - "raw": "5", - "type": "Literal", - "value": 5, - }, - "type": "BinaryExpression", - }, - "range": Array [ - 119, - 125, - ], - "type": "ExpressionStatement", - }, - ], - "range": Array [ - 88, - 133, - ], - "type": "BlockStatement", - }, - "expression": false, - "generator": false, - "id": null, - "params": Array [], - "range": Array [ - 82, - 133, - ], - "type": "ArrowFunctionExpression", - }, - "range": Array [ - 77, - 133, - ], - "type": "VariableDeclarator", - }, - ], - "kind": "const", - "range": Array [ - 71, - 134, - ], - "type": "VariableDeclaration", - }, - ], - "range": Array [ - 7, - 139, - ], - "sourceType": "script", - "type": "Program", -} -`; - -exports[`convert should not contain range when disabled 1`] = ` -Object { - "body": Array [ - Object { - "directive": "test", - "expression": Object { - "loc": Object { - "end": Object { - "column": 12, - "line": 2, - }, - "start": Object { - "column": 6, - "line": 2, - }, - }, - "raw": "'test'", - "type": "Literal", - "value": "test", - }, - "loc": Object { - "end": Object { - "column": 13, - "line": 2, - }, - "start": Object { - "column": 6, - "line": 2, - }, - }, - "type": "ExpressionStatement", - }, - Object { - "expression": Object { - "loc": Object { - "end": Object { - "column": 7, - "line": 3, - }, - "start": Object { - "column": 6, - "line": 3, - }, - }, - "raw": "2", - "type": "Literal", - "value": 2, - }, - "loc": Object { - "end": Object { - "column": 8, - "line": 3, - }, - "start": Object { - "column": 6, - "line": 3, - }, - }, - "type": "ExpressionStatement", - }, - Object { - "body": Object { - "body": Array [], - "loc": Object { - "end": Object { - "column": 18, - "line": 4, - }, - "start": Object { - "column": 16, - "line": 4, - }, - }, - "type": "ClassBody", - }, - "id": Object { - "loc": Object { - "end": Object { - "column": 15, - "line": 4, - }, - "start": Object { - "column": 12, - "line": 4, - }, - }, - "name": "foo", - "type": "Identifier", - }, - "loc": Object { - "end": Object { - "column": 18, - "line": 4, - }, - "start": Object { - "column": 6, - "line": 4, - }, - }, - "superClass": null, - "type": "ClassDeclaration", - }, - Object { - "loc": Object { - "end": Object { - "column": 19, - "line": 4, - }, - "start": Object { - "column": 18, - "line": 4, - }, - }, - "type": "EmptyStatement", - }, - Object { - "id": Object { - "loc": Object { - "end": Object { - "column": 14, - "line": 5, - }, - "start": Object { - "column": 11, - "line": 5, - }, - }, - "name": "bar", - "type": "Identifier", - }, - "loc": Object { - "end": Object { - "column": 20, - "line": 5, - }, - "start": Object { - "column": 6, - "line": 5, - }, - }, - "type": "TSTypeAliasDeclaration", - "typeAnnotation": Object { - "loc": Object { - "end": Object { - "column": 19, - "line": 5, - }, - "start": Object { - "column": 17, - "line": 5, - }, - }, - "members": Array [], - "type": "TSTypeLiteral", - }, - }, - Object { - "declarations": Array [ - Object { - "id": Object { - "loc": Object { - "end": Object { - "column": 14, - "line": 6, - }, - "start": Object { - "column": 12, - "line": 6, - }, - }, - "name": "fn", - "type": "Identifier", - }, - "init": Object { - "async": false, - "body": Object { - "body": Array [ - Object { - "declarations": Array [ - Object { - "id": Object { - "loc": Object { - "end": Object { - "column": 15, - "line": 7, - }, - "start": Object { - "column": 14, - "line": 7, - }, - }, - "name": "x", - "type": "Identifier", - }, - "init": Object { - "loc": Object { - "end": Object { - "column": 19, - "line": 7, - }, - "start": Object { - "column": 18, - "line": 7, - }, - }, - "raw": "2", - "type": "Literal", - "value": 2, - }, - "loc": Object { - "end": Object { - "column": 19, - "line": 7, - }, - "start": Object { - "column": 14, - "line": 7, - }, - }, - "type": "VariableDeclarator", - }, - ], - "kind": "const", - "loc": Object { - "end": Object { - "column": 20, - "line": 7, - }, - "start": Object { - "column": 8, - "line": 7, - }, - }, - "type": "VariableDeclaration", - }, - Object { - "expression": Object { - "left": Object { - "loc": Object { - "end": Object { - "column": 9, - "line": 8, - }, - "start": Object { - "column": 8, - "line": 8, - }, - }, - "name": "x", - "type": "Identifier", - }, - "loc": Object { - "end": Object { - "column": 13, - "line": 8, - }, - "start": Object { - "column": 8, - "line": 8, - }, - }, - "operator": "+", - "right": Object { - "loc": Object { - "end": Object { - "column": 13, - "line": 8, - }, - "start": Object { - "column": 12, - "line": 8, - }, - }, - "raw": "5", - "type": "Literal", - "value": 5, - }, - "type": "BinaryExpression", - }, - "loc": Object { - "end": Object { - "column": 14, - "line": 8, - }, - "start": Object { - "column": 8, - "line": 8, - }, - }, - "type": "ExpressionStatement", - }, - ], - "loc": Object { - "end": Object { - "column": 7, - "line": 9, - }, - "start": Object { - "column": 23, - "line": 6, - }, - }, - "type": "BlockStatement", - }, - "expression": false, - "generator": false, - "id": null, - "loc": Object { - "end": Object { - "column": 7, - "line": 9, - }, - "start": Object { - "column": 17, - "line": 6, - }, - }, - "params": Array [], - "type": "ArrowFunctionExpression", - }, - "loc": Object { - "end": Object { - "column": 7, - "line": 9, - }, - "start": Object { - "column": 12, - "line": 6, - }, - }, - "type": "VariableDeclarator", - }, - ], - "kind": "const", - "loc": Object { - "end": Object { - "column": 8, - "line": 9, - }, - "start": Object { - "column": 6, - "line": 6, - }, - }, - "type": "VariableDeclaration", - }, - ], - "loc": Object { - "end": Object { - "column": 4, - "line": 10, - }, - "start": Object { - "column": 6, - "line": 2, - }, - }, - "sourceType": "script", - "type": "Program", -} -`; diff --git a/packages/typescript-estree/tests/lib/convert.ts b/packages/typescript-estree/tests/lib/convert.ts index af7dda9fe114..65d9c601bd18 100644 --- a/packages/typescript-estree/tests/lib/convert.ts +++ b/packages/typescript-estree/tests/lib/convert.ts @@ -21,8 +21,6 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: false, - range: true, - loc: true, }); expect(instance.convertProgram()).toMatchSnapshot(); }); @@ -34,8 +32,6 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: false, - range: true, - loc: true, }); expect((instance as any).deeplyCopy(ast.statements[0])).toMatchSnapshot(); }); @@ -47,8 +43,6 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: false, - range: true, - loc: true, }); expect((instance as any).deeplyCopy(ast.statements[0])).toMatchSnapshot(); }); @@ -60,8 +54,6 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: false, - range: true, - loc: true, }); expect( (instance as any).deeplyCopy((ast.statements[0] as any).expression), @@ -75,8 +67,6 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: false, - range: true, - loc: true, }); expect((instance as any).deeplyCopy(ast)).toMatchSnapshot(); }); @@ -88,8 +78,6 @@ describe('convert', () => { errorOnUnknownASTType: true, useJSXTextNode: false, shouldPreserveNodeMaps: false, - range: true, - loc: true, }); expect(() => instance.convertProgram()).toThrow( 'Unknown AST_NODE_TYPE: "TSJSDocNullableType"', @@ -108,8 +96,6 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: true, - range: true, - loc: true, }); instance.convertProgram(); const maps = instance.getASTMaps(); @@ -144,8 +130,6 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: true, - range: true, - loc: true, }); instance.convertProgram(); const maps = instance.getASTMaps(); @@ -179,8 +163,6 @@ describe('convert', () => { errorOnUnknownASTType: false, useJSXTextNode: false, shouldPreserveNodeMaps: true, - range: true, - loc: true, }); const program = instance.convertProgram(); const maps = instance.getASTMaps(); @@ -207,45 +189,4 @@ describe('convert', () => { checkMaps(ast); }); - it('should not contain range when disabled', () => { - const ast = convertCode(` - 'test'; - 2; - class foo {}; - type bar = {}; - const fn = () => { - const x = 2; - x + 5; - }; - `); - const instance = new Converter(ast, { - errorOnUnknownASTType: false, - useJSXTextNode: false, - shouldPreserveNodeMaps: false, - range: false, - loc: true, - }); - expect(instance.convertProgram()).toMatchSnapshot(); - }); - - it('should not contain loc when disabled', () => { - const ast = convertCode(` - 'test'; - 2; - class foo {}; - type bar = {}; - const fn = () => { - const x = 2; - x + 5; - }; - `); - const instance = new Converter(ast, { - errorOnUnknownASTType: false, - useJSXTextNode: false, - shouldPreserveNodeMaps: false, - range: true, - loc: false, - }); - expect(instance.convertProgram()).toMatchSnapshot(); - }); }); From 499eb329fd3aac5acdd3d67974633054dd9fe9b9 Mon Sep 17 00:00:00 2001 From: M4rk9696 Date: Tue, 29 Oct 2019 20:23:59 +0530 Subject: [PATCH 5/6] chore: move simpleTraverse and visitorKeys to typescript-estree --- packages/parser/src/analyze-scope.ts | 2 +- packages/parser/src/parser.ts | 4 ++-- packages/typescript-estree/package.json | 1 + packages/typescript-estree/src/parser.ts | 2 ++ packages/{parser => typescript-estree}/src/simple-traverse.ts | 2 +- packages/{parser => typescript-estree}/src/visitor-keys.ts | 0 .../{parser => typescript-estree}/tests/lib/visitor-keys.ts | 2 +- 7 files changed, 8 insertions(+), 5 deletions(-) rename packages/{parser => typescript-estree}/src/simple-traverse.ts (95%) rename packages/{parser => typescript-estree}/src/visitor-keys.ts (100%) rename packages/{parser => typescript-estree}/tests/lib/visitor-keys.ts (92%) diff --git a/packages/parser/src/analyze-scope.ts b/packages/parser/src/analyze-scope.ts index 1b98c064db09..03cb62aeb8ce 100644 --- a/packages/parser/src/analyze-scope.ts +++ b/packages/parser/src/analyze-scope.ts @@ -7,7 +7,7 @@ import { getKeys as fallback } from 'eslint-visitor-keys'; import { ParserOptions } from './parser-options'; import { ScopeManager } from './scope/scope-manager'; -import { visitorKeys as childVisitorKeys } from './visitor-keys'; +import { visitorKeys as childVisitorKeys } from '@typescript-eslint/typescript-estree'; /** * Define the override function of `Scope#__define` for global augmentation. diff --git a/packages/parser/src/parser.ts b/packages/parser/src/parser.ts index bcb6dde759a4..46878a9cdea7 100644 --- a/packages/parser/src/parser.ts +++ b/packages/parser/src/parser.ts @@ -5,10 +5,10 @@ import { ParserServices, TSESTreeOptions, TSESTree, + simpleTraverse, + visitorKeys, } from '@typescript-eslint/typescript-estree'; import { analyzeScope } from './analyze-scope'; -import { simpleTraverse } from './simple-traverse'; -import { visitorKeys } from './visitor-keys'; type ParserOptions = TSESLint.ParserOptions; diff --git a/packages/typescript-estree/package.json b/packages/typescript-estree/package.json index e28166f1eb88..8a4c0c67c6cf 100644 --- a/packages/typescript-estree/package.json +++ b/packages/typescript-estree/package.json @@ -40,6 +40,7 @@ }, "dependencies": { "debug": "^4.1.1", + "eslint-visitor-keys": "^1.1.0", "glob": "^7.1.4", "is-glob": "^4.0.1", "lodash.unescape": "4.0.1", diff --git a/packages/typescript-estree/src/parser.ts b/packages/typescript-estree/src/parser.ts index 141ba25cce6a..0ef765ed8b64 100644 --- a/packages/typescript-estree/src/parser.ts +++ b/packages/typescript-estree/src/parser.ts @@ -419,5 +419,7 @@ export { TSESTreeOptions, version, }; +export { simpleTraverse } from './simple-traverse'; +export { visitorKeys } from './visitor-keys'; export * from './ts-estree'; export { clearCaches } from './create-program/createWatchProgram'; diff --git a/packages/parser/src/simple-traverse.ts b/packages/typescript-estree/src/simple-traverse.ts similarity index 95% rename from packages/parser/src/simple-traverse.ts rename to packages/typescript-estree/src/simple-traverse.ts index a616f239a7b4..e21d24d0de8b 100644 --- a/packages/parser/src/simple-traverse.ts +++ b/packages/typescript-estree/src/simple-traverse.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/typescript-estree'; +import { TSESTree } from './ts-estree'; import { visitorKeys } from './visitor-keys'; // eslint-disable-next-line @typescript-eslint/no-explicit-any diff --git a/packages/parser/src/visitor-keys.ts b/packages/typescript-estree/src/visitor-keys.ts similarity index 100% rename from packages/parser/src/visitor-keys.ts rename to packages/typescript-estree/src/visitor-keys.ts diff --git a/packages/parser/tests/lib/visitor-keys.ts b/packages/typescript-estree/tests/lib/visitor-keys.ts similarity index 92% rename from packages/parser/tests/lib/visitor-keys.ts rename to packages/typescript-estree/tests/lib/visitor-keys.ts index fd8ab4970f9b..6d16e90d00bf 100644 --- a/packages/parser/tests/lib/visitor-keys.ts +++ b/packages/typescript-estree/tests/lib/visitor-keys.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/typescript-estree'; +import { AST_NODE_TYPES } from '../../src/ts-estree'; import { visitorKeys } from '../../src/visitor-keys'; //------------------------------------------------------------------------------ From bbef6512b2c34b1dba179ab066f401f1c7489d01 Mon Sep 17 00:00:00 2001 From: M4rk9696 Date: Mon, 4 Nov 2019 00:04:38 +0530 Subject: [PATCH 6/6] fix(typescript-estree): traverse and remove range and loc --- .../typescript-estree/src/ast-converter.ts | 17 +++ .../tests/lib/__snapshots__/parse.ts.snap | 122 ++++++++++++++++++ .../typescript-estree/tests/lib/convert.ts | 1 - packages/typescript-estree/tests/lib/parse.ts | 16 +++ 4 files changed, 155 insertions(+), 1 deletion(-) diff --git a/packages/typescript-estree/src/ast-converter.ts b/packages/typescript-estree/src/ast-converter.ts index fffb9ea15cfd..270d50dde3f7 100644 --- a/packages/typescript-estree/src/ast-converter.ts +++ b/packages/typescript-estree/src/ast-converter.ts @@ -4,6 +4,7 @@ import { convertComments } from './convert-comments'; import { convertTokens } from './node-utils'; import { Extra } from './parser-options'; import { TSESTree } from './ts-estree'; +import { simpleTraverse } from './simple-traverse'; export function astConverter( ast: SourceFile, @@ -32,6 +33,22 @@ export function astConverter( const estree = instance.convertProgram(); + /** + * Optionally remove range and loc if specified + */ + if (extra.range || extra.loc) { + simpleTraverse(estree, { + enter: node => { + if (!extra.range) { + delete node.range; + } + if (!extra.loc) { + delete node.loc; + } + }, + }); + } + /** * Optionally convert and include all tokens in the AST */ diff --git a/packages/typescript-estree/tests/lib/__snapshots__/parse.ts.snap b/packages/typescript-estree/tests/lib/__snapshots__/parse.ts.snap index bca89ec8d8c6..bff180278429 100644 --- a/packages/typescript-estree/tests/lib/__snapshots__/parse.ts.snap +++ b/packages/typescript-estree/tests/lib/__snapshots__/parse.ts.snap @@ -1,5 +1,127 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`parse() general output should not contain loc 1`] = ` +Object { + "body": Array [ + Object { + "declarations": Array [ + Object { + "id": Object { + "name": "foo", + "range": Array [ + 4, + 7, + ], + "type": "Identifier", + }, + "init": Object { + "name": "bar", + "range": Array [ + 10, + 13, + ], + "type": "Identifier", + }, + "range": Array [ + 4, + 13, + ], + "type": "VariableDeclarator", + }, + ], + "kind": "let", + "range": Array [ + 0, + 14, + ], + "type": "VariableDeclaration", + }, + ], + "range": Array [ + 0, + 14, + ], + "sourceType": "script", + "type": "Program", +} +`; + +exports[`parse() general output should not contain range 1`] = ` +Object { + "body": Array [ + Object { + "declarations": Array [ + Object { + "id": Object { + "loc": Object { + "end": Object { + "column": 7, + "line": 1, + }, + "start": Object { + "column": 4, + "line": 1, + }, + }, + "name": "foo", + "type": "Identifier", + }, + "init": Object { + "loc": Object { + "end": Object { + "column": 13, + "line": 1, + }, + "start": Object { + "column": 10, + "line": 1, + }, + }, + "name": "bar", + "type": "Identifier", + }, + "loc": Object { + "end": Object { + "column": 13, + "line": 1, + }, + "start": Object { + "column": 4, + "line": 1, + }, + }, + "type": "VariableDeclarator", + }, + ], + "kind": "let", + "loc": Object { + "end": Object { + "column": 14, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "type": "VariableDeclaration", + }, + ], + "loc": Object { + "end": Object { + "column": 14, + "line": 1, + }, + "start": Object { + "column": 0, + "line": 1, + }, + }, + "sourceType": "script", + "type": "Program", +} +`; + exports[`parse() general output tokens, comments, locs, and ranges when called with those options 1`] = ` Object { "body": Array [ diff --git a/packages/typescript-estree/tests/lib/convert.ts b/packages/typescript-estree/tests/lib/convert.ts index 65d9c601bd18..2a275c53fb4c 100644 --- a/packages/typescript-estree/tests/lib/convert.ts +++ b/packages/typescript-estree/tests/lib/convert.ts @@ -188,5 +188,4 @@ describe('convert', () => { ); checkMaps(ast); }); - }); diff --git a/packages/typescript-estree/tests/lib/parse.ts b/packages/typescript-estree/tests/lib/parse.ts index 21664b7bd418..850c1a7a2c47 100644 --- a/packages/typescript-estree/tests/lib/parse.ts +++ b/packages/typescript-estree/tests/lib/parse.ts @@ -37,6 +37,22 @@ describe('parse()', () => { 'output tokens, comments, locs, and ranges when called with those options', createSnapshotTestBlock(code, config), ); + + it( + 'output should not contain loc', + createSnapshotTestBlock(code, { + range: true, + loc: false, + }), + ); + + it( + 'output should not contain range', + createSnapshotTestBlock(code, { + range: false, + loc: true, + }), + ); }); describe('non string code', () => {