Skip to content

Commit 458c5e6

Browse files
Zzzensandersn
andauthored
fix(53138): go-to-definition not working on expression of SatisfiesExpression (#53164)
Co-authored-by: Nathan Shively-Sanders <[email protected]>
1 parent df3bec6 commit 458c5e6

File tree

3 files changed

+60
-3
lines changed

3 files changed

+60
-3
lines changed

src/services/goToDefinition.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ export function getDefinitionAtPosition(program: Program, sourceFile: SourceFile
221221
if (node.parent.kind === SyntaxKind.ShorthandPropertyAssignment) {
222222
const shorthandSymbol = typeChecker.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);
223223
const definitions = shorthandSymbol?.declarations ? shorthandSymbol.declarations.map(decl => createDefinitionInfo(decl, typeChecker, shorthandSymbol, node, /*unverified*/ false, failedAliasResolution)) : emptyArray;
224-
return concatenate(definitions, getDefinitionFromObjectLiteralElement(typeChecker, node) || emptyArray);
224+
return concatenate(definitions, getDefinitionFromObjectLiteralElement(typeChecker, node));
225225
}
226226

227227
// If the node is the name of a BindingElement within an ObjectBindingPattern instead of just returning the
@@ -245,7 +245,8 @@ export function getDefinitionAtPosition(program: Program, sourceFile: SourceFile
245245
});
246246
}
247247

248-
return concatenate(fileReferenceDefinition, getDefinitionFromObjectLiteralElement(typeChecker, node) || getDefinitionFromSymbol(typeChecker, symbol, node, failedAliasResolution));
248+
const objectLiteralElementDefinition = getDefinitionFromObjectLiteralElement(typeChecker, node);
249+
return concatenate(fileReferenceDefinition, objectLiteralElementDefinition.length ? objectLiteralElementDefinition : getDefinitionFromSymbol(typeChecker, symbol, node, failedAliasResolution));
249250
}
250251

251252
/**
@@ -278,6 +279,7 @@ function getDefinitionFromObjectLiteralElement(typeChecker: TypeChecker, node: N
278279
getDefinitionFromSymbol(typeChecker, propertySymbol, node));
279280
}
280281
}
282+
return emptyArray;
281283
}
282284

283285
function getDefinitionFromOverriddenMember(typeChecker: TypeChecker, node: Node) {
@@ -366,7 +368,7 @@ export function getTypeDefinitionAtPosition(typeChecker: TypeChecker, sourceFile
366368
const typeDefinitions = fromReturnType && fromReturnType.length !== 0 ? fromReturnType : definitionFromType(typeAtLocation, typeChecker, node, failedAliasResolution);
367369
return typeDefinitions.length ? typeDefinitions
368370
: !(symbol.flags & SymbolFlags.Value) && symbol.flags & SymbolFlags.Type ? getDefinitionFromSymbol(typeChecker, skipAlias(symbol, typeChecker), node, failedAliasResolution)
369-
: undefined;
371+
: undefined;
370372
}
371373

372374
function definitionFromType(type: Type, checker: TypeChecker, node: Node, failedAliasResolution: boolean | undefined): readonly DefinitionInfo[] {
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// === goToDefinition ===
2+
// === /tests/cases/fourslash/goToDefinitionSatisfiesExpression1.ts ===
3+
// const STRINGS = {
4+
// /*GOTO DEF*/<|[|{| textSpan: true |}title|]: 'A Title'|>,
5+
// } satisfies Record<string,string>;
6+
//
7+
// //somewhere in app
8+
// STRINGS.title
9+
10+
// === Details ===
11+
[
12+
{
13+
"kind": "property",
14+
"name": "title",
15+
"containerName": "__object",
16+
"isLocal": false,
17+
"isAmbient": false,
18+
"unverified": false,
19+
"failedAliasResolution": false
20+
}
21+
]
22+
23+
24+
25+
// === goToDefinition ===
26+
// === /tests/cases/fourslash/goToDefinitionSatisfiesExpression1.ts ===
27+
// const STRINGS = {
28+
// <|[|title|]: 'A Title'|>,
29+
// } satisfies Record<string,string>;
30+
//
31+
// //somewhere in app
32+
// STRINGS./*GOTO DEF*/title
33+
34+
// === Details ===
35+
[
36+
{
37+
"kind": "property",
38+
"name": "title",
39+
"containerName": "__object",
40+
"isLocal": false,
41+
"isAmbient": false,
42+
"unverified": false,
43+
"failedAliasResolution": false
44+
}
45+
]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/// <reference path="./fourslash.ts"/>
2+
3+
////const STRINGS = {
4+
//// [|/*definition*/title|]: 'A Title',
5+
////} satisfies Record<string,string>;
6+
////
7+
//////somewhere in app
8+
////STRINGS.[|/*usage*/title|]
9+
10+
verify.baselineGoToDefinition("definition", "usage")

0 commit comments

Comments
 (0)