【问题标题】:How to stop Resharper from line breaking after return keyword for long lines?如何在长行的返回关键字后阻止 Resharper 换行?
【发布时间】: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

标签: c# resharper resharper-8.0


【解决方案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'单独放在一条线上”......这对我来说似乎是一个缺陷,因为它在“总是切碎”上做正确的事情,但在“如果长时间切碎”上做错事......
  • 在上面添加了更新,显示了“始终切”和“如果长切”之间的行为差​​异...
猜你喜欢
  • 2018-01-07
  • 1970-01-01
  • 2014-08-23
  • 2023-03-31
  • 2013-09-12
  • 2013-08-04
  • 1970-01-01
  • 1970-01-01
  • 2016-05-11
相关资源
最近更新 更多