LINUX.ORG.RU

clang-format c++ разрешить пробелы перед скобками в функциях преобразования

 , ,


0

1

Добрый день.
Есть конструкции в объявлении шаблонного класса:

friend std::ostream &operator<< <>(std::ostream &os, const Point<T> &point);
friend bool operator== <>(const Point<T> &point, const Point<T> &otherPoint);
friend bool operator< <>(const Point<T> &point, const Point<T> &otherPoint);
При проходе этого clang-format-ом получается не очень красиво:

friend std::ostream &operator<<<>(std::ostream &os, const Point<T> &point);
friend bool operator==<>(const Point<T> &point, const Point<T> &otherPoint);

// А эта строка вдобавок не компилируется
friend bool operator<<>(const Point<T> &point, const Point<T> &otherPoint);

Как бы сказать clang-format-у, чтобы он не удалял данные пробелы?
Заранее спасибо.

UPD0
Пока на ум приходят только

// clang-format off
// ...
// clang-format on

UPD1 Отправил bug report https://bugs.llvm.org/show_bug.cgi?id=42381

★★★★★

Последнее исправление: rumgot (всего исправлений: 5)

Друзья, неужели никто? Тогда вопрос: пользуетесь ли вы утилитой clang-format (или аналогом) под плюсы?

rumgot ★★★★★
() автор топика
Ответ на: комментарий от rumgot

Я лично использую uncrustify. У него огромное количество настроек, можно подогнать практически под любые требования. Осилит ли он конкретно твой случай, не знаю, но посмотреть рекомендую.

// А эта строка вдобавок не компилируется

А вот это уже тянет на баг clang-format, можно и зарепортить.

Laz ★★★★★
()
Ответ на: комментарий от rumgot

Ты не понимаешь сути утилит типа clang-format. Задача не «сделать красиво», а «сделать единообразно и поддерживать это единообразие». Детали стиля не важны, важно его наличие и соблюдение

Gvidon ★★★★
()
Ответ на: комментарий от Gvidon

сделать единообразно

мне казалось, этим занимается компилятор. Человеку нужен читаемый код, а не однострочник без пробелов.

Deleted
()
Ответ на: комментарий от Gvidon

Ты внимательно прочитал тему? В данном случае кроме красоты (да хрен с ней) код становится нерабочим.

rumgot ★★★★★
() автор топика

А какой стандарт С++?

Может хрен с ним, пусть удаляет, но код вроде бы в новых С++ должен оставаться рабочим без этим пробелов.

anonymous
()
Ответ на: комментарий от anonymous

Стандарт C++11. После удаления пробела становится нерабочей строка:

// А эта строка вдобавок не компилируется
friend bool operator<<>(const Point<T> &point, const Point<T> &otherPoint);
Что неудивительно.

rumgot ★★★★★
() автор топика
Последнее исправление: rumgot (всего исправлений: 1)
Ответ на: комментарий от rumgot

Тогда вопрос: пользуетесь ли вы утилитой clang-format

Пользуюсь постоянно. Но настроить идеально мне его не удалось. В итоге просто смирился с некоторыми его косяками.

andreyu ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.