Resharper - 在进行代码清理时保留命名参数
Resharper - keep named parameters when doing code cleanup
我们采用了一种约定,即在使用 "non-obvious" 参数调用 C# 函数时,我们会使用命名参数,即使它不是必需的。
例如
obj.Process(save: true)
而不是
obj.Process(true)
虽然没有必要,但在浏览代码以查看正在发生的事情时,它会变得更加容易,尤其是对于布尔值或幻数。
不过resharper的代码清理有去掉这些的习惯。我一直无法找到一种方法来告诉它保留命名参数 - 有吗?
您要查找的设置在代码 Cleanup\C#\Remove code redundancies
下
我知道这可能不是您所希望的答案,但您可以通过取消选中该设置(以及留下所有其他冗余)来阻止它删除您的参数名称。
您可以在代码清理中设置不同的配置文件来解决这个问题,但您最好向 JetBrains 人员寻求解决方案。
HTH,
埃里克
虽然您可以按照@EricWalker 所说的那样实现,但我想提出另一种选择。
您可以启动 ReSharper 选项,查找 Inspection Severity 然后转到 Redundant explicit argument name specification 并将其更改为 不显示。这样你就不会失去删除冗余代码提供的所有其他好的清理(比如删除全名限定符)。
更新:
从 v2017.1.3 (2017-08-28) 开始,此解决方案似乎不再有效
我目前使用的是 ReSharper v2017.1 (2017-06-01),JetBrains 似乎还没有解决这个问题。
正如 @Colin Harkness 注意到的,目前保留 "named parameters" 的最后手段是将选项 "Named expressions (variables, properties, methods, etc)" 设置为 "Named argument"。
这当然不是最好的出路。
更新:
我在 JetBrains 的论坛上发现了一个小技巧。
您可以通过在文件顶部添加这行代码来取消将 命名参数 视为冗余。
// ReSharper disable ArgumentsStyleNamedExpression
您必须在 ReSharper 设置中进行一些小的配置。为了保持自动添加 // ReSharper disable ArgumentsStyleNamedExpression 简单,我已将此指令添加到 File Header Text 如图所示。 2.
图 2 - 添加 ArgumentsStyleNamedExpression 规则
之后,您必须检查更新文件头选项代码清理配置如图所示3
图 3 - 检查 "Update File Header" 选项
在这种情况下,当代码清理启动时,它首先添加 ArgumentsStyleNamedExpression 规则,并将代码样式应用于文件。
添加这条规则后,可以到工具|选项 |环境 |字体和颜色 | ReSharper Parameter Identifier 并更改此案例的突出显示颜色,以便在视觉上区分 arguments 和 parameters names如图4.
图 4 - 参数名称突出显示
不幸的是,这种保留参数名称的方式并不总是有效(ReSharper 可以选择性地keep/remove 参数名称)。
在 ReSharper 2018.1 中
有两个相关步骤。您可能希望两者都执行,但这取决于您希望如何配置 ReSharper。
首先,在Resharper -> Options -> Code Inspection -> Inspection Severity
中,禁用"Use preferred argument style for literal values"代码风格。 (对于布尔值,“[..] for literal values”是相关设置,尽管我选择禁用所有这些设置。)
此设置也链接到 ReSharper -> Options -> Code Editing -> Code Style -> Arguments
设置,因此现在应该自动更改为 "Do not show" 而不是 "Hint":
其次,由于 "Apply arguments style (named vs. positional)",无法使用默认的 ReSharper 代码清理配置文件 - 必须在您的代码清理配置文件中禁用此选项。
要在您的方法调用中显示参数名称,转到:
Resharper
⇨ Options
⇨ Code Editing
⇨ C#
⇨ Syntax Style
⇨ Arguments
然后将所有下拉值设置为“命名参数”。
此外,勾选“跳过单个参数” 以仅在有多个参数时显示该方法的命名参数。
上述方法已在 Resharper 版本 2020.2.4
上验证
我们采用了一种约定,即在使用 "non-obvious" 参数调用 C# 函数时,我们会使用命名参数,即使它不是必需的。
例如
obj.Process(save: true)
而不是
obj.Process(true)
虽然没有必要,但在浏览代码以查看正在发生的事情时,它会变得更加容易,尤其是对于布尔值或幻数。
不过resharper的代码清理有去掉这些的习惯。我一直无法找到一种方法来告诉它保留命名参数 - 有吗?
您要查找的设置在代码 Cleanup\C#\Remove code redundancies
下我知道这可能不是您所希望的答案,但您可以通过取消选中该设置(以及留下所有其他冗余)来阻止它删除您的参数名称。
您可以在代码清理中设置不同的配置文件来解决这个问题,但您最好向 JetBrains 人员寻求解决方案。
HTH,
埃里克
虽然您可以按照@EricWalker 所说的那样实现,但我想提出另一种选择。
您可以启动 ReSharper 选项,查找 Inspection Severity 然后转到 Redundant explicit argument name specification 并将其更改为 不显示。这样你就不会失去删除冗余代码提供的所有其他好的清理(比如删除全名限定符)。
更新:
从 v2017.1.3 (2017-08-28) 开始,此解决方案似乎不再有效
我目前使用的是 ReSharper v2017.1 (2017-06-01),JetBrains 似乎还没有解决这个问题。
正如 @Colin Harkness 注意到的,目前保留 "named parameters" 的最后手段是将选项 "Named expressions (variables, properties, methods, etc)" 设置为 "Named argument"。
这当然不是最好的出路。
更新:
我在 JetBrains 的论坛上发现了一个小技巧。 您可以通过在文件顶部添加这行代码来取消将 命名参数 视为冗余。
// ReSharper disable ArgumentsStyleNamedExpression
您必须在 ReSharper 设置中进行一些小的配置。为了保持自动添加 // ReSharper disable ArgumentsStyleNamedExpression 简单,我已将此指令添加到 File Header Text 如图所示。 2.
之后,您必须检查更新文件头选项代码清理配置如图所示3
在这种情况下,当代码清理启动时,它首先添加 ArgumentsStyleNamedExpression 规则,并将代码样式应用于文件。
添加这条规则后,可以到工具|选项 |环境 |字体和颜色 | ReSharper Parameter Identifier 并更改此案例的突出显示颜色,以便在视觉上区分 arguments 和 parameters names如图4.
图 4 - 参数名称突出显示
不幸的是,这种保留参数名称的方式并不总是有效(ReSharper 可以选择性地keep/remove 参数名称)。
在 ReSharper 2018.1 中
有两个相关步骤。您可能希望两者都执行,但这取决于您希望如何配置 ReSharper。
首先,在Resharper -> Options -> Code Inspection -> Inspection Severity
中,禁用"Use preferred argument style for literal values"代码风格。 (对于布尔值,“[..] for literal values”是相关设置,尽管我选择禁用所有这些设置。)
此设置也链接到 ReSharper -> Options -> Code Editing -> Code Style -> Arguments
设置,因此现在应该自动更改为 "Do not show" 而不是 "Hint":
其次,由于 "Apply arguments style (named vs. positional)",无法使用默认的 ReSharper 代码清理配置文件 - 必须在您的代码清理配置文件中禁用此选项。
要在您的方法调用中显示参数名称,转到:
Resharper
⇨ Options
⇨ Code Editing
⇨ C#
⇨ Syntax Style
⇨ Arguments
然后将所有下拉值设置为“命名参数”。
此外,勾选“跳过单个参数” 以仅在有多个参数时显示该方法的命名参数。
上述方法已在 Resharper 版本 2020.2.4