将MethodDeclarationSyntax转换为ConstructorDeclarationSyntax的规范方法

本文关键字:范方法 方法 MethodDeclarationSyntax 转换 ConstructorDeclarationSyntax | 更新日期: 2023-09-27 18:17:39

我正在为API迁移(AutoMapper V5 Profiles)编写分析器和代码修复,将protected override Configure方法转换为构造函数:

来自:

public class MappingProfile : Profile
{
    protected override Configure()
    {
        CreateMap<Foo, Bar>();
        RecognizePrefix("m_");
    }
}

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<Foo, Bar>();
        RecognizePrefix("m_");
    }
}

我已经找到了一种将方法节点转换为构造函数的方法,但是我一直在努力使空格正确。如果我没有忽略将方法转换为构造函数的一种更简单的方法,那么问题就来了。

所以我的问题是:Roslyn已经给了你一个重构将MethodDeclarationSyntax转换为ConstructorDeclarationSyntax吗?或者有比这个LINQPad脚本更简单的方法

将MethodDeclarationSyntax转换为ConstructorDeclarationSyntax的规范方法

在CodeFix中,只需添加格式化器注释:

SyntaxFactory
    .ConstructorDeclaration(constructorIdentifier)
    .‌​WithModifiers(Syntax‌​Factory.TokenList(Sy‌​ntaxFactory.Token(Sy‌​ntaxKind.PublicKeywo‌​rd)))
    .WithAttributeL‌​ists(oldMethodNode.A‌​ttributeLists)
    .WithP‌​arameterList(newPara‌​meterList)
    .WithBody(‌​newBody)
    .WithTriviaF‌​rom(oldMethodNode)
    .W‌​ithAdditionalAnnotat‌​ions(Formatter.Annot‌​ation)

这足以在代码修复中完成任务,因为代码修复基础结构将处理注释。

在CodeFix之外,您可以使用Microsoft.CodeAnalysis.Formatting中的Formatter.Format()显式地处理注释。