我想创建一个Roslyn代码修复程序来更改属性代码,例如:
public class CommandHandler
{
[Command("Cmd1")]
public void Foo()
{
// do something
}
[Command("Cmd2")]
public void Bar()
{
// do something
}
}
到此:
public class CommandHandler
{
public void Foo()
{
// do something
}
public void Bar()
{
// do something
}
public void Execute(string command)
{
switch(command)
{
case "Cmd1":
Foo();
break;
case "Cmd2":
Bar();
break;
}
}
}
主要要求是:
[Command]
属性的任何方法。Execute()
方法必须保留现有案例并添加新案例。是否有可能创建这样的重构,以便我可以让它一次性修复项目中的所有实例?这是一个可行性问题,可以帮助我避免陷入死胡同,如果有的话。
答案 0 :(得分:3)
我会使用分析器+代码修复提供程序。
分析器会检查SyntaxKind.Attribute
种类的节点,并在属性与您的CommandAttribute
类型匹配时报告诊断。
代码修复提供程序提供RegisterCodeFixesAsync
重构单个属性和自定义FixAllProvider
,可以重构文档/项目/解决方案中的所有属性。
这样,VS可以完成所有繁重工作,您的代码修复提供程序会自动获取您感兴趣的范围内所有属性的列表。