此刻我正在编写带有修复程序的Roslyn分析器,该修复程序检查构造函数参数是否检查为null . 如果没有,修复者将添加该检查 . 所以,基本上是代码
public Foo(string param1)
{
}
它应该产生
public Foo(string param1)
{
if (param1 == null)
throw new ArumentNullException(nameof(param1));
}
但在某些情况下,代码风格可能会有所不同,并且希望使用大括号来获得“if”
public Foo(string param1)
{
if (param1 == null)
{
throw new ArumentNullException(nameof(param1));
}
}
甚至(不确定是否有任何设置,也许我会为它添加单独的修复程序):
public Foo(string param1)
{
this.param1 = param1 ?? throw new ArumentNullException(nameof(param1));
}
因此,有许多可能的修复选项,我想知道 - 是否可以读取修复程序内的代码样式设置?我查过了
DocumentOptionSet options = context.Document.GetOptionsAsync()
但没有找到如何正确使用它,甚至没有确定它是我需要的 . 将欣赏任何提示和想法
UPDATE 1 所以,似乎我发现它应该如何工作:
options.GetOption(CodeStyleOptions.QualifyFieldAccess);
我可以看到(CSharpCodeStyleOptions.cs)所需的选项 PreferBraces . 但是,这个类是内部的,我不能在修复程序中使用它 .
UPDATE 2 我尝试了 Simplifier.ReduceAsync()
方法,但似乎没有做我需要的 .
UPDATE 3 所以,似乎我们都认为这个属性是错误的,因为它的命名 . Here is my issue in Roslyn github . 主要想法 - "Prefer braces"选项应命名为"Require braces" . New issue for this change.并且不应该从分析器/修复程序代码获取这些设置 .