From d137e4a23b75730cf83c31350127aa8942d5ce25 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Thu, 2 Jul 2020 11:40:17 +0300 Subject: [PATCH] fix(39346): show completion in inherited classes from the composited base interface --- src/services/completions.ts | 2 +- .../completionListInheritedClassMembers.ts | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/completionListInheritedClassMembers.ts diff --git a/src/services/completions.ts b/src/services/completions.ts index 88cee321e1023..8708fc26fa2b7 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -2432,7 +2432,7 @@ namespace ts.Completions { !existingMemberNames.has(propertySymbol.escapedName) && !!propertySymbol.declarations && !(getDeclarationModifierFlagsFromSymbol(propertySymbol) & ModifierFlags.Private) && - !isPrivateIdentifierPropertyDeclaration(propertySymbol.valueDeclaration)); + !(propertySymbol.valueDeclaration && isPrivateIdentifierPropertyDeclaration(propertySymbol.valueDeclaration))); } /** diff --git a/tests/cases/fourslash/completionListInheritedClassMembers.ts b/tests/cases/fourslash/completionListInheritedClassMembers.ts new file mode 100644 index 0000000000000..334374eab44d2 --- /dev/null +++ b/tests/cases/fourslash/completionListInheritedClassMembers.ts @@ -0,0 +1,43 @@ +/// + +// @filename: a.ts +////interface I { +//// m2(): void; +//// m3(): void; +////} +//// +////type T1 = I; +////export interface A1 extends T1 { +//// m1(): void; +////} +////export class A1 {} +//// +////type T2 = Partial +////export interface A2 extends T2 { +//// m1(): void; +////} +////export class A2 {} +//// +////type T3 = Pick +////export interface A3 extends T3 { +//// m1(): void; +////} +////export class A3 {} + +// @filename: b.ts +////import { A1, A2, A3 } from './a'; +////class B1 extends A1 { +//// /*1*/ +////} +////class B2 extends A2 { +//// /*2*/ +////} +////class B3 extends A3 { +//// /*3*/ +////} + +verify.completions( + { marker: "1", exact: ["m1", "m2", "m3", ...completion.classElementKeywords], isNewIdentifierLocation: true }, + { marker: "2", exact: ["m1", "m2", "m3", ...completion.classElementKeywords], isNewIdentifierLocation: true }, + { marker: "3", exact: ["m1", "m3", ...completion.classElementKeywords], isNewIdentifierLocation: true } +);