Merge pull request #18423 from amcasey/GH18188

Call getShorthandAssignmentValueSymbol rather than getSymbolAtLocation
This commit is contained in:
Andrew Casey 2017-09-13 16:25:19 -07:00 committed by GitHub
commit aade97111a
3 changed files with 86 additions and 1 deletions

View File

@ -709,6 +709,25 @@ function M3() { }`);
}
M3() { }
constructor() { }
}`);
// Shorthand property names
testExtractMethod("extractMethod29",
`interface UnaryExpression {
kind: "Unary";
operator: string;
operand: any;
}
function parseUnaryExpression(operator: string): UnaryExpression {
[#|return {
kind: "Unary",
operator,
operand: parsePrimaryExpression(),
};|]
}
function parsePrimaryExpression(): any {
throw "Not implemented";
}`);
});

View File

@ -1161,7 +1161,11 @@ namespace ts.refactor.extractMethod {
}
function recordUsagebySymbol(identifier: Identifier, usage: Usage, isTypeName: boolean) {
const symbol = checker.getSymbolAtLocation(identifier);
// If the identifier is both a property name and its value, we're only interested in its value
// (since the name is a declaration and will be included in the extracted range).
const symbol = identifier.parent && isShorthandPropertyAssignment(identifier.parent) && identifier.parent.name === identifier
? checker.getShorthandAssignmentValueSymbol(identifier.parent)
: checker.getSymbolAtLocation(identifier);
if (!symbol) {
// cannot find symbol - do nothing
return undefined;

View File

@ -0,0 +1,62 @@
// ==ORIGINAL==
interface UnaryExpression {
kind: "Unary";
operator: string;
operand: any;
}
function parseUnaryExpression(operator: string): UnaryExpression {
return {
kind: "Unary",
operator,
operand: parsePrimaryExpression(),
};
}
function parsePrimaryExpression(): any {
throw "Not implemented";
}
// ==SCOPE::inner function in function 'parseUnaryExpression'==
interface UnaryExpression {
kind: "Unary";
operator: string;
operand: any;
}
function parseUnaryExpression(operator: string): UnaryExpression {
return /*RENAME*/newFunction();
function newFunction() {
return {
kind: "Unary",
operator,
operand: parsePrimaryExpression(),
};
}
}
function parsePrimaryExpression(): any {
throw "Not implemented";
}
// ==SCOPE::function in global scope==
interface UnaryExpression {
kind: "Unary";
operator: string;
operand: any;
}
function parseUnaryExpression(operator: string): UnaryExpression {
return /*RENAME*/newFunction(operator);
}
function newFunction(operator: string) {
return {
kind: "Unary",
operator,
operand: parsePrimaryExpression(),
};
}
function parsePrimaryExpression(): any {
throw "Not implemented";
}