簡體   English   中英

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

[英]Eclipse formatter with checkstyle and sonarlint

我已經安裝了此插件,並且似乎未考慮Eclipse Formatter。

例如,我的鏈功能看起來像Formatter中的以下代碼:

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

但是,當我要求eclipse自動格式化(我猜是使用格式化程序)時,代碼如下所示:

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

知道為什么會這樣嗎? CheckStyle是否覆蓋了Eclipse定義的Formatter。 我應該如何解決這個問題?

知道為什么會這樣嗎?

這可能是發生的,因為這可能是您使用的格式化程序的默認行為。 為防止這種情況,您可以選中名為“ 從不加入已包裝的行”的框:

neverJoinImage

但是,有一個更好的解決方案(在下面詳細介紹),甚至不需要選中該框。

CheckStyle是否覆蓋了Eclipse定義的Formatter。

不,但是您可以輕松確認此問題不是由Checkstyle引起的:

  • 使用每個鏈接方法在新行上格式化一些代碼。
  • 暫時關閉CheckStyle: {項目}->右鍵單擊-> CheckStyle->停用Checkstyle
  • 格式化代碼( Ctrl-Shift-F )。 您應該看到格式問題仍然存在。

我應該如何解決這個問題?

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

  • 窗口>首選項> Java>代碼樣式>格式化程序
  • 單擊編輯...按鈕。 (這假設您已經創建了自己的Active Profile進行格式化。如果沒有,則需要單擊New ...按鈕,然后首先執行該操作。)
  • 在打開的用於修改配置文件設置的窗口中,在左列中導航至Line Wrapping> Wrapping settings> Function Calls> Qualified 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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM