From 324f3eb7e6132ac644034d8bf517db34a4aa8ca5 Mon Sep 17 00:00:00 2001 From: Armano Date: Tue, 15 Jan 2019 02:23:05 +0100 Subject: [PATCH 1/5] fix(estree): correct location and range for heritage clause --- packages/typescript-estree/src/convert.ts | 11 +++++++---- .../tests/ast-alignment/fixtures-to-test.ts | 8 ++++---- .../tests/lib/__snapshots__/typescript.ts.snap | 12 ++++++------ 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index 009bfdcdcb73..420a2e235c39 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -283,17 +283,20 @@ export default function convert(config: ConvertConfig): ESTreeNode | null { child: ts.ExpressionWithTypeArguments ): ESTreeNode { const expression = convertChild(child.expression)!; - const classImplementsNode: ESTreeNode = { + const range: [number, number] = [child.getStart(), child.end]; + let classImplementsNode: ESTreeNode = { type: nodeType, - loc: expression.loc, - range: expression.range, - expression + expression, + range: range, + loc: getLocFor(range[0], range[1], ast) }; + if (child.typeArguments && child.typeArguments.length) { classImplementsNode.typeParameters = convertTypeArgumentsToTypeParameters( child.typeArguments ); } + return classImplementsNode; } diff --git a/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts b/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts index 6ead060e9518..4bbb160d0f78 100644 --- a/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts +++ b/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts @@ -317,16 +317,13 @@ tester.addFixturePatternConfig('typescript/basics', { 'arrow-function-with-type-parameters', /** * Babel error: parameterName is not included into range of TSTypeAnnotation - * TODO: report it to babel + * https://github.com/babel/babel/issues/9337 */ 'type-guard-in-method', /** * there is difference in range between babel and ts-estree */ - 'class-with-implements-generic-multiple', - 'class-with-implements-generic', 'export-declare-const-named-enum', - 'interface-with-extends-type-parameters', 'interface-with-optional-properties', /** * Babel parses it as TSQualifiedName @@ -337,6 +334,7 @@ tester.addFixturePatternConfig('typescript/basics', { /** * Babel bug for parsing exported abstract interface * https://github.com/babel/babel/issues/9304 + * PR: https://github.com/babel/babel/pull/9336 */ 'abstract-interface', /** @@ -384,6 +382,7 @@ tester.addFixturePatternConfig('typescript/basics', { /** * Babel parses this incorrectly * https://github.com/babel/babel/issues/9325 + * PR: https://github.com/babel/babel/pull/9328 */ 'class-multi-line-keyword-declare', 'class-multi-line-keyword-abstract' @@ -443,6 +442,7 @@ tester.addFixturePatternConfig('typescript/types', { /** * Babel bug for range of Identifier in TSIndexSignature * https://github.com/babel/babel/issues/9319 + * PR: https://github.com/babel/babel/pull/9335 */ 'index-signature', 'index-signature-readonly', diff --git a/packages/typescript-estree/tests/lib/__snapshots__/typescript.ts.snap b/packages/typescript-estree/tests/lib/__snapshots__/typescript.ts.snap index 9ddc5b47f8c3..5d070828fac6 100644 --- a/packages/typescript-estree/tests/lib/__snapshots__/typescript.ts.snap +++ b/packages/typescript-estree/tests/lib/__snapshots__/typescript.ts.snap @@ -14823,7 +14823,7 @@ Object { }, "loc": Object { "end": Object { - "column": 24, + "column": 27, "line": 1, }, "start": Object { @@ -14833,7 +14833,7 @@ Object { }, "range": Array [ 21, - 24, + 27, ], "type": "TSClassImplements", "typeParameters": Object { @@ -15155,7 +15155,7 @@ Object { }, "loc": Object { "end": Object { - "column": 24, + "column": 30, "line": 1, }, "start": Object { @@ -15165,7 +15165,7 @@ Object { }, "range": Array [ 21, - 24, + 30, ], "type": "TSClassImplements", "typeParameters": Object { @@ -51372,7 +51372,7 @@ Object { }, "loc": Object { "end": Object { - "column": 28, + "column": 31, "line": 1, }, "start": Object { @@ -51382,7 +51382,7 @@ Object { }, "range": Array [ 25, - 28, + 31, ], "type": "TSInterfaceHeritage", "typeParameters": Object { From 82b08fc30d17a7a7640e2070ed03fba855083c28 Mon Sep 17 00:00:00 2001 From: Armano Date: Tue, 15 Jan 2019 02:39:07 +0100 Subject: [PATCH 2/5] fix(estree): make sure that heritage is in treeNodeMaps --- packages/typescript-estree/src/convert.ts | 57 +++++++------------ .../src/temp-types-based-on-js-source.ts | 4 +- 2 files changed, 22 insertions(+), 39 deletions(-) diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index 420a2e235c39..17ef919099f6 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -272,34 +272,6 @@ export default function convert(config: ConvertConfig): ESTreeNode | null { }; } - /** - * Converts a child into a specified heritage node. - * @param {AST_NODE_TYPES} nodeType Type of node to be used - * @param {ts.ExpressionWithTypeArguments} child The TypeScript AST node to convert. - * @returns {ESTreeNode} The heritage node. - */ - function convertHeritageClause( - nodeType: AST_NODE_TYPES, - child: ts.ExpressionWithTypeArguments - ): ESTreeNode { - const expression = convertChild(child.expression)!; - const range: [number, number] = [child.getStart(), child.end]; - let classImplementsNode: ESTreeNode = { - type: nodeType, - expression, - range: range, - loc: getLocFor(range[0], range[1], ast) - }; - - if (child.typeArguments && child.typeArguments.length) { - classImplementsNode.typeParameters = convertTypeArgumentsToTypeParameters( - child.typeArguments - ); - } - - return classImplementsNode; - } - /** * Converts an array of ts.Node parameters into an array of ESTreeNode params * @param {ts.Node[]} parameters An array of ts.Node params to be converted @@ -1468,9 +1440,7 @@ export default function convert(config: ConvertConfig): ESTreeNode | null { }); if (implementsClause) { - result.implements = implementsClause.types.map(el => - convertHeritageClause(AST_NODE_TYPES.TSClassImplements, el) - ); + result.implements = implementsClause.types.map(convertChild); } if (hasModifier(SyntaxKind.DeclareKeyword, node)) { @@ -2337,6 +2307,23 @@ export default function convert(config: ConvertConfig): ESTreeNode | null { break; } + case SyntaxKind.ExpressionWithTypeArguments: { + Object.assign(result, { + type: + parent && parent.kind === SyntaxKind.InterfaceDeclaration + ? AST_NODE_TYPES.TSInterfaceHeritage + : AST_NODE_TYPES.TSClassImplements, + expression: convertChild(node.expression) + }); + + if (node.typeArguments && node.typeArguments.length) { + result.typeParameters = convertTypeArgumentsToTypeParameters( + node.typeArguments + ); + } + break; + } + case SyntaxKind.InterfaceDeclaration: { const interfaceHeritageClauses = node.heritageClauses || []; @@ -2389,15 +2376,11 @@ export default function convert(config: ConvertConfig): ESTreeNode | null { for (const heritageClause of interfaceHeritageClauses) { if (heritageClause.token === SyntaxKind.ExtendsKeyword) { for (const n of heritageClause.types) { - interfaceExtends.push( - convertHeritageClause(AST_NODE_TYPES.TSInterfaceHeritage, n) - ); + interfaceExtends.push(convertChild(n)); } } else if (heritageClause.token === SyntaxKind.ImplementsKeyword) { for (const n of heritageClause.types) { - interfaceImplements.push( - convertHeritageClause(AST_NODE_TYPES.TSInterfaceHeritage, n) - ); + interfaceImplements.push(convertChild(n)); } } } diff --git a/packages/typescript-estree/src/temp-types-based-on-js-source.ts b/packages/typescript-estree/src/temp-types-based-on-js-source.ts index a002b749f5bd..a2234fc1308a 100644 --- a/packages/typescript-estree/src/temp-types-based-on-js-source.ts +++ b/packages/typescript-estree/src/temp-types-based-on-js-source.ts @@ -34,8 +34,8 @@ export interface ESTreeNode { value?: string; expression?: ESTreeNode | null; decorators?: (ESTreeNode | null)[]; - implements?: ESTreeNode[]; - extends?: ESTreeNode[]; + implements?: (ESTreeNode | null)[]; + extends?: (ESTreeNode | null)[]; const?: boolean; declare?: boolean; global?: boolean; From d40072914ca6790b6c3807aac88abae882cac37c Mon Sep 17 00:00:00 2001 From: Armano Date: Tue, 15 Jan 2019 03:31:40 +0100 Subject: [PATCH 3/5] chore: add note to fixtures-to-test --- .../typescript-estree/tests/ast-alignment/fixtures-to-test.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts b/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts index 4bbb160d0f78..f84f49f41ce7 100644 --- a/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts +++ b/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts @@ -318,6 +318,7 @@ tester.addFixturePatternConfig('typescript/basics', { /** * Babel error: parameterName is not included into range of TSTypeAnnotation * https://github.com/babel/babel/issues/9337 + * PR: https://github.com/babel/babel/pull/9339 */ 'type-guard-in-method', /** From 6c2558a17a0f9543a5cb73d80f6771328831bb0d Mon Sep 17 00:00:00 2001 From: Armano Date: Tue, 15 Jan 2019 12:52:30 +0100 Subject: [PATCH 4/5] chore: update babel PR status --- .../tests/ast-alignment/fixtures-to-test.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts b/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts index f84f49f41ce7..6324c4ddd7c5 100644 --- a/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts +++ b/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts @@ -316,9 +316,8 @@ tester.addFixturePatternConfig('typescript/basics', { */ 'arrow-function-with-type-parameters', /** - * Babel error: parameterName is not included into range of TSTypeAnnotation - * https://github.com/babel/babel/issues/9337 - * PR: https://github.com/babel/babel/pull/9339 + * PR for this type predicate ranges has been merged into Babel: https://github.com/babel/babel/pull/9339 + * TODO: remove me in next babel > 7.2.3 */ 'type-guard-in-method', /** From ea4c1190dabeb85a5b0243130a77bb039e574b76 Mon Sep 17 00:00:00 2001 From: Armano Date: Tue, 15 Jan 2019 14:00:21 +0100 Subject: [PATCH 5/5] chore: update nots --- .../tests/ast-alignment/fixtures-to-test.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts b/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts index 6324c4ddd7c5..d72971a9cc61 100644 --- a/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts +++ b/packages/typescript-estree/tests/ast-alignment/fixtures-to-test.ts @@ -380,9 +380,8 @@ tester.addFixturePatternConfig('typescript/basics', { */ 'type-assertion-arrow-function', /** - * Babel parses this incorrectly - * https://github.com/babel/babel/issues/9325 - * PR: https://github.com/babel/babel/pull/9328 + * PR for type parsing declare and abstract classes has been merged into Babel: https://github.com/babel/babel/pull/9328 + * TODO: remove me in next babel > 7.2.3 */ 'class-multi-line-keyword-declare', 'class-multi-line-keyword-abstract' @@ -440,9 +439,8 @@ tester.addFixturePatternConfig('typescript/types', { fileType: 'ts', ignore: [ /** - * Babel bug for range of Identifier in TSIndexSignature - * https://github.com/babel/babel/issues/9319 - * PR: https://github.com/babel/babel/pull/9335 + * PR for type Identifier in TSIndexSignature ranges has been merged into Babel: https://github.com/babel/babel/pull/9335 + * TODO: remove me in next babel > 7.2.3 */ 'index-signature', 'index-signature-readonly', 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