Skip to content

Commit 4f13bcf

Browse files
author
Andy
authored
Fix find-all-references for destructured getter (#17483)
* Fix find-all-references for destructured getter * Handle setter too * Use SymbolFlags.Accessor
1 parent 33cc0a1 commit 4f13bcf

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

src/services/findAllReferences.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -604,11 +604,16 @@ namespace ts.FindAllReferences.Core {
604604

605605
function getPropertySymbolOfObjectBindingPatternWithoutPropertyName(symbol: Symbol, checker: TypeChecker): Symbol | undefined {
606606
const bindingElement = getObjectBindingElementWithoutPropertyName(symbol);
607-
if (bindingElement) {
608-
const typeOfPattern = checker.getTypeAtLocation(bindingElement.parent);
609-
return typeOfPattern && checker.getPropertyOfType(typeOfPattern, (<Identifier>bindingElement.name).text);
607+
if (!bindingElement) return undefined;
608+
609+
const typeOfPattern = checker.getTypeAtLocation(bindingElement.parent);
610+
const propSymbol = typeOfPattern && checker.getPropertyOfType(typeOfPattern, (<Identifier>bindingElement.name).text);
611+
if (propSymbol && propSymbol.flags & SymbolFlags.Accessor) {
612+
// See GH#16922
613+
Debug.assert(!!(propSymbol.flags & SymbolFlags.Transient));
614+
return (propSymbol as TransientSymbol).target;
610615
}
611-
return undefined;
616+
return propSymbol;
612617
}
613618

614619
/**
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/// <reference path="fourslash.ts" />
2+
3+
////class Test {
4+
//// get [|{| "isDefinition": true, "isWriteAccess": true |}x|]() { return 0; }
5+
////
6+
//// set [|{| "isDefinition": true, "isWriteAccess": true |}y|](a: number) {}
7+
////}
8+
////const { [|{| "isDefinition": true, "isWriteAccess": true |}x|], [|{| "isDefinition": true, "isWriteAccess": true |}y|] } = new Test();
9+
////[|x|]; [|y|];
10+
11+
const [x0, y0, x1, y1, x2, y2] = test.ranges();
12+
verify.referenceGroups(x0, [{ definition: "(property) Test.x: number", ranges: [x0, x1, x2] }]);
13+
verify.referenceGroups([x1, x2], [
14+
{ definition: "(property) Test.x: number", ranges: [x0] },
15+
{ definition: "const x: number", ranges: [x1, x2] },
16+
]);
17+
18+
verify.referenceGroups(y0, [{ definition: "(property) Test.y: number", ranges: [y0, y1, y2] }]);
19+
verify.referenceGroups([y1, y2], [
20+
{ definition: "(property) Test.y: number", ranges: [y0] },
21+
{ definition: "const y: number", ranges: [y1, y2] },
22+
]);

0 commit comments

Comments
 (0)