我正在为API迁移(AutoMapper V5 Profiles)编写分析器和codefix,将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
的重构?或者比this LINQPad script更简单。
答案 0 :(得分:1)
在CodeFix中,只需添加格式化程序注释:
SyntaxFactory
.ConstructorDeclaration(constructorIdentifier)
.WithModifiers(SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)))
.WithAttributeLists(oldMethodNode.AttributeLists)
.WithParameterList(newParameterList)
.WithBody(newBody)
.WithTriviaFrom(oldMethodNode)
.WithAdditionalAnnotations(Formatter.Annotation)
这足以在代码修复中发挥作用,因为代码修复基础结构将处理注释。
在CodeFix之外,您可以使用Formatter.Format()
中的Microsoft.CodeAnalysis.Formatting
来明确处理注释。