Есть ли способ запретить gofmt преобразовывать функции кода в многострочные, не отключая полностью gofmt? - PullRequest
0 голосов
/ 01 ноября 2019

Я использую Vim версии 8.1.1401 с версией go go1.13.1 linux / amd64. Я пытаюсь отключить gofmt, помещая все скобки if в новую строку, например:

if thing { return }

преобразуется в

if thing {
   return
}

Единственный способ, которым я обнаружил,отключите это, установив:

let g:go_fmt_autosave = 0

, однако, это отключит gofmt в целом. Могу ли я сделать это как-то без полного отключения gofmt?

1 Ответ

0 голосов
/ 01 ноября 2019

Одним словом: Нет .

gofmt по своему замыслу, самоуверенному и не конфигурируемому. Go не сожалеет об этом. Из Go Proverbs :

Стиль Gofmt - не чей-то любимый, а Gofmt - любимый всеми.

Если этоможно было настроить gofmt для этого или что-то еще, он сразу потерял бы большую часть своего значения, то есть раз и навсегда уладил все глупые аргументы форматирования.

Научитесь любить это. Как объясняет связанный видеоклип, подавляющему большинству опытных программистов на Го это нравится. Я ожидаю, что со временем вы тоже это сделаете.


И, как примечание, в вашем конкретном примере есть веская причина, по которой gofmt выбрал этот формат: однострочный, если оператор гораздо менее читабелен. Поместив действие в отдельной строке, для любого читателя сразу становится ясно, что делает код. Рассмотрим эти две альтернативы:

if foo && (bar > baz) || quxx { return foo && bar }

против

if foo && (bar > baz) || quxx {
    return foo && bar
}

Когнитивная нагрузка для разбора первого примера намного больше, чем второго. Даже в очень упрощенном примере, таком как if x { return }, разбиение строк никогда не повредит, и, возможно, это все же улучшает читаемость благодаря большей согласованности.

...