【问题标题】:Resharper - keep named parameters when doing code cleanupResharper - 在进行代码清理时保留命名参数
【发布时间】:2015-09-26 16:55:18
【问题描述】:

我们采用了一种约定,即在调用带有“非显而易见”参数的 C# 函数时,即使没有必要,我们也会使用命名参数。

例如

obj.Process(save: true)

而不是

obj.Process(true)

虽然没有必要,但在浏览代码以查看发生了什么时,它会变得容易得多,尤其是布尔值或幻数。

但是,resharper 的代码清理有删除这些的习惯。我还没有找到一种方法来告诉它保留命名参数 - 有吗?

【问题讨论】:

    标签: c# resharper named-parameters resharper-9.0


    【解决方案1】:

    要在方法调用中显示参数名称,请转到:

    ResharperOptionsCode EditingC#Syntax StyleArguments

    然后将所有下拉值设置为 “命名参数”。

    另外,选中“跳过单个参数”,仅当有多个参数时才显示方法的命名参数。


    上述方法已在Resharper版本2020.2.4

    上得到验证

    【讨论】:

      【解决方案2】:

      在 ReSharper 2018.1 中

      有两个相关步骤。您可能希望两者都做,但这取决于您希望如何配置 ReSharper。

      首先,在Resharper -> Options -> Code Inspection -> Inspection Severity 中,禁用“对文字值使用首选参数样式”代码样式。 (对于布尔值,“[..] for literal values”是相关设置,尽管我选择禁用所有这些设置。)

      此设置也与ReSharper -> Options -> Code Editing -> Code Style -> Arguments 设置相关联,因此这些设置现在应自动更改为“不显示”而不是“提示”:

      其次,由于“应用参数样式(命名与位置)”,无法使用默认的 ReSharper 代码清理配置文件 - 必须在您的代码清理配置文件中禁用此选项。

      【讨论】:

      • 严格来说在清理上下文中(例如使用 cleanupcode.exe cmd 工具),唯一必要的步骤是复制和修改“完全清理”配置文件以不执行“应用”参数样式(命名与位置)”。
      【解决方案3】:

      更新:

      从 v2017.1.3 (2017-08-28) 开始,此解决方案似乎不再适用


      我目前正在使用 ReSharper v2017.1 (2017-06-01),JetBrains 似乎还没有解决这个问题。

      正如@Colin Harkness 所注意到的,目前保留“命名参数”的最后手段是将选项“命名表达式(变量、属性、方法等)”设置为“命名参数”。

      这当然不是最好的出路。

      更新:

      我在 JetBrains 的论坛上发现了一个小技巧。 您可以通过在文件顶部添加这行代码来取消将命名参数视为冗余。

      // ReSharper disable ArgumentsStyleNamedExpression
      

      您必须在 ReSharper 设置中进行一些次要配置。为了保持 // ReSharper disable ArgumentsStyleNamedExpression 的自动添加简单,我已将此指令添加到 File Header Text 中,如图所示. 2.

      图 2 - 添加 ArgumentsStyleNamedExpression 规则

      之后,您必须检查代码清理配置中的更新文件头选项,如图所示。 3

      图 3 - 检查“更新文件头”选项

      在这种情况下,当代码清理开始时,它首先添加 ArgumentsStyleNamedExpression 规则,并将代码样式应用于文件。

      添加此规则后,您可以转到工具|选项 |环境 |字体和颜色 | ReSharper Parameter Identifier 并更改此案例的突出显示颜色,以便在视觉上区分 参数参数名称 em> 如图 4 所示。

      图 4 - 参数名称突出显示


      不幸的是,这种保留参数名称的方式并不总是有效(ReSharper 可以选择性地保留/删除参数名称)。

      【讨论】:

      • @MarcelPopescu,我已经用 v2017.1.3 试过了。这个解决方案似乎不再有效。
      【解决方案4】:

      虽然你可以按照@EricWalker 所说的来实现它,但我想提出另一种选择。

      您可以启动 ReSharper 选项,查找 Inspection Severity 然后转到 冗余显式参数名称规范 并将其更改为 不显示。这样您就不会丢失 删除冗余代码 提供的所有其他良好清理(如删除全名限定符)。

      【讨论】:

      • 谢谢,这正是我想要的(尤其是它可以分别处理常量和其他表达式,这是我们最常见的情况)。可惜你不能说“提示但不清理”。
      • 感谢@Matthias,认为必须有更好的方法,但不知道检查严重性和代码清理是这样链接的。今天学到了一些新东西。
      • 在 ReSharper Ultimate 2016.1.2 中,我必须设置“对命名表达式使用首选参数样式”->“不显示”
      【解决方案5】:

      您要查找的设置位于 Code Cleanup\C#\Remove code redundancies 下

      我知道这可能不是您希望的答案,但您可以通过取消选中该设置来阻止它删除您的参数名称(同时留下所有其他冗余。)

      您或许可以在代码清理中设置不同的配置文件来解决该问题,但您最好向 JetBrains 人员寻求解决方案。

      HTH,
      埃里克

      【讨论】:

        猜你喜欢
        • 2016-05-20
        • 2012-05-21
        • 2011-03-05
        • 1970-01-01
        • 2011-06-01
        • 1970-01-01
        • 2013-05-08
        • 1970-01-01
        • 2010-12-03
        相关资源
        最近更新 更多