diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 7dc96c10804..9e30d23caa1 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -1717,7 +1717,19 @@ namespace ts { export function getSynthesizedDeepCloneWithRenames(node: T, includeTrivia = true, renameMap?: Map, checker?: TypeChecker, callback?: (originalNode: Node, clone: Node) => any): T { let clone; - if (isIdentifier(node) && renameMap && checker) { + if (renameMap && checker && isBindingElement(node) && isIdentifier(node.name) && isObjectBindingPattern(node.parent)) { + const symbol = checker.getSymbolAtLocation(node.name); + const renameInfo = symbol && renameMap.get(String(getSymbolId(symbol))); + + if (renameInfo && renameInfo.text !== (node.name || node.propertyName).getText()) { + clone = createBindingElement( + node.dotDotDotToken, + node.propertyName || node.name, + renameInfo, + node.initializer); + } + } + else if (renameMap && checker && isIdentifier(node) && !(node.parent && node.parent.parent && isBindingElement(node.parent) && isObjectBindingPattern(node.parent.parent))) { const symbol = checker.getSymbolAtLocation(node); const renameInfo = symbol && renameMap.get(String(getSymbolId(symbol))); diff --git a/tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_arrayBindingPatternRename.ts b/tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_arrayBindingPatternRename.ts new file mode 100644 index 00000000000..5847e01d57d --- /dev/null +++ b/tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_arrayBindingPatternRename.ts @@ -0,0 +1,13 @@ +// ==ORIGINAL== + +function /*[#|*/f/*|]*/(): Promise{ + const result = getResult(); + return fetch('https://typescriptlang.org').then(([result]) => { console.log(result) }); +} +// ==ASYNC FUNCTION::Convert to async function== + +async function f(): Promise{ + const result = getResult(); + const [result_1] = await fetch('https://typescriptlang.org'); + console.log(result_1); +} \ No newline at end of file diff --git a/tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_objectBindingPatternRename.ts b/tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_objectBindingPatternRename.ts new file mode 100644 index 00000000000..98b736f788d --- /dev/null +++ b/tests/baselines/reference/convertToAsyncFunction/convertToAsyncFunction_objectBindingPatternRename.ts @@ -0,0 +1,13 @@ +// ==ORIGINAL== + +function /*[#|*/f/*|]*/(): Promise{ + const result = getResult(); + return fetch('https://typescriptlang.org').then(({ result }) => { console.log(result) }); +} +// ==ASYNC FUNCTION::Convert to async function== + +async function f(): Promise{ + const result = getResult(); + const { result: result_1 } = await fetch('https://typescriptlang.org'); + console.log(result_1); +} \ No newline at end of file