如何在长行的返回关键字后阻止 Resharper 换行?

Posted

技术标签:

【中文标题】如何在长行的返回关键字后阻止 Resharper 换行?【英文标题】:How to stop Resharper from line breaking after return keyword for long lines? 【发布时间】:2013-12-28 20:57:05 【问题描述】:

当我使用 Resharper CTRL + ALT + SHIFT + F 自动格式化超过最大行长度的行(在我的情况下说它是 80 个字符)时,我得到以下信息:

    return
        View(new ViewModel
        
            Identifier = identifier,
            Files = service.AllFiles()
        );

但我真正想要的是它不要在“return”关键字之后换行(即在一行中没有单独的 return 关键字),如下所示:

    return View(new ViewModel
    
        Identifier = identifier,
        Files = service.AllFiles()
    );

有谁知道如何“配置”Resharper 来实现这一点? :)

这是另一个例子,这是我现在看到的:

    return
        repository.Session.CreateCriteria(typeof(SomeType))
                  .Add(Expression.Eq("Identifier", identifier))
                  .UniqueResult<SomeType>();

当我真的想看时:

    return repository.Session.CreateCriteria(typeof(SomeType))
                     .Add(Expression.Eq("Identifier", identifier))
                     .UniqueResult<SomeType>();

更新:

这里是“永远砍”:

    return View(new OrganisationFileLoadViewModel
    
        Identifier = identifier,
        AllExistingOrganisationFiles = nmdsOrganisationFileLoadService.AllNMDSOrganisationFiles()
    );

这里是“如果长就砍”:

    return
        View(new OrganisationFileLoadViewModel
        
            Identifier = identifier,
            AllExistingOrganisationFiles = nmdsOrganisationFileLoadService.AllNMDSOrganisationFiles()
        );

【问题讨论】:

您是否已将此错误报告给 JetBrains? 我很高兴这绝对是一个错误,而不仅仅是我的设置不正确......? 这绝对是一个错误。 已经报告了类似的问题,尽管没有一个得到修复 - 请参阅 youtrack.jetbrains.com/issue/RSRP-274953 【参考方案1】:

Resharper -&gt; Options -&gt; (Code Editing) C# -&gt; Formatting Style -&gt; Line Breaks and Wrapping

换行有很多设置。 Wrap long lines 的默认值通常是 120 字符。这可能会触发您的休息,因为您设置为80 或 Resharper 8.0 可能有更新的退货选项。上面的路径是针对 7.0 的,但我相信它与 8.0 相同或至少相似。

很好的是,它们向您展示了您所做更改的示例,因此您不必立即对其进行测试。

【讨论】:

我正在寻找一个选项来阻止 R# 将“return”关键字单独放在一行中(如我上面的示例所示)。我在您所指的部分中找不到该选项。 这只会降低问题出现的可能性。它不能解决它。我将 ReSharper 设置为在 120 个字符后中断,但很长的行仍然会在尴尬的地方中断。 另外,我在 150 个字符处换行(非常适合我的 1920x1200 屏幕和大字体),但当然我仍然偶尔会换行,我发现自己手动引入中间变量只是为了避免换行R# 中的“gunk”,这太可怕了,我讨厌自己这样做...... 是的,我并不是说可以做到。只是指向换行的选项。您可能需要申请 JetBrains 未来版本的选项。【参考方案2】:

没有特殊选项可以关闭“返回后包装”。

1) 我无法重现第一个代码 sn-p 中所示的类似代码格式。但是,我建议您尝试将此设置更改为“简单包装”: ReSharper | Options | Code Editing | C# | Formatting Style | Line Breaks and Wrapping | Line Wrapping | Wrap invocation arguments

2) 就我而言,以下更改对我有帮助:ReSharper | Options | Code Editing | C# | Formatting Style | Line Breaks and Wrapping | Line Wrapping | Wrap chained method calls | Select "Chop always"

【讨论】:

我已将它们全部更改为“Simple Wrap”,这并没有修复返回后的中断... 然后我也将它们全部改回“如果长则切”,这也无济于事(返回本身仍然在线)。 然后,当我转到“始终切”时,我得到了正确的行为(即它不会将返回单独放在一行上)! #WINNING,但是我的所有代码看起来都很糟糕,因为它是 always 切碎的,这使得应该是一个小的链式方法调用或对象/集合初始化程序(即应该放在一行上)占用 3-4不必要的行... 我真正想要的是a)“如果长则切”+ c)“但不要将'return'单独放在一条线上”......这对我来说似乎是一个缺陷,因为它在“总是切碎”上做正确的事情,但在“如果长时间切碎”上做错事...... 在上面添加了更新,显示了“始终切”和“如果长切”之间的行为差​​异...

以上是关于如何在长行的返回关键字后阻止 Resharper 换行?的主要内容,如果未能解决你的问题,请参考以下文章

ReSharper 在 VS2013 中阻止键盘输入

一个可能的 Resharper 错误还是我只是错过了一些微妙的东西?

如何使用 ReSharper SDK 确定方法的返回类型?

在drupal模板项目上运行Lando start或rebuild后如何阻止此错误返回

Resharper:循环后自动插入大括号

如何在 xUnit 测试项目(.NET Core)中完成集成测试后关闭 Resharper 测试运行器?