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', () => { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy