From d62bcc5e626c8c1f090a56fdfca033423dd46a42 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 11 Feb 2023 21:33:25 +0300 Subject: [PATCH 1/2] exclude completions of binding pattern variable initializers --- src/services/completions.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/services/completions.ts b/src/services/completions.ts index b75563e87ce4b..0eb8505201a1d 100644 --- a/src/services/completions.ts +++ b/src/services/completions.ts @@ -2468,8 +2468,14 @@ export function getCompletionEntriesFromSymbols( } // Filter out variables from their own initializers // `const a = /* no 'a' here */` - if (tryCast(variableOrParameterDeclaration, isVariableDeclaration) && symbol.valueDeclaration === variableOrParameterDeclaration) { - return false; + if (variableOrParameterDeclaration && tryCast(variableOrParameterDeclaration, isVariableDeclaration)) { + if (symbol.valueDeclaration === variableOrParameterDeclaration) { + return false; + } + // const { a } = /* no 'a' here */; + if (isBindingPattern(variableOrParameterDeclaration.name) && variableOrParameterDeclaration.name.elements.some(e => e === symbol.valueDeclaration)) { + return false; + } } // Filter out parameters from their own initializers From c4d73a0aec1f5522707fd616abb51408193745f9 Mon Sep 17 00:00:00 2001 From: Vitaly Turovsky Date: Sat, 11 Feb 2023 23:53:28 +0300 Subject: [PATCH 2/2] add basic tests! --- ...ompletionListWithoutVariableinitializer.ts | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/cases/fourslash/completionListWithoutVariableinitializer.ts b/tests/cases/fourslash/completionListWithoutVariableinitializer.ts index 5d2a95b743cca..cba6743f3f6c0 100644 --- a/tests/cases/fourslash/completionListWithoutVariableinitializer.ts +++ b/tests/cases/fourslash/completionListWithoutVariableinitializer.ts @@ -9,6 +9,10 @@ //// const fn = (p = /*7*/) => {} //// const { g, h = /*8*/ } = { ... } //// const [ g1, h1 = /*9*/ ] = [ ... ] +//// const { a1 } = a/*10*/; +//// const { a2 } = fn({a: a/*11*/}); +//// const [ a3 ] = a/*12*/; +//// const [ a4 ] = fn([a/*13*/]); verify.completions({ marker: ["1"], @@ -58,3 +62,26 @@ verify.completions({ marker: ["9"], includes: ["a", "b", "c", "d", "e", "fn"], }); + +verify.completions({ + marker: ["10"], + excludes: ["a1"], + isNewIdentifierLocation: true, +}); + +verify.completions({ + marker: ["11"], + excludes: ["a2"], +}); + +verify.completions({ + marker: ["12"], + excludes: ["a3"], + isNewIdentifierLocation: true, +}); + +verify.completions({ + marker: ["13"], + excludes: ["a4"], + isNewIdentifierLocation: true, +});