我想创建一个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;
}
}
}
主要要求是:
- 重构的签名是任何带有
- 在一个类中可以有多个这样的方法。
- 合成
Execute()
法必须保留已有的案例,增加新的案例。
[Command]
属性的方法。是否有可能创建这样的重构,以便我可以要求它一次修复项目中的所有实例?这是一个可行性问题,以帮助我避免陷入死胡同,如果有的话。
我会使用分析器+代码修复提供程序。
-
分析器检查
SyntaxKind.Attribute
类型的节点,如果属性与您的CommandAttribute
类型匹配,则报告诊断。 -
代码修复提供程序提供了
RegisterCodeFixesAsync
重构单个属性和自定义FixAllProvider
重构文档/项目/解决方案中的所有属性。
这样,VS会做所有繁重的工作,你的代码修复提供程序会自动获得你感兴趣的范围内所有属性的列表。