From 4c278aa33b3fd9d90c38f511b85afb4810d4a5ac Mon Sep 17 00:00:00 2001 From: Alexander T Date: Fri, 22 May 2020 15:11:39 +0300 Subject: [PATCH] fix(34934): exclude private properties from Js completion list --- src/services/completions.ts | 2 +- .../completionsPrivateProperties_Js.ts | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/completionsPrivateProperties_Js.ts diff --git a/src/services/completions.ts b/src/services/completions.ts index 8b9228d344..2eb444d54b 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -1235,7 +1235,7 @@ namespace ts.Completions { // each individual type has. This is because we're going to add all identifiers // anyways. So we might as well elevate the members that were at least part // of the individual types to a higher status since we know what they are. - symbols.push(...getPropertiesForCompletion(type, typeChecker)); + symbols.push(...filter(getPropertiesForCompletion(type, typeChecker), s => typeChecker.isValidPropertyAccessForCompletions(propertyAccess, type, s))); } else { for (const symbol of type.getApparentProperties()) { diff --git a/tests/cases/fourslash/completionsPrivateProperties_Js.ts b/tests/cases/fourslash/completionsPrivateProperties_Js.ts new file mode 100644 index 0000000000..cd11b37af9 --- /dev/null +++ b/tests/cases/fourslash/completionsPrivateProperties_Js.ts @@ -0,0 +1,20 @@ +/// + +// @allowJs: true +// @Filename: a.d.ts +////declare namespace A { +//// class Foo { +//// constructor(); +//// +//// private m1(): void; +//// protected m2(): void; +//// +//// m3(): void; +//// } +////} + +// @filename: b.js +////let foo = new A.Foo(); +////foo./**/ + +verify.completions({ marker: [""], includes: ["m3"], excludes: ["m1", "m2"] });