From b20331a4db676634238f3bf4a998d6bf51f2e622 Mon Sep 17 00:00:00 2001 From: Wenlu Wang Date: Thu, 11 Mar 2021 01:34:31 +0800 Subject: [PATCH] Fix missing func modifier (#40379) * Fix missing function modifier * Update src/services/refactors/convertArrowFunctionOrFunctionExpression.ts Co-authored-by: Ron Buckton Co-authored-by: Ron Buckton --- .../convertArrowFunctionOrFunctionExpression.ts | 5 ++++- ...rrowFunctionOrFunctionExpression_AsyncModifiers.ts | 11 +++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_AsyncModifiers.ts diff --git a/src/services/refactors/convertArrowFunctionOrFunctionExpression.ts b/src/services/refactors/convertArrowFunctionOrFunctionExpression.ts index dc5948c8987..6987fdd4919 100644 --- a/src/services/refactors/convertArrowFunctionOrFunctionExpression.ts +++ b/src/services/refactors/convertArrowFunctionOrFunctionExpression.ts @@ -208,7 +208,10 @@ namespace ts.refactor.convertArrowFunctionOrFunctionExpression { const { variableDeclaration, variableDeclarationList, statement, name } = variableInfo; suppressLeadingTrivia(statement); - const newNode = factory.createFunctionDeclaration(func.decorators, statement.modifiers, func.asteriskToken, name, func.typeParameters, func.parameters, func.type, body); + + const modifiersFlags = (getCombinedModifierFlags(variableDeclaration) & ModifierFlags.Export) | getEffectiveModifierFlags(func); + const modifiers = factory.createModifiersFromModifierFlags(modifiersFlags); + const newNode = factory.createFunctionDeclaration(func.decorators, length(modifiers) ? modifiers : undefined, func.asteriskToken, name, func.typeParameters, func.parameters, func.type, body); if (variableDeclarationList.declarations.length === 1) { return textChanges.ChangeTracker.with(context, t => t.replaceNode(file, statement, newNode)); diff --git a/tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_AsyncModifiers.ts b/tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_AsyncModifiers.ts new file mode 100644 index 00000000000..2796d88a492 --- /dev/null +++ b/tests/cases/fourslash/refactorConvertArrowFunctionOrFunctionExpression_AsyncModifiers.ts @@ -0,0 +1,11 @@ +/// + +//// const /*x*/a/*y*/ = async () => { return 42; }; + +goTo.select("x", "y"); +edit.applyRefactor({ + refactorName: "Convert arrow function or function expression", + actionName: "Convert to named function", + actionDescription: "Convert to named function", + newContent: `async function a() { return 42; }`, +});