From c8dc2bdef02a50d1bfcfef61683ca1dafeab36be Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 3 Nov 2014 12:43:45 -0800 Subject: [PATCH] Completion entry details of union of methods with no call signature Fixes #928 --- src/services/services.ts | 14 ++++++++++++-- .../fourslash/completionEntryForUnionMethod.ts | 8 ++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 tests/cases/fourslash/completionEntryForUnionMethod.ts diff --git a/src/services/services.ts b/src/services/services.ts index d208eb87e96..9522d3cb3d4 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -2764,7 +2764,8 @@ module ts { if (flags & SymbolFlags.Property) { if (flags & SymbolFlags.UnionProperty) { - return forEach(typeInfoResolver.getRootSymbols(symbol), rootSymbol => { + // If any of the property includes the declaration of property - the kind is property + var unionPropetyKind = forEach(typeInfoResolver.getRootSymbols(symbol), rootSymbol => { var rootSymbolFlags = rootSymbol.getFlags(); if (rootSymbolFlags & SymbolFlags.Property) { return ScriptElementKind.memberVariableElement; @@ -2772,7 +2773,16 @@ module ts { if (rootSymbolFlags & SymbolFlags.GetAccessor) return ScriptElementKind.memberVariableElement; if (rootSymbolFlags & SymbolFlags.SetAccessor) return ScriptElementKind.memberVariableElement; Debug.assert((rootSymbolFlags & SymbolFlags.Method) !== undefined); - }) || ScriptElementKind.memberFunctionElement; + }); + if (!unionPropetyKind) { + // If this was union of all methods, make sure it has call signatures before we call it method + var typeOfUnionProperty = typeInfoResolver.getTypeOfSymbol(symbol); + if (typeOfUnionProperty.getCallSignatures().length) { + return ScriptElementKind.memberFunctionElement; + } + return ScriptElementKind.memberVariableElement; + } + return unionPropetyKind; } return ScriptElementKind.memberVariableElement; } diff --git a/tests/cases/fourslash/completionEntryForUnionMethod.ts b/tests/cases/fourslash/completionEntryForUnionMethod.ts new file mode 100644 index 00000000000..6eb68342d1f --- /dev/null +++ b/tests/cases/fourslash/completionEntryForUnionMethod.ts @@ -0,0 +1,8 @@ +/// + +////var y: Array|Array; +////y.map/**/( + +goTo.marker(); +verify.quickInfoIs("(property) map: ((callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]) | ((callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[])"); +verify.completionListContains('map', "(property) map: ((callbackfn: (value: string, index: number, array: string[]) => U, thisArg?: any) => U[]) | ((callbackfn: (value: number, index: number, array: number[]) => U, thisArg?: any) => U[])"); \ No newline at end of file