Стиль Java Coding Style и настройка cc-режима Emacs
Я использую GNU/Emacs HEAD с включенным cc-режимом (c-версия 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
но безуспешно (мое отсутствие знаний о шутках тоже не помогает).
Теперь вопрос: мой подход правильный или неправильный? Как я мог / должен реализовать намеченное поведение (то есть определить, когда я нахожусь во вложенном состоянии, чтобы получить правильный отступ)?
(Я не хочу использовать malabar-mode или JDEE, поэтому, пожалуйста, не говорите мне использовать их.)
Ура,
Renaud
Обновление 2011/12/06 (реагирование на комментарии)
Мы бы не начали здесь священную войну. Те, кто хочет использовать Emacs по своим собственным причинам, могут придерживаться Emacs, остальные будут делать то, что хотят...
Сказав это, я работаю в команде, в которой я единственный, кто использует Emacs, остальные любят Eclipse. Поскольку я отвечаю за правила кодирования, я работал со своими коллегами, чтобы получить правильные действия по сохранению и помочь настроить форматтер Eclipse. Все, что я могу сказать, это то, что: действия по сохранению и форматирование Eclipse не так просты в настройке… Основное отличие состоит в том, что у вас есть хороший графический интерфейс с красивыми флажками, но это не сильно помогает уменьшить сложность.
Я придерживаюсь Emacs...
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();
}