在 Roslyn Fixer 中获取样式设置

Den*_*dan 5 c# visual-studio roslyn

目前,我正在编写带有修复程序的 Roslyn 分析器,用于检查构造函数参数是否为空。如果没有,修复程序将添加该检查。所以,基本上对于代码

public Foo(string param1)
{        
}
Run Code Online (Sandbox Code Playgroud)

它应该产生

public Foo(string param1)
{
    if (param1 == null)
       throw new ArumentNullException(nameof(param1));
}
Run Code Online (Sandbox Code Playgroud)

但在某些情况下,代码风格可能会有所不同,并且需要使用带大括号的“if”,例如

public Foo(string param1)
{
    if (param1 == null)
    {
         throw new ArumentNullException(nameof(param1));
    }
}
Run Code Online (Sandbox Code Playgroud)

甚至(不确定是否有任何设置,也许我会为其添加单独的修复程序):

public Foo(string param1)
{
    this.param1 = param1 ?? throw new ArumentNullException(nameof(param1));
}
Run Code Online (Sandbox Code Playgroud)

因此,有很多可能的修复选项,我想知道 - 是否可以读取修复程序内部的代码样式设置?我查过

DocumentOptionSet options = context.Document.GetOptionsAsync()
Run Code Online (Sandbox Code Playgroud)

但没有找到如何正确使用它,甚至不确定它是我需要的。将不胜感激任何提示和想法

更新 1 那么,似乎我找到了它应该如何工作:

options.GetOption(CodeStyleOptions.QualifyFieldAccess);
Run Code Online (Sandbox Code Playgroud)

我可以看到(CSharpCodeStyleOptions.cs)以及所需的选项PreferBraces。但是,这个类是内部的,我不能在修复程序中使用它。

更新2 我尝试了Simplifier.ReduceAsync()方法,但似乎它没有达到我的需要。

更新 3 因此,由于它的命名,我们似乎都错误地对待了该属性。 这是我在 Roslyn github 中的问题。主要思想 - “首选大括号”选项应命名为“需要大括号”。此更改的新问题。 并且不应该从分析器/修复器代码中获取这些设置。