Как заставить clang-format закрывать фигурные скобки на одной строке

В основном стиль отступа, который я хотел бы получить, описан в Википедии как "стиль Лиспа" :

while (x == y) {
    something();
    somethingelse(); }

Я использую собственный .clang-format файл (версия 3.8), но не нашел подходящего варианта.

Заранее спасибо.


person mmj    schedule 06.07.2016    source источник
comment
Не ответ на ваш вопрос (следовательно, комментарий), а каждому свое; лично я не могу выдерживать этот формат, предпочитая форматирование Allman , как и большая часть остального человечества. Но желаю удачи. Интересно, упражнение.   -  person WhozCraig    schedule 06.07.2016
comment
@WhozCraig Мне не нравится стиль Allman, но, привыкнув к круглым скобкам Python и Lisp, я нормально отношусь к нескольким закрывающим скобкам, и я предпочитаю вертикальную компактность и некоторое ощущение Python (первое, что я вижу в новой строке, это всегда ключевое слово).   -  person mmj    schedule 06.07.2016
comment
Просто подумайте о скобках как о ключевом слове. Делать C ++ похожим на Python всегда будет ошибкой.   -  person Cody Gray    schedule 06.07.2016
comment
@CodyGray Назовите это Python, YAML или как-то еще, мне нравятся осмысленные отступы, и даже после обработки с помощью средства форматирования даже отступы C ++, несомненно, имеют смысл. И поскольку это имеет смысл, я не вижу смысла видеть закрывающие фигурные скобки, которые дают мне информацию, которая у меня уже есть. В любом случае, прежде всего, de gustibus non disputandum est.   -  person mmj    schedule 06.07.2016


Ответы (1)


Исходный код в формате clang довольно чистый, его не так уж сложно прочитать или изменить, как только вы поймете идею.

Вот патч, который я сделал год назад, который добавляет «разрыв перед скобкой после списков инициализации конструктора» в clang 3.7. (К сожалению, он не был объединен после обсуждения, но я все равно продолжал использовать его для своих собственных проектов.) Это не слишком много кода: https://github.com/cbeck88/clang/commit/e4f65cf7ab3deea9e6c7cdd5900ad0362835e514

Выяснить, как создать clang и запустить модульные тесты clang, вероятно, не меньше, чем на самом деле сделать патч, выполняющий то, что вы говорите.

Насколько я помню, исходный код больше основан на добавлении разрывов, а не на их удалении, поэтому в зависимости от того, как именно вы хотите формализовать свою идею (это только управляющие структуры? Для if? Для скобок, оканчивающихся на функция или класс?) это может быть сложно. Но я все же надеюсь, что вы сможете заставить его работать.

Насколько я помню, нет встроенных опций, позволяющих делать что-то близкое к тому, что вы говорите.

person Chris Beck    schedule 06.07.2016
comment
Кроме того, fwiw building clang не так уж и сложен, единственная сложная часть заключается в том, насколько он модульный, как в основном есть LLVM, который стоит отдельно, затем clang, который в этом нуждается, затем clang-tools в качестве подмодулей в этом, и поэтому вы в конечном итоге необходимо немного согласовать различные компоненты. Но собрать gcc было намного сложнее, по крайней мере, для меня: p - person Chris Beck; 06.07.2016
comment
Спасибо за ваше предложение, кстати, прежде чем настраивать исходный код clang-format, я бы попробовал Artistic Style, в котором, кажется, есть предопределенная опция 'Lisp style'. - person mmj; 06.07.2016