From fa8df0d32ca90643ad824a0fc4b1249552d0dd81 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Fri, 30 Nov 2018 16:25:07 -0800 Subject: [PATCH 1/2] Add missing case to declaration diagnostic handler --- .../transformers/declarations/diagnostics.ts | 1 + ...LambdaWithMissingTypeParameterNoCrash.errors.txt | 13 +++++++++++++ ...tionEmitLambdaWithMissingTypeParameterNoCrash.js | 9 +++++++++ ...mitLambdaWithMissingTypeParameterNoCrash.symbols | 11 +++++++++++ ...nEmitLambdaWithMissingTypeParameterNoCrash.types | 7 +++++++ ...tionEmitLambdaWithMissingTypeParameterNoCrash.ts | 4 ++++ 6 files changed, 45 insertions(+) create mode 100644 tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.errors.txt create mode 100644 tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.js create mode 100644 tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.symbols create mode 100644 tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.types create mode 100644 tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts diff --git a/src/compiler/transformers/declarations/diagnostics.ts b/src/compiler/transformers/declarations/diagnostics.ts index 94d6994f8d2ef..f07c76e6c73ad 100644 --- a/src/compiler/transformers/declarations/diagnostics.ts +++ b/src/compiler/transformers/declarations/diagnostics.ts @@ -410,6 +410,7 @@ namespace ts { } break; + case SyntaxKind.FunctionType: case SyntaxKind.FunctionDeclaration: diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; break; diff --git a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.errors.txt b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.errors.txt new file mode 100644 index 0000000000000..9d626f960b42d --- /dev/null +++ b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.errors.txt @@ -0,0 +1,13 @@ +tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts(2,27): error TS2304: Cannot find name 'T2'. +tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts(2,27): error TS4016: Type parameter 'T1' of exported function has or is using private name 'T2'. + + +==== tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts (2 errors) ==== + export interface Foo { + preFetch: (c: T1) => void; // Type T2 is not defined + ~~ +!!! error TS2304: Cannot find name 'T2'. + ~~ +!!! error TS4016: Type parameter 'T1' of exported function has or is using private name 'T2'. + } + \ No newline at end of file diff --git a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.js b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.js new file mode 100644 index 0000000000000..b580f5a89686a --- /dev/null +++ b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.js @@ -0,0 +1,9 @@ +//// [declarationEmitLambdaWithMissingTypeParameterNoCrash.ts] +export interface Foo { + preFetch: (c: T1) => void; // Type T2 is not defined +} + + +//// [declarationEmitLambdaWithMissingTypeParameterNoCrash.js] +"use strict"; +exports.__esModule = true; diff --git a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.symbols b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.symbols new file mode 100644 index 0000000000000..44f9fdc6bc06e --- /dev/null +++ b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.symbols @@ -0,0 +1,11 @@ +=== tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts === +export interface Foo { +>Foo : Symbol(Foo, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 0, 0)) + + preFetch: (c: T1) => void; // Type T2 is not defined +>preFetch : Symbol(Foo.preFetch, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 0, 22)) +>T1 : Symbol(T1, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 1, 15)) +>c : Symbol(c, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 1, 31)) +>T1 : Symbol(T1, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 1, 15)) +} + diff --git a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.types b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.types new file mode 100644 index 0000000000000..56f32fc5a13f5 --- /dev/null +++ b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.types @@ -0,0 +1,7 @@ +=== tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts === +export interface Foo { + preFetch: (c: T1) => void; // Type T2 is not defined +>preFetch : (c: T1) => void +>c : T1 +} + diff --git a/tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts b/tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts new file mode 100644 index 0000000000000..d2a7112ceb84b --- /dev/null +++ b/tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts @@ -0,0 +1,4 @@ +// @declaration: true +export interface Foo { + preFetch: (c: T1) => void; // Type T2 is not defined +} From cd6fdb11d6d1c372d8230cbee987d7e03f703ed7 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Fri, 30 Nov 2018 17:44:25 -0800 Subject: [PATCH 2/2] Add constructor case --- src/compiler/transformers/declarations/diagnostics.ts | 1 + ...nEmitLambdaWithMissingTypeParameterNoCrash.errors.txt | 9 ++++++++- ...clarationEmitLambdaWithMissingTypeParameterNoCrash.js | 1 + ...tionEmitLambdaWithMissingTypeParameterNoCrash.symbols | 6 ++++++ ...rationEmitLambdaWithMissingTypeParameterNoCrash.types | 4 ++++ ...clarationEmitLambdaWithMissingTypeParameterNoCrash.ts | 1 + 6 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/compiler/transformers/declarations/diagnostics.ts b/src/compiler/transformers/declarations/diagnostics.ts index f07c76e6c73ad..b4c72c7901214 100644 --- a/src/compiler/transformers/declarations/diagnostics.ts +++ b/src/compiler/transformers/declarations/diagnostics.ts @@ -389,6 +389,7 @@ namespace ts { diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_interface_has_or_is_using_private_name_1; break; + case SyntaxKind.ConstructorType: case SyntaxKind.ConstructSignature: diagnosticMessage = Diagnostics.Type_parameter_0_of_constructor_signature_from_exported_interface_has_or_is_using_private_name_1; break; diff --git a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.errors.txt b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.errors.txt index 9d626f960b42d..02718216afca4 100644 --- a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.errors.txt +++ b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.errors.txt @@ -1,13 +1,20 @@ tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts(2,27): error TS2304: Cannot find name 'T2'. tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts(2,27): error TS4016: Type parameter 'T1' of exported function has or is using private name 'T2'. +tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts(3,33): error TS2304: Cannot find name 'T2'. +tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts(3,33): error TS4006: Type parameter 'T1' of constructor signature from exported interface has or is using private name 'T2'. -==== tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts (2 errors) ==== +==== tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts (4 errors) ==== export interface Foo { preFetch: (c: T1) => void; // Type T2 is not defined ~~ !!! error TS2304: Cannot find name 'T2'. ~~ !!! error TS4016: Type parameter 'T1' of exported function has or is using private name 'T2'. + preFetcher: new (c: T1) => void; // Type T2 is not defined + ~~ +!!! error TS2304: Cannot find name 'T2'. + ~~ +!!! error TS4006: Type parameter 'T1' of constructor signature from exported interface has or is using private name 'T2'. } \ No newline at end of file diff --git a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.js b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.js index b580f5a89686a..36d9b9f7ae3d8 100644 --- a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.js +++ b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.js @@ -1,6 +1,7 @@ //// [declarationEmitLambdaWithMissingTypeParameterNoCrash.ts] export interface Foo { preFetch: (c: T1) => void; // Type T2 is not defined + preFetcher: new (c: T1) => void; // Type T2 is not defined } diff --git a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.symbols b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.symbols index 44f9fdc6bc06e..c7908a593c18a 100644 --- a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.symbols +++ b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.symbols @@ -7,5 +7,11 @@ export interface Foo { >T1 : Symbol(T1, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 1, 15)) >c : Symbol(c, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 1, 31)) >T1 : Symbol(T1, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 1, 15)) + + preFetcher: new (c: T1) => void; // Type T2 is not defined +>preFetcher : Symbol(Foo.preFetcher, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 1, 46)) +>T1 : Symbol(T1, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 2, 21)) +>c : Symbol(c, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 2, 37)) +>T1 : Symbol(T1, Decl(declarationEmitLambdaWithMissingTypeParameterNoCrash.ts, 2, 21)) } diff --git a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.types b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.types index 56f32fc5a13f5..5f132c3dfe866 100644 --- a/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.types +++ b/tests/baselines/reference/declarationEmitLambdaWithMissingTypeParameterNoCrash.types @@ -2,6 +2,10 @@ export interface Foo { preFetch: (c: T1) => void; // Type T2 is not defined >preFetch : (c: T1) => void +>c : T1 + + preFetcher: new (c: T1) => void; // Type T2 is not defined +>preFetcher : new (c: T1) => void >c : T1 } diff --git a/tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts b/tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts index d2a7112ceb84b..1c5b9890db683 100644 --- a/tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts +++ b/tests/cases/compiler/declarationEmitLambdaWithMissingTypeParameterNoCrash.ts @@ -1,4 +1,5 @@ // @declaration: true export interface Foo { preFetch: (c: T1) => void; // Type T2 is not defined + preFetcher: new (c: T1) => void; // Type T2 is not defined }