From 8f9c0861bc8d7982d8b7c24894fcba1600328c1b Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Thu, 24 May 2018 15:19:57 -0700 Subject: [PATCH] Use external aliases in quickinfo and signature help return types (#24391) * Dont include import types in quick info type names * Add UseAliasDefinedOutsideCurrentScope flag to LS operations which were missing it --- src/compiler/checker.ts | 4 ++-- src/services/utilities.ts | 2 +- ...ickInfoExportedTypeDoesNotUseImportType.ts | 19 +++++++++++++++++++ 3 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 tests/cases/fourslash/crossFileQuickInfoExportedTypeDoesNotUseImportType.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index ceb1cdd581d..769cde5dcc0 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -2993,7 +2993,7 @@ namespace ts { } } - function typeToString(type: Type, enclosingDeclaration?: Node, flags: TypeFormatFlags = TypeFormatFlags.AllowUniqueESSymbolType, writer: EmitTextWriter = createTextWriter("")): string { + function typeToString(type: Type, enclosingDeclaration?: Node, flags: TypeFormatFlags = TypeFormatFlags.AllowUniqueESSymbolType | TypeFormatFlags.UseAliasDefinedOutsideCurrentScope, writer: EmitTextWriter = createTextWriter("")): string { const typeNode = nodeBuilder.typeToTypeNode(type, enclosingDeclaration, toNodeBuilderFlags(flags) | NodeBuilderFlags.IgnoreErrors, writer); if (typeNode === undefined) return Debug.fail("should always get typenode"); const options = { removeComments: true }; @@ -3941,7 +3941,7 @@ namespace ts { } } - function typePredicateToString(typePredicate: TypePredicate, enclosingDeclaration?: Node, flags?: TypeFormatFlags, writer?: EmitTextWriter): string { + function typePredicateToString(typePredicate: TypePredicate, enclosingDeclaration?: Node, flags: TypeFormatFlags = TypeFormatFlags.UseAliasDefinedOutsideCurrentScope, writer?: EmitTextWriter): string { return writer ? typePredicateToStringWorker(writer).getText() : usingSingleLineStringWriter(typePredicateToStringWorker); function typePredicateToStringWorker(writer: EmitTextWriter) { diff --git a/src/services/utilities.ts b/src/services/utilities.ts index cfbfcf261c6..de577ec5946 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -1473,7 +1473,7 @@ namespace ts { export function typeToDisplayParts(typechecker: TypeChecker, type: Type, enclosingDeclaration?: Node, flags: TypeFormatFlags = TypeFormatFlags.None): SymbolDisplayPart[] { return mapToDisplayParts(writer => { - typechecker.writeType(type, enclosingDeclaration, flags | TypeFormatFlags.MultilineObjectLiterals, writer); + typechecker.writeType(type, enclosingDeclaration, flags | TypeFormatFlags.MultilineObjectLiterals | TypeFormatFlags.UseAliasDefinedOutsideCurrentScope, writer); }); } diff --git a/tests/cases/fourslash/crossFileQuickInfoExportedTypeDoesNotUseImportType.ts b/tests/cases/fourslash/crossFileQuickInfoExportedTypeDoesNotUseImportType.ts new file mode 100644 index 00000000000..83677f68781 --- /dev/null +++ b/tests/cases/fourslash/crossFileQuickInfoExportedTypeDoesNotUseImportType.ts @@ -0,0 +1,19 @@ +/// + +// @Filename: b.ts +////export interface B {} +////export function foob(): { +//// x: B, +//// y: B +////} { +//// return null as any; +////} +// @Filename: a.ts +////import { foob } from "./b"; +////const thing/*1*/ = foob(/*2*/); + +verify.quickInfoAt("1", "const thing: {\n x: B;\n y: B;\n}"); +verify.signatureHelp({ + marker: "2", + text: "foob(): { x: B; y: B; }" +});