From d2016912b5f8778b25c8f7c2dc4e82dbd5e27843 Mon Sep 17 00:00:00 2001 From: Alexander T Date: Wed, 22 Apr 2020 19:07:36 +0300 Subject: [PATCH] fix(37825): exclude private fields from completions in subclasses (#37906) --- src/services/completions.ts | 3 ++- .../completionListClassPrivateFields.ts | 15 +++++++++++++ .../completionListClassPrivateFields_JS.ts | 21 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/completionListClassPrivateFields.ts create mode 100644 tests/cases/fourslash/completionListClassPrivateFields_JS.ts diff --git a/src/services/completions.ts b/src/services/completions.ts index 2066c485ac..bb08fe7d54 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -2427,7 +2427,8 @@ namespace ts.Completions { return baseSymbols.filter(propertySymbol => !existingMemberNames.has(propertySymbol.escapedName) && !!propertySymbol.declarations && - !(getDeclarationModifierFlagsFromSymbol(propertySymbol) & ModifierFlags.Private)); + !(getDeclarationModifierFlagsFromSymbol(propertySymbol) & ModifierFlags.Private) && + !isPrivateIdentifierPropertyDeclaration(propertySymbol.valueDeclaration)); } /** diff --git a/tests/cases/fourslash/completionListClassPrivateFields.ts b/tests/cases/fourslash/completionListClassPrivateFields.ts new file mode 100644 index 0000000000..f7638047a6 --- /dev/null +++ b/tests/cases/fourslash/completionListClassPrivateFields.ts @@ -0,0 +1,15 @@ +/// + +////class A { +//// #private = 1; +////} +//// +////class B extends A { +//// /**/ +////} + +verify.completions({ + marker: "", + exact: completion.classElementKeywords, + isNewIdentifierLocation: true +}); diff --git a/tests/cases/fourslash/completionListClassPrivateFields_JS.ts b/tests/cases/fourslash/completionListClassPrivateFields_JS.ts new file mode 100644 index 0000000000..49c8d05af6 --- /dev/null +++ b/tests/cases/fourslash/completionListClassPrivateFields_JS.ts @@ -0,0 +1,21 @@ +/// + +// @allowJs: true +// @Filename: a.js +////class A { +//// #private = 1; +////} +//// +////class B extends A { +//// /**/ +////} + +verify.completions({ + marker: "", + exact: [ + { name: "A", sortText: completion.SortText.JavascriptIdentifiers }, + { name: "B", sortText: completion.SortText.JavascriptIdentifiers }, + ...completion.classElementInJsKeywords + ], + isNewIdentifierLocation: true +});