Roslyn Code Fix可以在多个独立呼叫站点上运行吗?

时间:2015-09-24 18:44:16

标签: c# visual-studio refactoring roslyn

我想创建一个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()方法必须保留现有案例并添加新案例。

是否有可能创建这样的重构,以便我可以让它一次性修复项目中的所有实例?这是一个可行性问题,可以帮助我避免陷入死胡同,如果有的话。

1 个答案:

答案 0 :(得分:3)

我会使用分析器+代码修复提供程序。

  1. 分析器会检查SyntaxKind.Attribute种类的节点,并在属性与您的CommandAttribute类型匹配时报告诊断。

  2. 代码修复提供程序提供RegisterCodeFixesAsync重构单个属性和自定义FixAllProvider,可以重构文档/项目/解决方案中的所有属性。

  3. 这样,VS可以完成所有繁重工作,您的代码修复提供程序会自动获取您感兴趣的范围内所有属性的列表。