clang-format: не добавляйте пробелы для включения ссылок на инструкции/методы.

Я использую clang-format для форматирования кода.

Я заметил, что он добавляет пробелы для включения операторов и полных ссылок на методы.

Учитывая следующий («правильно отформатированный») фрагмент кода:

#include bli/bla/blub/_foo;

fun()
{
    bli/bla/blub/_foo::bar();
}

При прогоне через clang-format получается вот это:

#include bli / bla / blub / _foo;

fun() { bli / bla / blub / _foo::bar(); }

Я не хочу, чтобы пробелы добавлялись до и после /, так как путь не может быть изменен. Расположение фигурных скобок не имеет значения.

Я не знаю, как это сделать, я просмотрел документацию здесь но я не видел соответствующей опции style. Любые идеи/помощь по исправлению этого?


person BullyWiiPlaza    schedule 29.12.2017    source источник
comment
простите мое невежество, на каком языке программирования написан ваш код? :-)   -  person Palo    schedule 29.12.2017


Ответы (1)


Этот код не является допустимым C++, поэтому clang-format ведет себя не так, как вы могли бы ожидать (я предполагаю, что C++ - это то, что вам нужно).

  • Оператор #include bli/bla/blub/_foo; должен иметь двойные кавычки до и после пути к заголовку, а точка с запятой должна быть опущена.

  • Для полностью определяемых символов в C++ вы должны использовать :: в качестве разделителя, поэтому bli/bla/blub/_foo::bar(); также не является допустимым для C++.

В операторе include, поскольку двойные кавычки отсутствуют, clang-format видит bli/bla/blub/_foo как "bli, разделенное на bla, разделенное на blub, разделенное на _foo::bar()" - точно так же, как любой компилятор C/C++ - и добавляет пробелы между / и операндами, что кажется разумный.

Если вы передаете clang-format правильный код C++, например:

#include "bli/bla/blub/_foo"

void fun()
{
    bli::bla::blub::_foo::bar();
}

Вы получите:

#include "bli/bla/blub/_foo"

void fun() {
  bli::bla::blub::_foo::bar();
}
person valiano    schedule 02.01.2018
comment
Да я вижу. Я работал с диалектом С++, поэтому я предполагаю, что использование clang-format не будет работать так хорошо. Однако синтаксис правильный. - person BullyWiiPlaza; 02.01.2018
comment
@BullyWiiPlaza понял. clang-format автоматически определяет этот синтаксис как C++, но вы можете настроить его так, как вам нужно. К сожалению, я не нашел возможности не ставить пробелы между бинарным оператором и его операндами, т.е. a/b всегда преобразуется в a / b. - person valiano; 03.01.2018