Подтвердить что ты не робот

Конфигурация Java Coding Style и Emacs cc-mode

Я использую GNU/Emacs HEAD с включенным cc-mode (c-version 5.32.2) на машине Debian GNU/Linux.

Я пытаюсь определить собственный стиль для управления Соглашения о коде для языка программирования Java, Правила стиля кода Android для авторов и некоторые пользовательские правила.

Как начинающий lisp, это не кажется разумным начинать с нуля. Как следствие, я использовал google-c-style в качестве отправной точки, и мне удалось получить предполагаемое поведение для большинства отступов, с исключением на вложенном состоянии (см. фрагмент кода ниже).

Из этого сообщения я определил (arglist-cont-nonempty . ++) в своем пользовательском стиле (полный код: custom-java-style.el). К сожалению, хотя большинство случаев имеют отступы по назначению:

if ((condition1 && condition2)
        || (condition3 && condition4)
        ||!(condition5 && condition6)) {
    doSomethingAboutIt();

    someMethod(longExpression1, longExpression2, longExpression3,
            longExpression4, longExpression5);
}

Вложенные условия имеют неправильный отступ:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
                && deviceRegistred.getName().equalsIgnoreCase(deviceName))) {
    doSomethingAboutIt();
}

Ctrl-c Ctrl+s сообщить Syntactic analysis: ((arglist-cont-nonempty 2447 2450) (arglist-cont-nonempty 2447 2452)) во второй строке, и я, очевидно, должен иметь 16 пробелов (2 раза ++) вместо 8 (++).

Я хотел бы получить следующий отступ:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
        && deviceRegistred.getName().equalsIgnoreCase(deviceName))) {
    doSomethingAboutIt();
}

Я попытался определить условие (,(when (fboundp …))), подобное тому, которое использовалось для statement-cont, но без успеха (отсутствие знаний lisp тоже не помогает).

Теперь, вопрос: мой подход правильный или неправильный? Как я/должен реализовать предполагаемое поведение (т.е. Определить, когда я вложен в условие, чтобы получить правильный отступ)?

(Я не хочу использовать malabar-mode или JDEE, поэтому, пожалуйста, не говорите мне использовать их.)

Приветствия,

Рено

Обновление 2011/12/06 (реакция на комментарии)

Мы не начали бы здесь священной войны. Те, кто хочет использовать Emacs по своим собственным причинам, могут придерживаться Emacs, другие будут делать то, что они хотят...

Говоря это, я работаю в команде, в которой я единственный, кто использует Emacs, другие любят Eclipse. Поскольку я отвечаю за правила кодирования, я работал со своими коллегами, чтобы получить правильные действия сохранения и помочь настроить форматировщик Eclipse. Все, что я мог сказать, это то, что действия Eclipse save и форматирование не совсем просты в настройке... Главное отличие заключается в том, что у вас хороший графический интерфейс с хорошими флажками, но это не помогает значительно уменьшить сложность.

Я придерживаюсь Emacs...

4b9b3361

Ответ 1

Я бы сказал, что Emacs поступает правильно. Рассмотрим этот случай:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
                && deviceRegistred.getName().equalsIgnoreCase(deviceName))
        || otherCondition) {
    doSomethingAboutIt();
}

Если вложенное условие было отступом 8 символов, которые были бы путаным вариантом:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
        && deviceRegistred.getName().equalsIgnoreCase(deviceName))
        || otherCondition) {
    doSomethingAboutIt();
}