Каков правильный способ отступов Эрланг?
До вчерашнего дня я был счастливым пользователем готового emacs + erlang-mode. Затем мой коллега начал участвовать в проекте (используя какой-либо редактор окон), и, похоже, он не очень доволен смешанным режимом отступа, который по умолчанию используется erlang-mode.
Вот пример. Это часть функции, написанная с использованием автоматического отступа в erlang-mode
handle_info(get_gss_latest_versions, State) ->
GetReqIds = fun(Branch) ->
GetInfoUri = State#state.gss_uri ++ Branch ++ "/api/getinfo",
case ibrowse:send_req(GetInfoUri, [], get, [], [{stream_to, self()}]) of
{ibrowse_req_id, ReqId} ->
{ReqId, Branch};
{error, Reason} ->
Если вы посмотрите ближе, вы увидите, что строка 2 (начиная с GetReqIds) имеет отступы с 4 пробелами. Строка 3 имеет отступ с 3 вкладками. Строка 5 имеет отступы с 3 вкладками + 4 пробела. Строка 6 имеет отступ с 4 вкладками. В результате большинство (немых) редакторов (в отличие от emacs) отображают строки 5 и 6 (те, которые начинаются с {ibrowse и {ReqId) на том же уровне отступов. Который выглядит уродливым. (даже stackoverflow показывает их таким образом).
Я просмотрел несколько выдающихся программных продуктов erlang (например, gproc), и большинство из них, похоже, используют режим отступов только для пробелов.
Итак, мои вопросы:
- Я делаю это неправильно (кажется мне вероятным).
- Если только пробелы являются преобладающим способом отступов, почему erlang-mode не реализует его (или не настроен на его использование по умолчанию)?
- Как настроить erlang-mode для принудительной простоты?
- Что означает "правильный путь"? Такие вещи, как совместимость с перекрестным редактором, кажутся важными, и мы не можем сделать все редакторы такими же умными, как emacs.
Ответы
Ответ 1
Это кажется правильным решением для меня, прямо сейчас (помещено в ~/.emacs):
(add-hook 'erlang-mode-hook '(lambda() (setq indent-tabs-mode nil)))
Я бесстыдно скопировал это отсюда:
http://erlang.2086793.n4.nabble.com/erlang-mode-emacs-tabs-vs-spaces-td2096289.html
Ответ 2
Чтобы вообще отключить вкладки в отступлении не только, но и для erlang-mode, используйте:
(set-default 'indent-tabs-mode nil)