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. 分析器检查SyntaxKind.Attribute类型的节点,如果属性与您的CommandAttribute类型匹配,则报告诊断。

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

这样,VS会做所有繁重的工作,你的代码修复提供程序会自动获得你感兴趣的范围内所有属性的列表。

最新更新