From 67cdaf921518a0b4dd9b05e026b2f65ba0edcef2 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Tue, 10 Jan 2023 16:11:24 -0500 Subject: [PATCH] Fixed crash when reporting infer extends on invalid name with declaration (#52032) --- src/compiler/diagnosticMessages.json | 4 ++++ src/compiler/transformers/declarations/diagnostics.ts | 4 ++++ .../inferTypesInvalidExtendsDeclaration.errors.txt | 11 +++++++++++ .../reference/inferTypesInvalidExtendsDeclaration.js | 5 +++++ .../inferTypesInvalidExtendsDeclaration.symbols | 8 ++++++++ .../inferTypesInvalidExtendsDeclaration.types | 4 ++++ .../plugins/getSupportedCodeFixes-can-be-proxied.js | 3 +++ .../inferTypesInvalidExtendsDeclaration.ts | 3 +++ 8 files changed, 42 insertions(+) create mode 100644 tests/baselines/reference/inferTypesInvalidExtendsDeclaration.errors.txt create mode 100644 tests/baselines/reference/inferTypesInvalidExtendsDeclaration.js create mode 100644 tests/baselines/reference/inferTypesInvalidExtendsDeclaration.symbols create mode 100644 tests/baselines/reference/inferTypesInvalidExtendsDeclaration.types create mode 100644 tests/cases/conformance/types/conditional/inferTypesInvalidExtendsDeclaration.ts diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index ebba7cb0605..a2d33873810 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3864,6 +3864,10 @@ "category": "Error", "code": 4084 }, + "Extends clause for inferred type '{0}' has or is using private name '{1}'.": { + "category": "Error", + "code": 4085 + }, "Conflicting definitions for '{0}' found at '{1}' and '{2}'. Consider installing a specific version of this library to resolve the conflict.": { "category": "Error", "code": 4090 diff --git a/src/compiler/transformers/declarations/diagnostics.ts b/src/compiler/transformers/declarations/diagnostics.ts index 021a3721230..dd51dbae728 100644 --- a/src/compiler/transformers/declarations/diagnostics.ts +++ b/src/compiler/transformers/declarations/diagnostics.ts @@ -500,6 +500,10 @@ export function createGetSymbolAccessibilityDiagnosticForNode(node: DeclarationD diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_function_has_or_is_using_private_name_1; break; + case SyntaxKind.InferType: + diagnosticMessage = Diagnostics.Extends_clause_for_inferred_type_0_has_or_is_using_private_name_1; + break; + case SyntaxKind.TypeAliasDeclaration: diagnosticMessage = Diagnostics.Type_parameter_0_of_exported_type_alias_has_or_is_using_private_name_1; break; diff --git a/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.errors.txt b/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.errors.txt new file mode 100644 index 00000000000..d9c4ac32ddf --- /dev/null +++ b/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.errors.txt @@ -0,0 +1,11 @@ +tests/cases/conformance/types/conditional/inferTypesInvalidExtendsDeclaration.ts(1,42): error TS2304: Cannot find name 'B'. +tests/cases/conformance/types/conditional/inferTypesInvalidExtendsDeclaration.ts(1,42): error TS4085: Extends clause for inferred type 'A' has or is using private name 'B'. + + +==== tests/cases/conformance/types/conditional/inferTypesInvalidExtendsDeclaration.ts (2 errors) ==== + type Test = T extends infer A extends B ? number : string; + ~ +!!! error TS2304: Cannot find name 'B'. + ~ +!!! error TS4085: Extends clause for inferred type 'A' has or is using private name 'B'. + \ No newline at end of file diff --git a/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.js b/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.js new file mode 100644 index 00000000000..e11eb0a1f4a --- /dev/null +++ b/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.js @@ -0,0 +1,5 @@ +//// [inferTypesInvalidExtendsDeclaration.ts] +type Test = T extends infer A extends B ? number : string; + + +//// [inferTypesInvalidExtendsDeclaration.js] diff --git a/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.symbols b/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.symbols new file mode 100644 index 00000000000..39563f3cc8b --- /dev/null +++ b/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.symbols @@ -0,0 +1,8 @@ +=== tests/cases/conformance/types/conditional/inferTypesInvalidExtendsDeclaration.ts === +type Test = T extends infer A extends B ? number : string; +>Test : Symbol(Test, Decl(inferTypesInvalidExtendsDeclaration.ts, 0, 0)) +>T : Symbol(T, Decl(inferTypesInvalidExtendsDeclaration.ts, 0, 10)) +>T : Symbol(T, Decl(inferTypesInvalidExtendsDeclaration.ts, 0, 10)) +>A : Symbol(A, Decl(inferTypesInvalidExtendsDeclaration.ts, 0, 30)) +>B : Symbol(B) + diff --git a/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.types b/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.types new file mode 100644 index 00000000000..2af7d38837b --- /dev/null +++ b/tests/baselines/reference/inferTypesInvalidExtendsDeclaration.types @@ -0,0 +1,4 @@ +=== tests/cases/conformance/types/conditional/inferTypesInvalidExtendsDeclaration.ts === +type Test = T extends infer A extends B ? number : string; +>Test : Test + diff --git a/tests/baselines/reference/tsserver/plugins/getSupportedCodeFixes-can-be-proxied.js b/tests/baselines/reference/tsserver/plugins/getSupportedCodeFixes-can-be-proxied.js index ee708c95a87..eaf791e9d05 100644 --- a/tests/baselines/reference/tsserver/plugins/getSupportedCodeFixes-can-be-proxied.js +++ b/tests/baselines/reference/tsserver/plugins/getSupportedCodeFixes-can-be-proxied.js @@ -1220,6 +1220,7 @@ Info 32 [00:01:13.000] response: "4082", "4083", "4084", + "4085", "4090", "4091", "4092", @@ -2553,6 +2554,7 @@ Info 38 [00:01:19.000] response: "4082", "4083", "4084", + "4085", "4090", "4091", "4092", @@ -3798,6 +3800,7 @@ Info 40 [00:01:21.000] response: "4082", "4083", "4084", + "4085", "4090", "4091", "4092", diff --git a/tests/cases/conformance/types/conditional/inferTypesInvalidExtendsDeclaration.ts b/tests/cases/conformance/types/conditional/inferTypesInvalidExtendsDeclaration.ts new file mode 100644 index 00000000000..73fa8027d08 --- /dev/null +++ b/tests/cases/conformance/types/conditional/inferTypesInvalidExtendsDeclaration.ts @@ -0,0 +1,3 @@ +// @declaration: true + +type Test = T extends infer A extends B ? number : string;