带有checkstyle和sonarlint的Eclipse格式化程序

时间:2018-08-22 13:23:57

标签: eclipse checkstyle formatter sonarlint

我已安装了此插件,并且似乎未考虑Eclipse Formatter。

例如,我的链功能看起来像Formatter中的以下代码:

stringB.append("a")
       .append("b")
       .append("c")

但是当我要求eclipse自动格式化(我猜是使用格式化程序)时,代码放置如下:

stringB.append("a").append("b").append("c")

知道为什么会这样吗? CheckStyle是否覆盖了Eclipse定义的Formatter。我应该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

  

知道为什么会这样吗?

这可能正在发生,因为这可能是您使用的格式化程序的默认行为。为防止这种情况,您可以选中名为从不加入已经包装好的行的框:

neverJoinImage

但是,有一个更好的解决方案(在下面详细介绍),甚至不需要选中该框。

  

CheckStyle是否覆盖了我的Eclipse定义的格式化程序。

否,但是您可以轻松确认此问题不是由Checkstyle引起的:

  • 使用每个链接方法在新行上格式化一些代码。
  • 暂时关闭CheckStyle: {项目}->右键单击-> CheckStyle->停用Checkstyle
  • 设置代码格式( Ctrl-Shift-F )。您应该看到格式问题仍然存在。
  

我应该如何解决此问题?

您需要修改格式化程序的设置:

  • 窗口>首选项> Java>代码样式>格式化程序
  • 点击编辑... 按钮。 (这假设您已经创建了自己的活动配置文件进行格式化。如果没有,则需要单击 New ... 按钮并首先执行该操作。)< / li>
  • 在打开的用于修改配置文件设置的窗口中,在左列中导航至换行>换行设置>函数调用>合格调用
  • 该行上有三个图标,必须正确设置每个图标:

    • 单击最左侧的图标,然后从上下文菜单中选择最后一个选项包装所有元素,除非不需要第一个元素
    • 单击中间图标。这是一个拨动开关,单击一次将获得一个边框。即使行短于最大行宽,这也会设置选项强制拆分
    • 单击最右边的图标,然后从上下文菜单中选择最终选项在列上缩进

      Invocations

应用这些更改,然后重新格式化代码。现在,格式化程序应按照您指定的方式运行。这是一些代码的示例,这些代码在链接方法调用的格式方面存在各种问题:

    List<String> months = Arrays.asList("January", "February", "March", "April", "May", "June");
    List<String> months5 = months.stream().filter(s -> s.length() == 5).collect(Collectors.toList());
    StringBuilder stA = new StringBuilder();
    StringBuilder stringB = new StringBuilder();
    StringBuilder thisIsStringC = new StringBuilder();

    stA.append("a").append("b").append("c");

    stringB.append("a")
        .append("b")
        .append("c");

    stringB.append("d").append("e")
                             .append("f");

    thisIsStringC  .append("a")
                   .append("b")
                   .append("c");

    thisIsStringC.append("d")
                 .append("e");

这是使用上述设置重新格式化( Ctrl-Shift-F )后的外观:

    List<String> months = Arrays.asList("January", "February", "March", "April", "May", "June");
    List<String> months5 = months.stream()
                                 .filter(s -> s.length() == 5)
                                 .collect(Collectors.toList());
    StringBuilder stA = new StringBuilder();
    StringBuilder stringB = new StringBuilder();
    StringBuilder thisIsStringC = new StringBuilder();

    stA.append("a")
       .append("b")
       .append("c");

    stringB.append("a")
           .append("b")
           .append("c");

    stringB.append("d")
           .append("e")
           .append("f");

    thisIsStringC.append("a")
                 .append("b")
                 .append("c");

    thisIsStringC.append("d")
                 .append("e");