From ed42e3c222a7bd0f98090a77cfee08db366679a1 Mon Sep 17 00:00:00 2001 From: Nico Jansen Date: Wed, 7 Oct 2020 08:29:51 +0200 Subject: [PATCH] fix(instrumenter): don't mutate generics (#2530) Don't mutate `TSTypeParameterInstantiation` like `React.useState()` --- packages/instrumenter/src/util/syntax-helpers.ts | 1 + .../test/unit/transformers/babel-transformer.spec.ts | 6 ++++++ .../testResources/instrumenter/ts-declarations.ts | 2 ++ .../testResources/instrumenter/ts-declarations.ts.out.snap | 3 ++- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/packages/instrumenter/src/util/syntax-helpers.ts b/packages/instrumenter/src/util/syntax-helpers.ts index beb7c9284f..cc62c472fc 100644 --- a/packages/instrumenter/src/util/syntax-helpers.ts +++ b/packages/instrumenter/src/util/syntax-helpers.ts @@ -175,6 +175,7 @@ const tsTypeAnnotationNodeTypes: ReadonlyArray = Object.free 'TSModuleDeclaration', 'TSEnumDeclaration', 'TSDeclareFunction', + 'TSTypeParameterInstantiation', ]); const flowTypeAnnotationNodeTypes: ReadonlyArray = Object.freeze([ diff --git a/packages/instrumenter/test/unit/transformers/babel-transformer.spec.ts b/packages/instrumenter/test/unit/transformers/babel-transformer.spec.ts index 00fb7e5165..72593b98ac 100644 --- a/packages/instrumenter/test/unit/transformers/babel-transformer.spec.ts +++ b/packages/instrumenter/test/unit/transformers/babel-transformer.spec.ts @@ -124,6 +124,12 @@ describe('babel-transformer', () => { expectMutateNotCalledWith((t) => t.isVariableDeclaration()); expectMutateNotCalledWith((t) => t.isStringLiteral()); }); + + it('should skip generic parameters', () => { + const ast = createTSAst({ rawContent: 'React.useState()' }); + transformBabel(ast, mutantCollectorMock, context); + expectMutateNotCalledWith((t) => t.isTSTypeParameterInstantiation()); + }); }); it('should skip import declarations', () => { diff --git a/packages/instrumenter/testResources/instrumenter/ts-declarations.ts b/packages/instrumenter/testResources/instrumenter/ts-declarations.ts index 1aa013d314..42b4e32708 100644 --- a/packages/instrumenter/testResources/instrumenter/ts-declarations.ts +++ b/packages/instrumenter/testResources/instrumenter/ts-declarations.ts @@ -2,3 +2,5 @@ export declare const globalNamespace = "globalNamespace"; declare function foo(): 'foo'; declare module 'express' { } + +React.useState(); diff --git a/packages/instrumenter/testResources/instrumenter/ts-declarations.ts.out.snap b/packages/instrumenter/testResources/instrumenter/ts-declarations.ts.out.snap index 2933e19433..acba724781 100644 --- a/packages/instrumenter/testResources/instrumenter/ts-declarations.ts.out.snap +++ b/packages/instrumenter/testResources/instrumenter/ts-declarations.ts.out.snap @@ -3,5 +3,6 @@ exports[`instrumenter integration type declarations should not produce mutants for a TS declaration file 1`] = ` "export declare const globalNamespace = \\"globalNamespace\\"; declare function foo(): 'foo'; -declare module 'express' {}" +declare module 'express' {} +React.useState();" `;