此刻我正在编写带有修复程序的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.并且不应该从分析器/修复程序代码获取这些设置 .