go-to-definition with test cases
This commit is contained in:
parent
9f284184be
commit
d52b096d55
|
@ -3418,6 +3418,23 @@ module ts {
|
|||
|
||||
var result: DefinitionInfo[] = [];
|
||||
|
||||
// Because name in short-hand property assignment has two different meanings: property name and property value,
|
||||
// using go-to-definition at such position should go to the variable declaration of the property value rather than
|
||||
// go to the declaration of the property name (in this case stay at the same position). However, if go-to-defition
|
||||
// is performed at the location of property accessing, we would like to go to defition of the property in the short-hand
|
||||
// assignment. Such case is handled as normal by below code section.
|
||||
if (node.parent.kind === SyntaxKind.ShorthandPropertyAssignment && !(symbol.flags & SymbolFlags.Transient)) {
|
||||
var shorthandSymbol = typeInfoResolver.getShorthandAssignmentValueSymbol(symbol.valueDeclaration);
|
||||
var shorthandDeclarations = shorthandSymbol.getDeclarations();
|
||||
var shorthandSymbolKind = getSymbolKind(shorthandSymbol, typeInfoResolver);
|
||||
var shorthandSymbolName = typeInfoResolver.symbolToString(shorthandSymbol);
|
||||
var shorthandContainerName = typeInfoResolver.symbolToString(symbol.parent, node);
|
||||
forEach(shorthandDeclarations, declaration => {
|
||||
result.push(getDefinitionInfo(declaration, shorthandSymbolKind, shorthandSymbolName, shorthandContainerName));
|
||||
});
|
||||
return result
|
||||
}
|
||||
|
||||
var declarations = symbol.getDeclarations();
|
||||
var symbolName = typeInfoResolver.symbolToString(symbol); // Do not get scoped name, just the name of the symbol
|
||||
var symbolKind = getSymbolKind(symbol, typeInfoResolver);
|
||||
|
|
23
tests/cases/fourslash/goToDefinitionShorthandProperty.ts
Normal file
23
tests/cases/fourslash/goToDefinitionShorthandProperty.ts
Normal file
|
@ -0,0 +1,23 @@
|
|||
/// <reference path='fourslash.ts' />
|
||||
|
||||
//// var /*valueDeclaration1*/name = "hello";
|
||||
//// var /*valueDeclaration2*/id = 100000;
|
||||
//// declare var /*valueDeclaration3*/id;
|
||||
//// var obj = {/*valueDefition1*/name, /*valueDefinition2*/id};
|
||||
//// obj./*valueReference1*/name;
|
||||
//// obj./*valueReference2*/id;
|
||||
|
||||
goTo.marker("valueDefition1");
|
||||
goTo.definition();
|
||||
verify.caretAtMarker("valueDeclaration1");
|
||||
|
||||
goTo.marker("valueDefinition2");
|
||||
goTo.definition(0);
|
||||
verify.caretAtMarker("valueDeclaration2");
|
||||
goTo.definition(1);
|
||||
verify.caretAtMarker("valueDeclaration3");
|
||||
|
||||
goTo.marker("valueReference1");
|
||||
verify.caretAtMarker("valueDefinition1");
|
||||
goTo.marker("valueReference2");
|
||||
verify.caretAtMarker("valueDefinition2");
|
Loading…
Reference in a new issue