Почему параметры PointerAlignment и PointerBindsToType не работают?

Я использую clang-формат (version 8.0.0 (tags/google/stable/2019-01-18)) с файлом стиля, в котором я установил

…
PointerAlignment: Left
PointerBindsToType: true
…

Это позволяет преобразовывать объявления, такие как этот

const string &foo = "lorem ipsum";

в

const string& foo = "lorem ipsum";

Однако, когда я также включаю в свой файл стиля

BasedOnStyle: Google

опции ничего не делают. По какой-то причине они переопределяются базовым стилем. Мне это кажется бессмысленным — вместо этого явные параметры должны переопределять базовый стиль, не так ли? Может кто-нибудь объяснить, в чем проблема и как использовать BasedOnStyle и PointerBindsToType: true?


person oarfish    schedule 11.06.2019    source источник


Ответы (1)


Ответ заключается в том, что стиль Google (его можно проверить с помощью clang-format -style=google -dump-config | less) определяет

DerivePointerAlignment: true

В документации это сказано

Если это так, проанализируйте отформатированный файл на предмет наиболее распространенного выравнивания & и *. Стили выравнивания указателя и ссылки будут обновлены в соответствии с настройками, найденными в файле. PointerAlignment затем используется только как запасной вариант.

Это означает, что нужно явно установить DerivePointerAlignment: false, если вы хотите справиться с этим самостоятельно.

person oarfish    schedule 11.06.2019