将 MethodDeclarationSyntax 转换为 ConstructorDeclarationSyntax 的规范方法是什么?
What is the canonical way to convert a MethodDeclarationSyntax to a ConstructorDeclarationSyntax?
我正在为 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
的重构?或者比 this LINQPad script.
更简单的方法
在 CodeFix 中,只需添加格式化程序注释:
SyntaxFactory
.ConstructorDeclaration(constructorIdentifier)
.WithModifiers(SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)))
.WithAttributeLists(oldMethodNode.AttributeLists)
.WithParameterList(newParameterList)
.WithBody(newBody)
.WithTriviaFrom(oldMethodNode)
.WithAdditionalAnnotations(Formatter.Annotation)
这足以在代码修复中发挥作用,因为代码修复基础结构将处理注释。
在 CodeFix 之外,您可以使用 Microsoft.CodeAnalysis.Formatting
中的 Formatter.Format()
来显式处理注释。
我正在为 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
的重构?或者比 this LINQPad script.
在 CodeFix 中,只需添加格式化程序注释:
SyntaxFactory
.ConstructorDeclaration(constructorIdentifier)
.WithModifiers(SyntaxFactory.TokenList(SyntaxFactory.Token(SyntaxKind.PublicKeyword)))
.WithAttributeLists(oldMethodNode.AttributeLists)
.WithParameterList(newParameterList)
.WithBody(newBody)
.WithTriviaFrom(oldMethodNode)
.WithAdditionalAnnotations(Formatter.Annotation)
这足以在代码修复中发挥作用,因为代码修复基础结构将处理注释。
在 CodeFix 之外,您可以使用 Microsoft.CodeAnalysis.Formatting
中的 Formatter.Format()
来显式处理注释。