Поддержка языка VSCode Redhat для форматирования Java принудительно увеличивает максимальную длину строки

#java #visual-studio-code #redhat

#java #visual-studio-code #redhat

Вопрос:

Я использую VS Code IDE для Java project. Я устанавливаю поддержку языка Java (TM) от Red Hat для форматирования кода.

settings.json:

 {
    "java.configuration.updateBuildConfiguration": "automatic",
    "java.debug.settings.hotCodeReplace": "auto",
    "java.format.settings.url": "https://raw.githubusercontent.com/google/styleguide/gh-pages/eclipse-java-google-style.xml",
    "java.format.settings.profile": "GoogleStyle",
}
 

Я пишу такой класс:

 public class Foo {
    private int theFirstVariable, theSecondVariable, theThirdVariable, theFourthVariable, theFifthVariable, theSixthVariable;
    Foo(
        int theFirstVariable,
        int theSecondVariable,
        int theThirdVariable,
        int theFourthVariable,
        int theFifthVariable,
        int theSixthVariable
    ) {
        this.theFirstVariable = theFirstVariable;
        this.theSecondVariable = theSecondVariable;
        this.theThirdVariable = theThirdVariable;
        this.theFourthVariable = theFourthVariable;
        this.theFifthVariable = theFifthVariable;
        this.theSixthVariable = theSixthVariable;
    }
}
 

Когда я форматирую код (нажимаю Ctrl s ), он становится:

 public class Foo {
    private int theFirstVariable, theSecondVariable, theThirdVariable, theFourthVariable,
            theFifthVariable, theSixthVariable;

    Foo(int theFirstVariable, int theSecondVariable, int theThirdVariable, int theFourthVariable,
            int theFifthVariable, int theSixthVariable) {
        this.theFirstVariable = theFirstVariable;
        this.theSecondVariable = theSecondVariable;
        this.theThirdVariable = theThirdVariable;
        this.theFourthVariable = theFourthVariable;
        this.theFifthVariable = theFifthVariable;
        this.theSixthVariable = theSixthVariable;
    }
}
 

В конструкторе кажется, что форматор пытался заполнить все параметры в одну строку, пока не будет превышена максимальная длина строки. Можем ли мы сохранить формат fommer и как это сделать, если сможем?

Ответ №1:

Я попытался создать пользовательский eclipse-java-google-style.xml и изменить, как предложила @Molly Wang. И я нашел некоторые изменения, которые могли бы дать желаемый результат:

 <setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="1" />
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/>
 

После форматирования код становится:

 public class Foo {
    private int theFirstVariable, theSecondVariable, theThirdVariable, theFourthVariable, theFifthVariable, theSixthVariable;
    Foo(
        int theFirstVariable,
        int theSecondVariable,
        int theThirdVariable,
        int theFourthVariable,
        int theFifthVariable,
        int theSixthVariable) {
        this.theFirstVariable = theFirstVariable;
        this.theSecondVariable = theSecondVariable;
        this.theThirdVariable = theThirdVariable;
        this.theFourthVariable = theFourthVariable;
        this.theFifthVariable = theFifthVariable;
        this.theSixthVariable = theSixthVariable;
    }
}
 

Если вы хотите, чтобы в следующей строке был параметр конструктора close paren, добавьте пустую строку следующим образом:

 public class Foo {
    private int theFirstVariable, theSecondVariable, theThirdVariable, theFourthVariable,
        theFifthVariable, theSixthVariable;

    Foo(
        int theFirstVariable,
        int theSecondVariable,
        int theThirdVariable,
        int theFourthVariable,
        int theFifthVariable,
        int theSixthVariable

    ) {
        this.theFirstVariable = theFirstVariable;
        this.theSecondVariable = theSecondVariable;
        this.theThirdVariable = theThirdVariable;
        this.theFourthVariable = theFourthVariable;
        this.theFifthVariable = theFifthVariable;
        this.theSixthVariable = theSixthVariable;
    }
}
 

Ответ №2:

Невозможно сохранить весь требуемый стиль форматирования. но есть необязательная настройка.

Загрузите GoogleStyle.xml и измените настройки:

 <setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="false"/>
 

Затем в Settings.json:

 "java.format.settings.url": "<local path to java-google-style.xml>",
 

Это не приведет к тому, что ваш код будет таким же, как тот, который вы записываете, но, по крайней мере, параметры будут разбиты на строки. Хотя и не так хорошо:

введите описание изображения здесь