From 73f5f02e97f2dfa5b1d7ae009520474e52ec8dd5 Mon Sep 17 00:00:00 2001 From: Alex T Date: Fri, 25 Sep 2020 23:01:08 +0300 Subject: [PATCH] fix(40756): disable truncation for inferred type (#40764) --- src/services/utilities.ts | 2 +- .../codeFixInferFromUsageNoTruncation.ts | 102 ++++++++++++++++++ 2 files changed, 103 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/codeFixInferFromUsageNoTruncation.ts diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 0a2572f4d79..8a85a3af759 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -2528,7 +2528,7 @@ namespace ts { const checker = program.getTypeChecker(); let typeIsAccessible = true; const notAccessible = () => { typeIsAccessible = false; }; - const res = checker.typeToTypeNode(type, enclosingScope, /*flags*/ undefined, { + const res = checker.typeToTypeNode(type, enclosingScope, NodeBuilderFlags.NoTruncation, { trackSymbol: (symbol, declaration, meaning) => { typeIsAccessible = typeIsAccessible && checker.isSymbolAccessible(symbol, declaration, meaning, /*shouldComputeAliasToMarkVisible*/ false).accessibility === SymbolAccessibility.Accessible; }, diff --git a/tests/cases/fourslash/codeFixInferFromUsageNoTruncation.ts b/tests/cases/fourslash/codeFixInferFromUsageNoTruncation.ts new file mode 100644 index 00000000000..b9448cb8f6e --- /dev/null +++ b/tests/cases/fourslash/codeFixInferFromUsageNoTruncation.ts @@ -0,0 +1,102 @@ +/// + +////function foo(param) { +//// const a: { +//// a: { +//// a_1: string; +//// a_2: { +//// a_2_1: string; +//// } +//// }; +//// b: { +//// b_1: string; +//// b_2: string; +//// b_3: string; +//// }; +//// c: { +//// c_1: string; +//// c_2: string; +//// c_3: string; +//// c_4: { +//// c_4_1: { +//// c_4_1_1: { +//// c_4_1_1_1: { +//// c_4_1_1_1_1: string; +//// c_4_1_1_1_2: string; +//// c_4_1_1_1_3: string; +//// } +//// } +//// } +//// } +//// }; +//// d: { +//// d_1: { +//// d_1_1: { +//// d_1_1_1: string; +//// } +//// d_1_2: { +//// d_1_2_1: string; +//// } +//// d_1_3: { +//// d_1_3_1: string; +//// d_1_3_2: string; +//// } +//// } +//// d_2: string; +//// d_3: string; +//// } +//// } = param; +////} + +verify.codeFix({ + description: "Infer parameter types from usage", + index: 0, + newFileContent: +`function foo(param: { a: { a_1: string; a_2: { a_2_1: string; }; }; b: { b_1: string; b_2: string; b_3: string; }; c: { c_1: string; c_2: string; c_3: string; c_4: { c_4_1: { c_4_1_1: { c_4_1_1_1: { c_4_1_1_1_1: string; c_4_1_1_1_2: string; c_4_1_1_1_3: string; }; }; }; }; }; d: { d_1: { d_1_1: { d_1_1_1: string; }; d_1_2: { d_1_2_1: string; }; d_1_3: { d_1_3_1: string; d_1_3_2: string; }; }; d_2: string; d_3: string; }; }) { + const a: { + a: { + a_1: string; + a_2: { + a_2_1: string; + } + }; + b: { + b_1: string; + b_2: string; + b_3: string; + }; + c: { + c_1: string; + c_2: string; + c_3: string; + c_4: { + c_4_1: { + c_4_1_1: { + c_4_1_1_1: { + c_4_1_1_1_1: string; + c_4_1_1_1_2: string; + c_4_1_1_1_3: string; + } + } + } + } + }; + d: { + d_1: { + d_1_1: { + d_1_1_1: string; + } + d_1_2: { + d_1_2_1: string; + } + d_1_3: { + d_1_3_1: string; + d_1_3_2: string; + } + } + d_2: string; + d_3: string; + } + } = param; +}`, +});