Insert async keyword as last modifier (#27491)

This commit is contained in:
Benjamin Lichtman 2018-10-01 17:43:17 -07:00 committed by Andy
parent 70e26fc701
commit f356cd6c89
5 changed files with 40 additions and 1 deletions

View file

@ -68,7 +68,7 @@ namespace ts.codefix {
}
// add the async keyword
changes.insertModifierBefore(sourceFile, SyntaxKind.AsyncKeyword, functionToConvert);
changes.insertLastModifierBefore(sourceFile, SyntaxKind.AsyncKeyword, functionToConvert);
function startTransformation(node: CallExpression, nodeToReplace: Node) {
const newNodes = transformExpression(node, transformer, node);

View file

@ -315,6 +315,16 @@ namespace ts.textChanges {
this.replaceRange(sourceFile, { pos, end: pos }, createToken(modifier), { suffix: " " });
}
public insertLastModifierBefore(sourceFile: SourceFile, modifier: SyntaxKind, before: Node): void {
if (!before.modifiers) {
this.insertModifierBefore(sourceFile, modifier, before);
return;
}
const pos = before.modifiers.end;
this.replaceRange(sourceFile, { pos, end: pos }, createToken(modifier), { prefix: " " });
}
public insertCommentBeforeLine(sourceFile: SourceFile, lineNumber: number, position: number, commentText: string): void {
const lineStartPosition = getStartPositionOfLine(lineNumber, sourceFile);
const startPosition = getFirstNonSpaceCharacterPosition(sourceFile.text, lineStartPosition);

View file

@ -1254,6 +1254,11 @@ function [#|main2|]() {
.then(() => { console.log("."); return delay(500); })
.then(() => { console.log("."); return delay(500); })
}
`);
_testConvertToAsyncFunction("convertToAsyncFunction_exportModifier", `
export function [#|foo|]() {
return fetch('https://typescriptlang.org').then(s => console.log(s));
}
`);
});

View file

@ -0,0 +1,12 @@
// ==ORIGINAL==
export function /*[#|*/foo/*|]*/() {
return fetch('https://typescriptlang.org').then(s => console.log(s));
}
// ==ASYNC FUNCTION::Convert to async function==
export async function foo() {
const s = await fetch('https://typescriptlang.org');
return console.log(s);
}

View file

@ -0,0 +1,12 @@
// ==ORIGINAL==
export function /*[#|*/foo/*|]*/() {
return fetch('https://typescriptlang.org').then(s => console.log(s));
}
// ==ASYNC FUNCTION::Convert to async function==
export async function foo() {
const s = await fetch('https://typescriptlang.org');
return console.log(s);
}